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:----i9Ors1VFqrOyzWu5jJzNX2dlwOcEjhXXfDtVOvS2vOxbhUZJiCp6RBRyyfiNP+1eB21TsREjXcSXxKNbc1Df8TbxwFEUVw55UHXqRwaVa+wjF0wOtXGU26VMkBHtHcq0/NzbDgNP0ZKnUk/s7oH1SpqlQY5u4YhbK/U4Uog3Fr1M9ZDkmOhQ7Kz4j9dZ9MZTTwqNSrzHdrlQ3LCIUx8v7g+JewKBJ8KWHD8/zmSvrVbF02b75cZVQ4OXHAVxtpW+E4qCcBRTgFPNTBrO0mZbVTNMe7tpzgPdWNvAMM9BKzO7SSzXkmPMd13KlZDNp9/jqvMgwZ+sxhpYImbChimP3FxtOwwNIyVCXqRX4UVyQSm6v0e/AfsdvZSsiG3V5IB0mjCr2w80v9lmV27t4Fbqg1x1Bvidx6AWwj/Ey+uFnKJvaQbkznXfav6zqmjIzwe/tiQoTCalNodI+Nygeqg6iAGK3SHfz5w4j1WMAcz3xwIQaBuJtA+HKKm26d5zuj2yagLN80e/bwAu/vWHwuidmORkDc0ewxNWZRUtgYgLyy53EemfeRD6QVoShX+BsKIVrR08vX87HnaGltsEztgIidC0Zm7tS2loD4tZvF/DY4O9lrWxR46WAJnANMeOUnPTmDqeD0gfJb8150GpixlygGBmDBAZjHYqIUpTthP/KLA=----ATTACHMENT:----NTA5Mjc0NjQwOTg4MzUyMCAyODk1MTg4Njk0MzQ5MDAxIDQxMDI2NTI5MjcwNjYwNTU=