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());
 }
Beispiel #2
0
 /**
  * @param string $xrefKey
  * @param string|array $xrefInfo
  * @param XrefTokenResolverCollection $xrefTokenResolvers
  * @param Xref[] $xrefPath
  * @return Xref|mixed
  * @throws TreeCompilerFormatException
  * @throws \Exception
  */
 protected function parseXrefInfo($xrefKey, $xrefInfo, XrefTokenResolverCollection $xrefTokenResolvers = null, $xrefPath)
 {
     $xrefData = null;
     if (gettype($xrefInfo) == 'string') {
         list($xrefType, $xrefLocation) = Xref::parseDefinitionString($xrefInfo, $this->xrefTypeAndLocationDelimiter);
     } else {
         if (!is_array($xrefInfo)) {
             throw new TreeCompilerFormatException(sprintf('The Xref definition key "%s" must be a string with the format xref_type %s xref_location ' . 'or an associative array with the keys "%s" for type and "%s" for location.', $this->xrefTypeAndLocationDelimiter, $this->includeXrefTypeKey, $this->includeXrefLocationKey));
         }
         $requiredKeyErrorMessage = 'The "%s" key is missing from the Xref definition with the key "%s".';
         if (!isset($xrefInfo[$this->includeXrefTypeKey])) {
             throw new TreeCompilerFormatException(sprintf($requiredKeyErrorMessage, $this->includeXrefTypeKey, $xrefKey));
         }
         $xrefType = $xrefInfo[$this->includeXrefTypeKey];
         if ($xrefType == InlineXrefResolver::getType()) {
             if (!isset($xrefInfo[$this->includeXrefDataKey])) {
                 throw new TreeCompilerFormatException(sprintf($requiredKeyErrorMessage, $this->includeXrefDataKey, $xrefKey));
             }
             $xrefData = $xrefInfo[$this->includeXrefDataKey];
             $xrefLocation = Xref::computeId($xrefType, serialize($xrefData));
         } else {
             if (!isset($xrefInfo[$this->includeXrefLocationKey])) {
                 throw new TreeCompilerFormatException(sprintf($requiredKeyErrorMessage, $this->includeXrefLocationKey, $xrefKey));
             }
             $xrefLocation = $xrefInfo[$this->includeXrefLocationKey];
         }
     }
     if (isset($xrefData)) {
         if (isset($xrefTokenResolvers)) {
             $xrefTokenResolvers->applyToArray($xrefData);
         }
     } else {
         if (isset($xrefTokenResolvers)) {
             $xrefLocation = $xrefTokenResolvers->applyToString($xrefLocation);
         }
         $xrefLocation = Xref::computeAbsoluteLocation($xrefType, $xrefLocation, $xrefPath);
     }
     $xrefId = Xref::computeId($xrefType, $xrefLocation);
     if ($this->xrefs->hasById($xrefId)) {
         return $this->xrefs[$xrefId];
     }
     $xref = new Xref($xrefType, $xrefLocation);
     if (isset($xrefData)) {
         $xref->setData($xrefData)->setResolved(true);
     }
     return $xref;
 }
 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);
 }