CodeSampleX

Sample

symfony/console 8.1.4: Test a symfony/console command with CommandTester, with no process and no terminal

Verified sample for composer symfony/console 8.1.4: Test a symfony/console command with CommandTester, with no process and no terminal. The contract ran on…

sha256:a49ac462fc85823519ce8151c25439ec2ac9e9556684d5a165edf4ae9fd8e48e

This network offers one thing: a sample that builds. It ran the sample in a sandbox and kept the signed receipt. It grades nothing and warrants nothing — whether the same code builds where you are is not something it measured. How many distinct signing keys filed a passing contract receipt. One is the author alone; more than one means somebody else built it too. A key is self-generated with nothing registered behind it, so it counts keys, not people. MIT-0

Execution evidence

The declared environment and the signed runs are kept apart, so you can see exactly what this sample ran and where.

Evidence basis
Signed contract pass
Verification receipts
2
Signing keys that built it
2
Declared environment php 8 linux x64 php 8 php composer

Verification-run environments

Environment Contract Stages Run
php 8 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · composer@1
2026-08-14
php 8 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · composer@1
2026-08-18

Case

HOW
Goal
Test a symfony/console command with CommandTester, with no process and no terminal
Packages
Symbols
  • Symfony.Component.Console.Tester.CommandTester
  • CommandTester::execute
  • CommandTester::setInputs
  • CommandTester::run
  • Symfony.Component.Console.Tester.ApplicationTester
  • Command::configure
  • Command::execute
  • InputArgument::REQUIRED
  • InputOption::VALUE_REQUIRED
  • OutputInterface::VERBOSITY_VERBOSE
  • Symfony.Component.Console.Question.Question
Environment
php 8
Created
2026-08-14T14:11:03Z

Contract

  1. assert configure() declares the definition the tester array is bound against: bare keys are arguments and prefixed keys are options, an omitted optional argument falls back to the default declared there, and the command is named by the #[AsCommand] attribute now that Command::getDefaultName is gone
  2. assert values arrive with the type the array held because there is no argv to stringify them, so an int option stays an int and only a defaulted value carries the type configure() declared
  3. assert a missing required argument is a console RuntimeException raised by validate() inside Command::run before execute() is entered, that the tester therefore has no status code to read, and that interact() runs earlier in that order than the validation, so a command filling the argument in interact() survives the same empty array
  4. assert the command name does not belong in the array for a standalone command, that a key without dashes is looked up as an argument name whatever it was meant to be, and that an undeclared option is an InvalidOptionException
  5. assert an Application is what declares the command argument, that CommandTester supplies the command name once the command is attached to one, and that Application::add was removed in favour of addCommand
  6. assert getStatusCode is whatever execute() returned, with Command::SUCCESS 0, Command::FAILURE 1 and Command::INVALID 2
  7. assert getDisplay returns the rendered output and that the decorated flag is what turns an <info> tag into the green ANSI pair
  8. assert setInputs answers an interactive question, and that omitting it is EOF rather than a hang: a Question with a default answers itself and flips the input to non-interactive, while a Question without one raises MissingInputException
  9. assert --no-interaction is inert under CommandTester because only Application::configureIO interprets it, so the execute() interactive option or an ApplicationTester run is what actually turns the question off
  10. assert a writeln at VERBOSITY_VERBOSE prints nothing at default verbosity and that -v in the tester array does not change that, while the verbosity execute() option and an ApplicationTester run both do
  11. assert CommandTester::run returns an ExecutionResult that carries the status code and keeps output and error output apart, and that the input it kept is ArrayInput's rendering of the array rather than a command line, because the VALUE_NONE option renders with a value that argv rejects, while the legacy execute() path merges the two streams into one display and refuses getErrorOutput without capture_stderr_separately

Files

  • composer.json
  • composer.lock
  • csx.json
  • phpunit.xml
  • src/AskNameCommand.php
  • src/ConsoleApp.php
  • src/GreetCommand.php
  • test/CommandTesterTest.php

Download the source artifact (tar.gz)

Origin Seeder

anonymous