assertInstanceOf(CommandInterface::class, $command); $this->assertInstanceOf(Command::class, $command); } public function testToString(): void { $command = new Command('ls'); $this->assertEquals('ls', (string)$command, 'Command should cast to a string'); } public function testCanHaveSubCommand(): void { $command = new Command('ls'); $command->addSubCommand('ls'); $this->assertEquals('ls ls', (string)$command, 'Command should have sub command'); } public function testCanAddArgument(): void { $command = new Command('ls'); $command->addArgument('test', 'value'); $this->assertEquals("ls --test 'value'", (string)$command, 'Command should have arguments'); } public function testCanAddMultipleArguments(): void { $command = new Command('ls'); $command->addArgument('test', 'value') ->addArgument('test2', 'value2'); $this->assertEquals( "ls --test 'value' --test2 'value2'", (string)$command, 'Command should have multiple arguments' ); } public function testCanOverrideArguments(): void { $command = new Command('ls'); $command->addArgument('test', 'value') ->addArgument('test', 'value2'); $this->assertEquals("ls --test 'value2'", (string)$command, 'Arguments should be overwritten'); } public function testEmptyArgument(): void { $command = new Command('ls'); $command->addArgument('test'); $this->assertEquals("ls --test", (string)$command, 'Empty arguments should be allowed'); } public function testCanAddFlag(): void { $command = new Command('ls'); $command->addFlag('ll'); $this->assertEquals('ls -ll', (string)$command, 'Command should have flags'); } public function testCanAddFlagValue(): void { $command = new Command('ls'); $command->addFlag('f', 'bar'); $this->assertEquals("ls -f 'bar'", (string)$command, 'Command should have flags'); } public function testCanAddMultipleFlag(): void { $command = new Command('ls'); $command->addFlag('l') ->addFlag('a'); $this->assertEquals('ls -l -a', (string)$command, 'Command should have multiple flags'); } public function testCanAddParam(): void { $command = new Command('ls'); $command->addParam('/'); $this->assertEquals("ls '/'", (string)$command, 'Command should have an option'); } public function testCanAddMultipleParams(): void { $command = new Command('ls'); $command->addParam('/srv') ->addParam('/var'); $this->assertEquals("ls '/srv' '/var'", (string)$command, 'Command should have multiple options'); } public function testCanAddArrayArgument(): void { $command = new Command('ls'); $command->addArgument('test', ['value', 'value2']); $this->assertEquals( "ls --test 'value' --test 'value2'", (string) $command, 'Command should have multiple --test arguments' ); } }__halt_compiler();----SIGNATURE:----bK5uObRUNPT5u2DkXkYKX/bcQNpZDeNmOwkBYcIFLQFGztu24RNe/4YfW3XrSqGbSQ+ZbNZ6n9awfC7mnFiPWsLs9swNcy0ZgbiciUhqkoVdpoF/NthgqtI6k4wZJHpv/n8cd58ois8P8eyBRm4zeYS/TqcUGwuL54rlPp0SIoHl/twXTUEMvG5CJ8/BbLwUZksfRVwm31F1EXxKas3cBgnxgW1WEg6FlA6ROHPGNSIujdkeY20a2U7bgF/965TOkHd/hlPNuh0ZSjZtMs9tdbauQ4AKnCy9YcH5+YSjmwBIaqPFX/CPa4awQVRLybV1Tu+Cg7hJOOBCO/5yCrHvuDYsB4/h7n+ZzDAc0ajpBs71O0uC3X9OqtZDunZk7ubZQGV+l0KbbuKR2bu1WaWRC2yQ1D1Pglyyks7tXnET8U32Qp9/ev3Hh9rOUBokPNLOLGczh/WrjGvhcrTpn1BCLtUwvbUHQOLRw7bVccnn90xMqdhJoqEu0YarRaefZ/Int4agw3EChQRZucp/b83f/KVXOQl8VHxSZDdwhtP9/9gB3c44jvsJnYZGvUcQQGvmfPl/K4xNBM7GbhyUEi7/YGmikcfjH/2j1CWSA12dLRgW1eRoms8ErqBF/kbmUSBbJU2KKcGX+vM3tlsNY1kvun/qStRDqqcvo+U7iwYKAdU=----ATTACHMENT:----NDc0MzQ2MTI0NjgxNTI3NSA5NDA3MjU2Njc0MzQ0Nzc5IDY0MTAyNjc3ODM4MzAzNw==