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());
}