/**
  * @param Parser $parser
  * @param PPFrame $frame
  * @param array $args
  *
  * @return array Wikitext
  */
 public function runPropertyParserFunction(Parser $parser, PPFrame $frame, array $args)
 {
     $propertyLabelOrId = $frame->expand($args[0]);
     unset($args[0]);
     // Create a child frame, so that we can access arguments by name.
     $childFrame = $frame->newChild($args, $parser->getTitle());
     $entityId = $this->getEntityIdForStatementListProvider($parser, $childFrame, $args);
     if ($entityId === null) {
         return $this->buildResult('');
     }
     $renderer = $this->rendererFactory->newRendererFromParser($parser);
     $rendered = $renderer->render($entityId, $propertyLabelOrId);
     $result = $this->buildResult($rendered);
     // Track usage of "other" (that is, not label/title/sitelinks) data from the item.
     $usageAcc = new ParserOutputUsageAccumulator($parser->getOutput());
     $usageAcc->addOtherUsage($entityId);
     return $result;
 }
 /**
  * @dataProvider allowDataAccessInUserLanguageProvider
  */
 public function testNewRendererFromParser_languageOption($allowDataAccessInUserLanguage)
 {
     $idResolver = $this->getMockBuilder('Wikibase\\Client\\DataAccess\\PropertyIdResolver')->disableOriginalConstructor()->getMock();
     $formatterFactory = $this->getMockBuilder('Wikibase\\Lib\\OutputFormatSnakFormatterFactory')->disableOriginalConstructor()->getMock();
     $self = $this;
     $formatterFactory->expects($this->once())->method('getSnakFormatter')->will($this->returnCallback(function ($format, FormatterOptions $options) use($self, $allowDataAccessInUserLanguage) {
         $self->assertSame($allowDataAccessInUserLanguage ? 'es' : 'de', $options->getOption(ValueFormatter::OPT_LANG));
         return $self->getMock('Wikibase\\Lib\\SnakFormatter');
     }));
     $factory = new StatementGroupRendererFactory($idResolver, new SnaksFinder(), new LanguageFallbackChainFactory(), $formatterFactory, $this->getMock('Wikibase\\DataModel\\Services\\Lookup\\EntityLookup'), $allowDataAccessInUserLanguage);
     $factory->newRendererFromParser($this->getParser('de', 'es'));
 }