sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
231 lines (193 loc) • 7.38 kB
HTML
<html>
<!--
Copyright 2011 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.soy</title>
<script src="../base.js"></script>
<script>
goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('goog.functions');
goog.require('goog.soy');
goog.require('goog.soy.data');
goog.require('goog.soy.testHelper');
goog.require('goog.string');
goog.require('goog.testing.PropertyReplacer');
goog.require('goog.testing.jsunit');
</script>
</head>
<body>
<script>
var stubs;
function setUp() {
stubs = new goog.testing.PropertyReplacer();
}
function tearDown() {
stubs.reset();
}
function testRenderElement() {
var testDiv = goog.dom.createElement(goog.dom.TagName.DIV);
goog.soy.renderElement(testDiv, example.multiRootTemplate, {name: 'Boo'});
assertEquals('<div>Hello</div><div>Boo</div>', elementToInnerHtml(testDiv));
}
function testRenderElementWithNoTemplateData() {
var testDiv = goog.dom.createElement(goog.dom.TagName.DIV);
goog.soy.renderElement(testDiv, example.noDataTemplate);
assertEquals('<div>Hello</div>', elementToInnerHtml(testDiv));
}
function testRenderAsFragmentTextNode() {
var fragment = goog.soy.renderAsFragment(
example.textNodeTemplate, {name: 'Boo'});
assertEquals(goog.dom.NodeType.TEXT, fragment.nodeType);
assertEquals('Boo', fragmentToHtml(fragment));
}
function testRenderAsFragmentInjectedData() {
var fragment = goog.soy.renderAsFragment(example.injectedDataTemplate,
{name: 'Boo'}, {name: 'ijBoo'});
assertEquals(goog.dom.NodeType.TEXT, fragment.nodeType);
assertEquals('BooijBoo', fragmentToHtml(fragment));
}
function testRenderAsFragmentSingleRoot() {
var fragment = goog.soy.renderAsFragment(
example.singleRootTemplate, {name: 'Boo'});
assertEquals(goog.dom.NodeType.ELEMENT, fragment.nodeType);
assertEquals(goog.dom.TagName.SPAN, fragment.tagName);
assertEquals('Boo', fragment.innerHTML);
}
function testRenderAsFragmentMultiRoot() {
var fragment = goog.soy.renderAsFragment(
example.multiRootTemplate, {name: 'Boo'});
assertEquals(goog.dom.NodeType.DOCUMENT_FRAGMENT, fragment.nodeType);
assertEquals('<div>Hello</div><div>Boo</div>', fragmentToHtml(fragment));
}
function testRenderAsFragmentNoData() {
var fragment = goog.soy.renderAsFragment(example.noDataTemplate);
assertEquals(goog.dom.NodeType.ELEMENT, fragment.nodeType);
assertEquals('<div>Hello</div>', fragmentToHtml(fragment));
}
function testRenderAsElementTextNode() {
var elem = goog.soy.renderAsElement(example.textNodeTemplate, {name: 'Boo'});
assertEquals(goog.dom.NodeType.ELEMENT, elem.nodeType);
assertEquals(goog.dom.TagName.DIV, elem.tagName);
assertEquals('Boo', elementToInnerHtml(elem));
}
function testRenderAsElementInjectedData() {
var elem = goog.soy.renderAsElement(example.injectedDataTemplate,
{name: 'Boo'}, {name: 'ijBoo'});
assertEquals(goog.dom.NodeType.ELEMENT, elem.nodeType);
assertEquals(goog.dom.TagName.DIV, elem.tagName);
assertEquals('BooijBoo', elementToInnerHtml(elem));
}
function testRenderAsElementSingleRoot() {
var elem = goog.soy.renderAsElement(
example.singleRootTemplate, {name: 'Boo'});
assertEquals(goog.dom.NodeType.ELEMENT, elem.nodeType);
assertEquals(goog.dom.TagName.SPAN, elem.tagName);
assertEquals('Boo', elementToInnerHtml(elem));
}
function testRenderAsElementMultiRoot() {
var elem = goog.soy.renderAsElement(example.multiRootTemplate, {name: 'Boo'});
assertEquals(goog.dom.NodeType.ELEMENT, elem.nodeType);
assertEquals(goog.dom.TagName.DIV, elem.tagName);
assertEquals('<div>Hello</div><div>Boo</div>', elementToInnerHtml(elem));
}
function testRenderAsElementWithNoData() {
var elem = goog.soy.renderAsElement(example.noDataTemplate);
assertEquals('Hello', elementToInnerHtml(elem));
}
/**
* Asserts that the function throws an error for unsafe templates.
* @param {Function} function Callback to test.
*/
function assertUnsafeTemplateOutputErrorThrown(func) {
stubs.set(goog.asserts, 'ENABLE_ASSERTS', true);
assertContains('Soy template output is unsafe for use as HTML',
assertThrows(func).message);
stubs.set(goog.asserts, 'ENABLE_ASSERTS', false);
assertEquals('zSoyz', func());
}
function testAllowButEscapeUnsanitizedText() {
var div = goog.dom.createElement(goog.dom.TagName.DIV);
goog.soy.renderElement(div, example.unsanitizedTextTemplate);
assertEquals('I <3 Puppies & Kittens', div.innerHTML);
var fragment = goog.soy.renderAsFragment(example.unsanitizedTextTemplate);
assertEquals('I <3 Puppies & Kittens', fragment.nodeValue);
assertEquals('I <3 Puppies & Kittens',
goog.soy.renderAsElement(example.unsanitizedTextTemplate).innerHTML);
}
function testRejectSanitizedCss() {
assertUnsafeTemplateOutputErrorThrown(function() {
goog.soy.renderAsElement(example.sanitizedCssTemplate);
});
}
function testRejectSanitizedCss() {
assertUnsafeTemplateOutputErrorThrown(function() {
return goog.soy.renderAsElement(
example.templateSpoofingSanitizedContentString).innerHTML;
});
}
function testRejectStringTemplatesWhenModeIsSet() {
stubs.set(goog.soy, 'REQUIRE_STRICT_AUTOESCAPE', true);
assertUnsafeTemplateOutputErrorThrown(function() {
return goog.soy.renderAsElement(example.noDataTemplate).innerHTML;
});
}
function testAcceptSanitizedHtml() {
assertEquals('Hello World', goog.dom.getTextContent(
goog.soy.renderAsElement(example.sanitizedHtmlTemplate)));
}
function testRejectSanitizedHtmlAttributes() {
// Attributes context has nothing to do with html.
assertUnsafeTemplateOutputErrorThrown(function() {
return goog.dom.getTextContent(
goog.soy.renderAsElement(example.sanitizedHtmlAttributesTemplate));
});
}
function testAcceptNonObject() {
// Some templates, or things that spoof templates in unit tests, might return
// non-strings in unusual cases.
assertEquals('null', goog.dom.getTextContent(
goog.soy.renderAsElement(goog.functions.constant(null))));
}
function testDebugAssertionWithBadFirstTag() {
try {
goog.soy.renderAsElement(example.tableRowTemplate);
// Expect no exception in production code.
assert(!goog.DEBUG);
} catch (e) {
// Expect exception in debug code.
assert(goog.DEBUG);
// Make sure to let the developer know which tag caused the problem.
assertContains('<tr>', e.message);
}
try {
goog.soy.renderAsFragment(example.tableRowTemplate);
// Expect no exception in production code.
assert(!goog.DEBUG);
} catch (e) {
// Expect exception in debug code.
assert(goog.DEBUG);
// Make sure to let the developer know which tag caused the problem.
assertContains('<tr>', e.message);
}
try {
goog.soy.renderAsElement(example.colGroupTemplateCaps);
// Expect no exception in production code.
assert(!goog.DEBUG);
} catch (e) {
// Expect exception in debug code.
assert(goog.DEBUG);
// Make sure to let the developer know which tag caused the problem.
assertContains('<COLGROUP>', e.message);
}
}
</script>
</body>
</html>