/** * @covers PhCompile\Template\Directive\NgClass::compile * @dataProvider compileExceptionProvider * @expectedException PhCompile\Template\Expression\InvalidExpressionException */ public function testCompileException($scopeData, $classString) { $this->scope->setData($scopeData); $document = Utils::loadHTML('<span ng-class="' . $classString . '"></span>'); $element = $document->getElementsByTagName('span')->item(0); $this->ngClass->compile($element, $this->scope); }
/** * @covers PhCompile\DOM\Utils::appendHTML * @dataProvider appendHtmlProvider */ public function testAppendHTML($html, $appendHtml, $expectedHtml) { $document = Utils::loadHTML($html); $element = $document->getElementsByTagName('span')->item(0); Utils::appendHTML($element, $appendHtml); $renderedHtml = Utils::saveHTML($document); $this->assertSame($expectedHtml, $renderedHtml); }
/** * @covers PhCompile\Template\Directive\NgValue::compile * @dataProvider compileProvider */ public function testCompile($scopeData, $bindString, $expected) { $this->scope->setData($scopeData); $document = Utils::loadHTML('<span ng-value="' . $bindString . '"></span>'); $element = $document->getElementsByTagName('span')->item(0); $compiledHtml = Utils::saveHTML($this->ngValue->compile($element, $this->scope)->ownerDocument); $expectedHtml = '<span ng-value="' . $bindString . '" value="' . $expected . '"></span>'; $this->assertSame($expectedHtml, $compiledHtml); }
/** * @covers PhCompile\Template\Directive\NgHide::compile * @dataProvider compileProvider */ public function testCompile($scopeData, $expression, $expectedClass) { $this->scope->setData($scopeData); $document = Utils::loadHTML('<span ng-hide="' . $expression . '" class=""></span>'); $element = $document->getElementsByTagName('span')->item(0); $this->ngHide->compile($element, $this->scope); $renderedHtml = Utils::saveHTML($element->ownerDocument); $expectedHtml = '<span ng-hide="' . $expression . '" class="' . $expectedClass . '"></span>'; $this->assertSame($expectedHtml, $renderedHtml); }
/** * Compiles template HTML. * This method uses registered directives and expressions to render AngularJS * template with given scope data. * * @return string Compiled HTML. */ public function compile() { $document = Utils::loadHTML($this->html); $domIterator = new \RecursiveIteratorIterator(new RecursiveDOMIterator($document), \RecursiveIteratorIterator::SELF_FIRST); /** * Iterate over every element inside DOM. */ foreach ($domIterator as $domNode) { if ($domNode->nodeType === XML_ELEMENT_NODE) { $this->compileNode($domNode); } } /** * Update template HTML from compiled DOM. */ $this->html = Utils::saveHTML($document); $this->compileExpressions(); return $this->html; }
/** * @covers PhCompile\Template\Directive\NgRepeat::compile * @dataProvider repeatSpectialPropertiesProvider */ public function testRepeatSpecialProperties($expression, $expectedArray) { $this->scope->setData(array('bar' => array(1, 2, 3, 4, 5, 6))); $document = Utils::loadHTML('<span ng-repeat="n in bar">{{' . $expression . '}}</span>'); $element = $document->getElementsByTagName('span')->item(0); $renderClass = $this->phCompile->getConfig('compile.class'); $renderAttr = $this->phCompile->getConfig('compile.attr'); $this->ngRepeat->compile($element, $this->scope); $compiledHtml = Utils::saveHTML($document); $expectedHtml = '<span ng-repeat="n in bar" class="ng-hide">{{' . $expression . '}}</span>'; for ($i = 0; $i < 6; $i++) { $expectedHtml .= '<span class="' . $renderClass . '"><span ' . $renderAttr . '="' . $expression . '">' . $expectedArray[$i] . '</span></span>'; } $this->assertSame($expectedHtml, $compiledHtml); }