public function testParameters()
{
$method = new PhpMethod('needsName');
$this->assertEquals([], $method->getParameters());
$this->assertSame($method, $method->setParameters($params = [new PhpParameter('a')]));
$this->assertSame($params, $method->getParameters());
$this->assertSame($method, $method->addParameter($param = new PhpParameter('b')));
$this->assertSame($param, $method->getParameter('b'));
$this->assertSame($param, $method->getParameter(1));
$params[] = $param;
$this->assertSame($params, $method->getParameters());
$this->assertSame($method, $method->removeParameter(0));
$this->assertEquals('b', $method->getParameter(0)->getName());
unset($params[0]);
$this->assertEquals([$param], $method->getParameters());
$this->assertSame($method, $method->addParameter($param = new PhpParameter('c')));
$params[] = $param;
$params = array_values($params);
$this->assertSame($params, $method->getParameters());
$this->assertSame($method, $method->replaceParameter(0, $param = new PhpParameter('a')));
$params[0] = $param;
$this->assertSame($params, $method->getParameters());
$method->removeParameter($param);
$method->removeParameter('c');
$this->assertEquals([], $method->getParameters());
}