public function testProcessesIncludeFiles()
{
$mainFile = self::$dir . '/main.yml';
// needs to be a real file to be cached
$parsedMainFileContent = ['include' => ['file1.yml', 'another_level/file2.yml'], 'Nelmio\\Alice\\Model\\User' => ['user_main' => []]];
$parsedFile1Content = ['Nelmio\\Alice\\Model\\User' => ['user_file1' => []]];
$parsedFile2Content = ['include' => [self::$dir . '/file3.yml'], 'Nelmio\\Alice\\Model\\User' => ['user_file2' => []]];
$parsedFile3Content = ['Nelmio\\Alice\\Model\\User' => ['user_file3' => []]];
$expected = ['Nelmio\\Alice\\Model\\User' => ['user_file3' => [], 'user_file2' => [], 'user_file1' => [], 'user_main' => []]];
$parserProphecy = $this->prophesize(ParserInterface::class);
$parserProphecy->parse($mainFile)->willReturn($parsedMainFileContent);
$parserProphecy->parse(Argument::containingString('file1.yml'))->willReturn($parsedFile1Content);
$parserProphecy->parse(Argument::containingString('file2.yml'))->willReturn($parsedFile2Content);
$parserProphecy->parse(Argument::containingString('file3.yml'))->willReturn($parsedFile3Content);
/* @var ParserInterface $parser */
$parser = $parserProphecy->reveal();
$processor = new DefaultIncludeProcessor(new DefaultFileLocator());
$actual = $processor->process($parser, $mainFile, $parsedMainFileContent);
$this->assertSame($expected, $actual);
}