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


Reply via email to