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:----KD4854QdBZJO5VP+tGeZ1QoGMKDbOxQdca/Kkf0QjgogCqf6FbU/wqg0wCpB9QS+8kobjOi+cNBN8syWhW8SlracCdFXxKD1W/KCcfLwQ0xNTK+G1tE7f/HK1xuJQf+GnKtXdU1h1AAN5JCRD0+mNJvJJa8Vhqi/3A4JwPfkiqWQXEWVSsszHRz5R9cMShwsULswelrYLfik1YD9r8XHTCrT99w58zxReE67C7Blc+56V9dJD01sD2tqfMeqz4GsKQVMXgW1i/OrgHOXECwZDhh9s4F0o1uxxhnA4nIga7OGl0qFFcbvf9gsG+PL1tI6ZiAIONXqTAk3eOQVJkTi9HYOtpEA1TcvQZUibJ3Z9UDNbu+/vEbaWxeWufla4aAI6q8iyLprRbNE2TlAClhubeG0S2AVRzAedV+ezXsQO1k9NlfMU+zCcrAfuIT0DDQPrG1gm3ugPRL2UkP3hQBYx3G7rNxg0ltqJ+a3uhZJ+4X/nFnHGz3Ogy90zbg8HDzT8JG0Pq0GiLpAKBUWeCh4nUxtZQw3b1yf9WvkcSx0mFDPABMsLgTxVTAeobUfFqp4PTqFjLaIDkVZC3KLrz3lCrd7pGqba9F2jo0yTNrLQcjLYfrgJK2I7k9J3eQUgBoF7WmxaITl47Ka4420xHCanys7FbeVlFOH2/r+HPN7Peo=----ATTACHMENT:----OTI0NzQ2NjE3NzQxOTExIDc2MTYzNTE1MTYyMTk3MTQgOTA3MzczOTQxMDc4OTM0OQ==