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:----Ij/Sf6Nje+SfhIwAfdcDgAZqJpu46oT3lEbleFC6Net91DjgLn6CqzAWxLlmgjy0jc426PKkCLvXVuaECjBLbvzH8URyfGjFilif9dhP7YAINlqSGsMdqZKEVBRGeLz6M8Xs65FK2NupXOThgNbt+tp/l2K+gYozeDJuQ0DPjKJqK1ahmFtCEnzXbGRb/2MpndHzTS4kOtXenvU6ePDyuuUv/03qYJZpul3RCr6MjiAVvotevYxlzh4iyOgsTeTEbMz0IN9RdlYD3IikyG0M9WJmqMZs2pfnX0ghMXCsvTYUazcfFf+3cqgNAhw4G6Ju4ZseGpSMytKkSlhcpXkQ1G6sViefGXMjAajykffcvjGTsIbSp//I9X2hgyUwJSGULRjIM2bKtpH4Ko0Xr4IoEUJ2v0mSjtNYK8GDDYf6JQg+Tf/YpRdKsJEJqENQfUiCa75T7cOfNiZn/gUHx942w9QP99Wa6Yk6oE3538ve3Kh9dLS7ayCn0X3dhVm54iSg3/o4457RkQofC9J8P63v4lvpxsyft4BSv65PgIJ4StRJdC8YiEolTtxyuskhNDEeZVZramTNiRc6Ced7hBfyS6gQNClN8QIqIonUJb5geXUCdyL7rnq45KzaOoUwyTEkW760r6k/nwgxLSLP+y7SSOVe4So8gsI1C+xayaWyoAc=----ATTACHMENT:----NTU2NDA3NTg4OTE5NTM5MSA1MjE4NTQyMjE5MTcwODgyIDk5MjY4NDgzNTQ2MzQxNDM=