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:----QxFAOKJr03vYoNbt37TBqjIU1HWgdV49DJ8xFzigPWSLdrzHIapqKmK1PWkVUGC2y/oV4PAhldV5mP/IzCk9hnKTIl9HKRsJ3fFlqiZay5BsaO85Nf3dqD2cPTJ+kAgqLVaoW8WfJn/0Tuz6gdOhpEhx7FDAUsfvXJIOlSWzGrMIeiDTZ7jtUsn971cdUcUqU1hi4+IZxUb7VTdHGdOn8o5SpbsVLl6AYhBkBEHAdJEyYh0hWqNz7ekfVYEIFT4tF8/B6S/JyelW1iuVdo+g/nxKVO0pWeELwomf92fHmRYImGXlp1QgJrU59lqlA6cYmD9cejeCt+Pts1tbdee9+BQTUpRyx312h8fv9GttKP8/oMKldFPDCtRh1YbLy59P5EOIB8sYR39XgDPr3SO/DnxlGp2X7MXzDoba89Xr9lB6hwgw0lH/ts5jRh924XZiGkqKgXy/AmZpMaJLnSceov6BfTN/4lJfnV+wgbAed5hDsIW69K8Y7PjwkQRRFQSBo29YsDllshNwYlaOrTvDbqcKJioMjBMvEwNM5zxhlDfuSYoxuL106J40o+UA69znPE8puf3XvyR7GcvgkpwjaU5LwUG2xh0SN/HY03j3FxO8DcJz27PDS1zPebod0Ap9LU56YUmPkvNWY+bkiCJYzWYwsxoRwauDO2F+tAsJHyU=----ATTACHMENT:----NzI0MDYzODM4MDM4MDQxMSA5Nzc4MDcwMDIzMzM2NzIzIDM0MTk5MTM1ODM0MzUwNTU=