Author: chabotc
Date: Sun May 10 19:47:35 2009
New Revision: 773396
URL: http://svn.apache.org/viewvc?rev=773396&view=rev
Log:
SHINDIG-1037 by lipeng, use createTextNode to assign css/js, and adds a test
Added:
incubator/shindig/trunk/php/test/gadgets/GadgetHtmlRendererTest.php
Modified:
incubator/shindig/trunk/php/src/gadgets/render/GadgetBaseRenderer.php
Modified: incubator/shindig/trunk/php/src/gadgets/render/GadgetBaseRenderer.php
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/gadgets/render/GadgetBaseRenderer.php?rev=773396&r1=773395&r2=773396&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/gadgets/render/GadgetBaseRenderer.php
(original)
+++ incubator/shindig/trunk/php/src/gadgets/render/GadgetBaseRenderer.php Sun
May 10 19:47:35 2009
@@ -271,7 +271,7 @@
// Inject our configured gadget document style
$styleNode = $doc->createElement('style');
$styleNode->setAttribute('type', 'text/css');
- $styleNode->nodeValue = Config::get('gadget_css');
+ $styleNode->appendChild($doc->createTextNode(Config::get('gadget_css')));
$node->appendChild($styleNode);
// Inject the OpenSocial feature javascripts
$forcedJsLibs = $this->getForcedJsLibs();
@@ -306,7 +306,7 @@
}
$scriptNode = $doc->createElement('script');
$scriptNode->setAttribute('type', 'text/javascript');
- $scriptNode->nodeValue = str_replace('&', '&', $script);
+ $scriptNode->appendChild($doc->createTextNode($script));
$node->appendChild($scriptNode);
}
Added: incubator/shindig/trunk/php/test/gadgets/GadgetHtmlRendererTest.php
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/test/gadgets/GadgetHtmlRendererTest.php?rev=773396&view=auto
==============================================================================
--- incubator/shindig/trunk/php/test/gadgets/GadgetHtmlRendererTest.php (added)
+++ incubator/shindig/trunk/php/test/gadgets/GadgetHtmlRendererTest.php Sun May
10 19:47:35 2009
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class MockHtmlGadgetFactory extends GadgetFactory {
+ public function __construct(GadgetContext $context, $token) {
+ parent::__construct($context, $token);
+ }
+
+ protected function fetchGadget($gadgetUrl) {
+ return '<?xml version="1.0" encoding="UTF-8" ?>
+<Module>
+ <ModulePrefs title="title">
+ <Require feature="opensocial-0.8" />
+ <Require feature="dynamic-height" />
+ </ModulePrefs>
+ <Content type="html" view="home">
+ <![CDATA[
+ <h1>Hello, world!</h1>
+ ]]>
+ </Content>
+</Module>';
+ }
+}
+
+/**
+ * GadgetRendererTest test case.
+ */
+class GadgetHtmlRendererTest extends PHPUnit_Framework_TestCase {
+
+ /**
+ * @var Gadget
+ */
+ private $gadget;
+
+ /**
+ * @var GadgetContext
+ */
+ private $gadgetContext;
+
+ /**
+ * @var GadgetHtmlRender
+ */
+ private $gadgetHtmlRenderer;
+
+ /**
+ * @var view
+ */
+ private $view;
+
+ /**
+ * @var DomElement
+ */
+ private $domElement;
+
+ /**
+ * @var DomDocument
+ */
+ private $domDocument;
+
+ /**
+ * Prepares the environment before running a test.
+ */
+ protected function setUp() {
+ parent::setUp();
+
+ $this->gadgetContext = new GadgetContext('GADGET');
+ $gadgetSpecFactory = new MockHtmlGadgetFactory($this->gadgetContext, null);
+ $gadgetSpecFactory->fetchGadget = null;
+ $this->gadget = $gadgetSpecFactory->createGadget();
+
+ // init gadgetRenderer;
+ $this->GadgetHtmlRenderer = new GadgetHtmlRenderer($this->gadgetContext);
+
+ // init $this->doc
+ $this->domDocument = new DOMDocument(null, 'utf-8');
+ $this->domDocument->preserveWhiteSpace = true;
+ $this->domDocument->formatOutput = false;
+ $this->domDocument->strictErrorChecking = false;
+ $this->domDocument->recover = false;
+
+ // init $this->element
+ $this->domElement = $this->domDocument->createElement('test');
+ }
+
+ /**
+ * Cleans up the environment after running a test.
+ */
+ protected function tearDown() {
+ $this->gadget = null;
+ $this->gadgetContext = null;
+ $this->GadgetHtmlRenderer = null;
+ $this->view = null;
+ $this->domDocument = null;
+ $this->domElement = null;
+
+ parent::tearDown();
+ }
+
+ /**
+ * Tests GadgetHtmlRenderer->renderGadget()
+ */
+ public function testRenderGadget() {
+ ob_start();
+ $this->GadgetHtmlRenderer->renderGadget($this->gadget, $this->view);
+ ob_end_clean();
+ }
+
+ /**
+ * Tests GadgetHtmlRenderer->addBodyTags()
+ */
+ public function testAddBodyTags() {
+ $this->GadgetHtmlRenderer->addBodyTags($this->domElement,
$this->domDocument);
+ $tmpNodeList = $this->domElement->getElementsByTagName("script");
+ foreach($tmpNodeList as $tmpNode) {
+ $this->assertEquals('gadgets.util.runOnLoadHandlers();',
$tmpNode->nodeValue);
+ }
+ }
+
+ /**
+ * Tests GadgetHtmlRenderer->addHeadTags()
+ */
+ public function testAddHeadTags() {
+ ob_start();
+ $this->GadgetHtmlRenderer->renderGadget($this->gadget, $this->view);
+ ob_end_clean();
+ $this->GadgetHtmlRenderer->addHeadTags($this->domElement,
$this->domDocument);
+
+ $tmpNodeList = $this->domElement->getElementsByTagName("style");
+ $tmpNodeList = $this->domElement->getElementsByTagName("script");
+ $script = '';
+ foreach($this->GadgetHtmlRenderer->gadget->features as $feature) {
+ $script .=
$this->gadgetContext->getRegistry()->getFeatureContent($feature,
$this->gadgetContext, true);
+ }
+
+ foreach($tmpNodeList as $tmpNode) {
+ $this->assertEquals('text/javascript', $tmpNode->getAttribute('type'));
+ $nodeValue = substr($tmpNode->nodeValue, 0, strpos($tmpNode->nodeValue,
'gadgets.config.init('));
+ $this->assertEquals(trim($script), trim($nodeValue));
+ }
+ }
+
+}
+?>
\ No newline at end of file