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:----W6BnyJV9U4XrfObnxh+TKH2R/AbKtp15sP65l2HuAWr/xpJJYSaWfQhbXgtCuGeY3oVneKYp4t0Xq8jc97ISOhaUtERQ5F3gR0gqqiHclW65vltfI5H+OhBU4ArQW9gAI/5hI9wqgVXEciTfJcWYIf/2VVVZeISXJzhzt0To2KHBCz0KNEGwdfhegHkx+hObYmsCcrPIhqd0cxXs9LhqC/6Y8r+fwOgbhKkjS9gm1Kl2nLaPeOiG/F8bgInhGaoB6xmdyveBkXsYVUbf0IFMheeyHL5fWoPwOSqMidx0HQAyfHAeeA8CnoDU8WnhdWBcdMAeuYiBXIl5Hk0cVJpKGGipn+yo9OFC+Hj+8mbdpAI45q0zU41xFBuKFZ5Dr8pqgrhSMvEgf33E1GCOwHgIYzUtId5ypqqpgLTHJEJMvRv7OBjCDsQ3s0GzBNcsZ9NegSN8lGuL2Kr9VsbGHZOlaIrcywC/1qjq1/0udXlwmjVrcZ3i5wMhzl6OCd6Yxvfol0KG9qAzZi6u1JJVo2ZjrgDbpI2Y1JIy9Iw3LpIxiiCfWqu1CH/Q5CNoqzUSOX1vUcSie7PKBNdJA/iJe+FuB7xRtBfjr4pseOpx1VN7O406FLTDU0eFYLcn18dnr4ESkGGPILQ1QKWt1grNrZa+B5u8bwVgzJ9MBbLQTAg5iOw=----ATTACHMENT:----Mjg2OTE2NTg3Nzg1Njk4NCA4ODAwNDEyMDEzNDQzNDM3IDE3NTkzNDQ0Mjk0MTkzMTI=