protected function resolveTokens(TokenCollection $tokens, XrefTokenResolver $xrefTokenResolver) { if (!$xrefTokenResolver->hasTokenResolver()) { throw new \Exception('No token resolver found for Xref token resolver.'); } $tokenResolver = $xrefTokenResolver->getTokenResolver(); $hasValues = False; if ($tokenResolver instanceof RegisteredTokenResolver) { $hasValues = $tokenResolver->hasRegisteredTokenValues(); } if ($tokenResolver instanceof ScopeTokenResolver) { $hasValues = $tokenResolver->hasScope(); } if (!$hasValues) { if ($xrefTokenResolver->hasXref()) { $xref = $xrefTokenResolver->getXref(); if (!$xref->isResolved()) { $treeCompiler = new TreeCompiler(); $compiledValues = $treeCompiler->compileXref($xref); $xref->setData($compiledValues); } $values = $xref->getData(); } else { $values = $xrefTokenResolver->getRegisteredTokenValues(); } if ($tokenResolver instanceof RegisteredTokenResolver) { $tokenResolver->setRegisteredTokenValues($values); } if ($tokenResolver instanceof ScopeTokenResolver) { $tokenResolver->setScope($values); } } $xrefTokenResolver->resolve($tokens); }
public function testOnDemandResolver() { $xrefDep1 = new Xref('file', '/dep1.json'); $xrefDep1->setData(array('on-demand1' => '{{token1}}', 'on-demand2' => '{{token2}}'))->setResolved(true); $xrefMain = new Xref('file', '/main.json'); $xrefMain->setData(array('include' => array('xref' => array('dep1' => array('type' => 'file', 'src' => '/dep1.json', 'resolve' => array(array('type' => 'on-demand', 'options' => array('token-prefix' => '{{', 'token-suffix' => '}}'), 'values' => array())))), 'main' => array('dep1'))))->setResolved(true); $treeCompiler = new TreeCompiler(); $treeCompiler->getXrefs()->add($xrefDep1); $compiled = $treeCompiler->compileXref($xrefMain); $expected = array('on-demand1' => '{{token1}}', 'on-demand2' => '{{token2}}'); $this->assertEquals($expected, $compiled); $this->onDemandTokenValues = array('token1' => 'ok1', 'token2' => 'ok2'); $testListener = new TestEventListener(array($this, 'eventListenerCallback')); $eventManager = EventManager::getInstance(); $eventManager->register($testListener); $this->assertTrue($eventManager->hasListeners()); $compiled = $treeCompiler->compileXref($xrefMain); $expected = array('on-demand1' => 'ok1', 'on-demand2' => 'ok2'); $this->assertEquals($expected, $compiled); $eventManager->remove($testListener); $this->assertFalse($eventManager->hasListeners()); }
public function testTokensInValuesXrefLocation() { $xrefDep1 = new Xref('file', '/dep1.json'); $xrefDep1->setData(array('content' => 'dep1.json', 'dep1version' => '{{version}}'))->setResolved(true); $xrefDep2 = new Xref('file', '/dep2.json'); $xrefDep2->setData(array('include' => array('xref' => array('dep1' => array('type' => 'file', 'src' => '/dep1.json', 'resolve' => array(array('type' => 'registered', 'options' => array('token-prefix' => '{{', 'token-suffix' => '}}'), 'values-xref' => array('type' => 'file', 'src' => '/dep{{version}}.json'))))), 'main' => array('dep1'))))->setResolved(true); $xrefMain = new Xref('file', '/main.json'); $xrefMain->setData(array('include' => array('xref' => array('dep2' => array('type' => 'file', 'src' => '/dep2.json', 'resolve' => array(array('type' => 'registered', 'options' => array('token-prefix' => '{{', 'token-suffix' => '}}'), 'values' => array('version' => '1'))))), 'main' => array('dep2'))))->setResolved(true); $treeCompiler = new TreeCompiler(); $treeCompiler->getXrefs()->add($xrefDep1); $treeCompiler->getXrefs()->add($xrefDep2); $compiled = $treeCompiler->compileXref($xrefMain); $expected = array('content' => 'dep1.json', 'dep1version' => 1); $this->assertEquals($expected, $compiled); }