assertInstanceOf(AbstractCommand::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(new SubCommand('ls')); $this->assertEquals('ls ls', (string)$command, 'Command should have sub command'); } public function testCanAddArgument(): void { $command = new Command('ls'); $command->addArgument(new Argument('test', 'value')); $this->assertEquals("ls --test 'value'", (string)$command, 'Command should have arguments'); } public function testCanAddMultipleArguments(): void { $command = new Command('ls'); $command->addArgument(new Argument('test', 'value')); $command->addArgument(new Argument('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(new Argument('test', 'value')); $command->addArgument(new Argument('test', 'value2')); $this->assertEquals("ls --test 'value2'", (string)$command, 'Arguments should be overwritten'); } public function testCanAddFlag(): void { $command = new Command('ls'); $command->addFlag(new Flag('ll')); $this->assertEquals('ls -ll', (string)$command, 'Command should have flags'); } public function testCanAddMultipleFlag(): void { $command = new Command('ls'); $command->addFlag(new Flag('l')); $command->addFlag(new Flag('a')); $this->assertEquals('ls -l -a', (string)$command, 'Command should have multiple flags'); } public function testCanAddParam(): void { $command = new Command('ls'); $command->addParam(new Param('/')); $this->assertEquals("ls '/'", (string)$command, 'Command should have an option'); } public function testCanAddMultipleParams(): void { $command = new Command('ls'); $command->addParam(new Param('/srv')); $command->addParam(new Param('/var')); $this->assertEquals("ls '/srv' '/var'", (string)$command, 'Command should have multiple options'); } public function testClone(): void { $command1 = new Command('ls'); $command1->addParam(new Param('/srv')); $command1->addSubCommand(new SubCommand('foo')); $command1->addArgument(new Argument('h')); $command2 = clone $command1; $command2->addParam(new Param('/var')); $command2->addSubCommand(new SubCommand('bar')); $command2->addArgument(new Argument('a')); $this->assertEquals( "ls foo --h '/srv'", (string)$command1, 'Original command must not be affect by cloned instances' ); $this->assertEquals( "ls foo bar --h --a '/srv' '/var'", (string)$command2, 'Cloned instances missing some options' ); $command1 = new Command('ls'); $command2 = clone $command1; $this->assertEquals("ls", (string)$command2, 'Cloned instances missing some options'); } }__halt_compiler();----SIGNATURE:----lb5htCyIpLdPnJxdq0dvAltvjFtyjUzh+uYWZPaczzioFll+SQvRKdc4y3L2bm2I/ydcm0WiX29IcEti4qBCG5EqmqbHEqHxDRBN29bBIATmgzHaPmJiMLDwodr0JaD03f4qNlvsq+m3hw2CUZwIAcGemeS0pA3QFPs5ztCuZgbGelfQ+QyEg/FN4GtdjWMoDdIufev8JSyiekcwQtQKZbxhEmtKUBPRpyhOuVgwiyUmGhPbYKDWMIIvII9jubQbBgYi1dBpOWnFns15QoxhNZaTgSFM2c9HGqgm/htTDoY6Ra2DFX5EJ2kra7lg7fZG00YIY2prbiMBp4aXTSMj5k5kHZTxkF+K8awgXQX+72pRxIBqHhlQmgeRxTIsmWYZbocuvqB8UykapaO3G2guIU+awCT+HS9pgpixGczQM0Q6kkmHjSrSDLRyFbp1UrSTnVUjeIXx3VQFyM1LJTtHSDxmUjysx8/8HyoO3ZHbxnlbzVtaagVWt4FWAJqn8E/bR0iPwIBz9bvayV2FfFplYf+UPI2UBGQLhLZLanhcju/KwE0BjYUCT+fzkNIgnF6/33dAf6AFE1hUoaupjtVXSHraieJRQH/Y8KZ6dcwXEgcDpqly0+OEubKEEfMcW0lz3ZX36jVxjbao0x0L7Tcs9FKrPv9nQ6d1iadZKzc307Y=----ATTACHMENT:----OTM3Nzg4NzUyMjI1NDkwMCAyODIwMTI4Mzg2Mjk2MDM2IDg5ODQ3NzE0MzIzMDYwNjg=