public function testLoadSubjectMerge()
{
$reflection = new ReflectionClass();
$reflection->class = 'TestChild';
$reflection->comment = <<<'EOT'
/**
* @BeforeMethods({"class2"})
*/
EOT;
$hierarchy = new ReflectionHierarchy();
$method = new ReflectionMethod();
$method->reflectionClass = $reflection;
$method->class = 'Test';
$method->name = 'benchFoo';
$method->comment = <<<'EOT'
/**
* @Revs(2000)
*/
EOT;
$reflection->methods[$method->name] = $method;
$method = new ReflectionMethod();
$method->reflectionClass = $reflection;
$method->class = 'Test';
$method->name = 'benchBar';
$method->comment = <<<'EOT'
/**
* @Iterations(99)
*/
EOT;
$reflection->methods[$method->name] = $method;
$hierarchy->addReflectionClass($reflection);
$reflection = new ReflectionClass();
$reflection->class = 'Test';
$reflection->comment = <<<'EOT'
/**
* @AfterMethods({"after"})
* @Iterations(50)
*/
EOT;
$method = new ReflectionMethod();
$method->reflectionClass = $reflection;
$method->class = 'Test';
$method->name = 'benchFoo';
$method->comment = <<<'EOT'
/**
* @Revs(1000)
*/
EOT;
$reflection->methods[$method->name] = $method;
$method = new ReflectionMethod();
$method->reflectionClass = $reflection;
$method->class = 'Test';
$method->name = 'benchBar';
$method->comment = <<<'EOT'
/**
* @Revs(50)
*/
EOT;
$reflection->methods[$method->name] = $method;
$method = new ReflectionMethod();
$method->reflectionClass = $reflection;
$method->class = 'Test';
$method->name = 'benchNoAnnotations';
$method->comment = null;
$reflection->methods[$method->name] = $method;
$hierarchy->addReflectionClass($reflection);
$metadata = $this->createDriver()->getMetadataForHierarchy($hierarchy);
$subjects = $metadata->getSubjects();
$this->assertCount(3, $subjects);
$subjectOne = array_shift($subjects);
$subjectTwo = array_shift($subjects);
$subjectThree = array_shift($subjects);
$this->assertEquals('benchFoo', $subjectOne->getName());
$this->assertEquals([2000], $subjectOne->getRevs());
$this->assertEquals('benchBar', $subjectTwo->getName());
$this->assertEquals([99], $subjectTwo->getIterations());
$this->assertEquals([50], $subjectTwo->getRevs());
$this->assertEquals(['class2'], $subjectTwo->getBeforeMethods());
$this->assertEquals(['after'], $subjectTwo->getAfterMethods());
$this->assertEquals(['class2'], $subjectThree->getBeforeMethods());
$this->assertEquals(['after'], $subjectThree->getAfterMethods());
}