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:----mkYISVoNZL/AfzvIBVj1/TJNJuxqBWwoqKJrY6N/vw0f2Cqqdn0DmhnmHcx2yVcxW9yJqJlGpppUu3XumVj88enOiPzqjB/IvfCZWCdKTYYADANRduyz92OsDBh1Pt57DyNwCNGnRBoecPFIBTJkdWX0imLNKRIpe9E7pTKWm0Z+qloeefyfeEGyPjbBGPd6QXVAch4f9zIpsrEMtG/DSbBtrfH3wDzD9eU8rGnMT9Hc2ssjm41S8yrySNjf5ibFJ4HshTQlgl7p0JgaHjT6pZ3tYC5k4dxvdGKPCZ2ewo8HSbowhupCyBXa4tMYq5Cheq3FGPDAfg2RGFhza0QpsB0THow8q8N4bBI+sbCRVIy6iNnH76TtQMztSqjwHtwG+oHYhJq4F3Xtzw9ymy4laA8uw531cJf2AuMLL4hZfGtsMhs1MNmmnWOsSwzfm5qaoYQ4wUf+YqMQ4+qJz01MGEc5OmSwYn1nEu+JFroEwJtV/QkyRDA+5pVGGcZUY6e/+PWLQKxQM9z2pOGfKbbWPyIw79MBy4ocgHMuDiBbqECVKWPwfGuGEIqWPUTavI/WGdISiys41qxSmByJK7MiFwxf1SO4LbHqr5D6FrccI8DNWWyyt4CK9iTD3b5HjtZnuys+1jXuMRZKrXFgba160B8DlKDBueQOrlw5Sr9L2NM=----ATTACHMENT:----MTkzMjQ0MjE5NzY1MzIwNiAyNjMzMDQ3MTI3ODI0NjkgMzU0MzMwNzg3OTE2NzcwOQ==