public function testCanCreateANewInstanceWithArguments() { $method = 'setUsername'; $arguments = null; $definition = new SimpleMethodCall($method, $arguments); $newArguments = [$arg0 = new \stdClass()]; $newDefinition = $definition->withArguments($newArguments); // Mutate before reading values $arg0->foo = 'bar'; $this->assertInstanceOf(SimpleMethodCall::class, $newDefinition); $this->assertNull($definition->getCaller()); $this->assertEquals($method, $definition->getMethod()); $this->assertEquals($arguments, $definition->getArguments()); $this->assertEquals($method, $definition->__toString()); $this->assertNull($newDefinition->getCaller()); $this->assertEquals($method, $newDefinition->getMethod()); $this->assertEquals([StdClassFactory::create(['foo' => 'bar'])], $newDefinition->getArguments()); $this->assertEquals($method, $newDefinition->__toString()); }