Index: chrome/third_party/jstemplate/jstemplate_test.js |
=================================================================== |
--- chrome/third_party/jstemplate/jstemplate_test.js (revision 177458) |
+++ chrome/third_party/jstemplate/jstemplate_test.js (working copy) |
@@ -1,356 +0,0 @@ |
-// Copyright 2006 Google Inc. |
-// |
-// Licensed 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. |
-/** |
- * @author Steffen Meschkat (mesch@google.com) |
- * @fileoverview Unittest and examples for jstemplates. |
- */ |
- |
-function jstWrap(data, template) { |
- return jstProcess(new JsEvalContext(data), template); |
-} |
- |
-function testJstSelect() { |
- // Template cardinality from jsselect. |
- var t = document.getElementById('t1'); |
- var d = { |
- items: [ 'A', 'B', 'C', '' ] |
- } |
- jstWrap(d, t); |
- |
- var h = t.innerHTML; |
- var clone = domCloneNode(t); |
- assertTrue(/>A<\/div>/.test(h)); |
- assertTrue(/>B<\/div>/.test(h)); |
- assertTrue(/>C<\/div>/.test(h)); |
- assertTrue(/><\/div>/.test(h)); |
- |
- // Reprocessing with identical data. |
- jstWrap(d, t); |
- assertAttributesMatch(t, clone); |
- |
- // Reprocessing with changed data. |
- d.items[1] = 'BB'; |
- jstWrap(d, t); |
- |
- h = t.innerHTML; |
- assertTrue(/>A<\/div>/.test(h)); |
- assertFalse(/>B<\/div>/.test(h)); |
- assertTrue(/>BB<\/div>/.test(h)); |
- assertTrue(/>C<\/div>/.test(h)); |
- |
- // Reprocessing with dropped data. |
- d.items.pop(); |
- d.items.pop(); |
- jstWrap(d, t); |
- h = t.innerHTML; |
- assertTrue(/>A<\/div>/.test(h)); |
- assertTrue(/>BB<\/div>/.test(h)); |
- assertFalse(/>C<\/div>/.test(h)); |
- assertFalse(/><\/div>/.test(h)); |
- |
- // Reprocessing with dropped data, once more. |
- d.items.pop(); |
- jstWrap(d, t); |
- h = t.innerHTML; |
- assertTrue(/>A<\/div>/.test(h)); |
- assertFalse(/>BB<\/div>/.test(h)); |
- assertFalse(/>C<\/div>/.test(h)); |
- |
- // Reprocessing with empty data -- the last template instance is |
- // preserved, and only hidden. |
- d.items.pop(); |
- jstWrap(d, t); |
- |
- assertTrue(/>A<\/div>/.test(h)); |
- assertFalse(/>BB<\/div>/.test(h)); |
- assertFalse(/>C<\/div>/.test(h)); |
- |
- // Reprocessing with added data. |
- d.items.push('D'); |
- jstWrap(d, t); |
- h = t.innerHTML; |
- assertFalse(/>A<\/div>/.test(h)); |
- assertTrue(/>D<\/div>/.test(h)); |
-} |
- |
-function testJstDisplay() { |
- var t = document.getElementById('t2'); |
- var d = { |
- display: true |
- } |
- jstWrap(d, t); |
- |
- var h = t.innerHTML; |
- assertFalse(/display:\s*none/.test(h)); |
- |
- d.display = false; |
- jstWrap(d, t); |
- |
- h = t.innerHTML; |
- assertTrue(/display:\s*none/.test(h)); |
- |
- // Check that 'this' within js expressions is the template node |
- t = document.getElementById('t2a'); |
- d = { |
- showId: 'x' |
- }; |
- jstWrap(d, t); |
- |
- h = t.innerHTML; |
- assertFalse(/display:\s*none/.test(h)); |
- |
- d.showId = 'y'; |
- jstWrap(d, t); |
- |
- h = t.innerHTML; |
- assertTrue(/display:\s*none/.test(h)); |
-} |
- |
-function stringContains(str, sub) { |
- return str.indexOf(sub) != -1; |
-} |
- |
-function testJseval() { |
- var data = {}; |
- |
- var counter = 0; |
- var ctx = new JsEvalContext(data); |
- ctx.setVariable("callback1", function() { |
- ++counter; |
- }); |
- ctx.setVariable("callback2", function() { |
- counter *= 2; |
- }); |
- |
- jstProcess(ctx, document.getElementById('testJseval1')); |
- assertEquals("testJseval1", 1, counter); |
- |
- jstProcess(ctx, document.getElementById('testJseval2')); |
- assertEquals("testJseval2", 4, counter); |
-} |
- |
-function testJstValues() { |
- var t = document.getElementById('t3'); |
- var d = {}; |
- jstWrap(d, t); |
- var h = t.innerHTML; |
- assertTrue(stringContains(h, 'http://maps.google.com/')); |
- var t3a = document.getElementById('t3a'); |
- assertEquals('http://maps.google.com/', t3a.foo.bar.baz); |
- assertEquals('http://maps.google.com/', t3a.bar); |
- assertEquals('red', t3a.style.backgroundColor); |
-} |
- |
-function testJstTransclude() { |
- var t = document.getElementById('t4'); |
- var p = document.getElementById('parent'); |
- var d = {}; |
- jstWrap(d, t); |
- var h = p.innerHTML; |
- assertTrue(h, stringContains(h, 'http://maps.google.com/')); |
-} |
- |
-function assertAttributesMatch(first, second) { |
- assertEquals('assertAttributesMatch: number of child nodes', |
- jsLength(first.childNodes), jsLength(second.childNodes)); |
- var b = second.firstChild; |
- for (var a = first.firstChild; a; a = a.nextSibling) { |
- var att = a.attributes; |
- if (att) { |
- assertTrue(b.attributes != null); |
- assertEquals('assertAttributesMatch: number of attribute nodes', |
- att.length, b.attributes.length); |
- for (var i = 0; i < jsLength(att); i++) { |
- var a = att[i]; |
- assertEquals('assertAttributesMatch: value of attribute ' + a.name, |
- a.value, b.getAttribute(a.name)); |
- } |
- } else { |
- assertNull(b.attributes); |
- } |
- b = b.nextSibling; |
- } |
-} |
- |
-function testJsskip() { |
- var div = domCreateElement(document, "DIV"); |
- div.innerHTML = [ |
- '<div jseval="outercallback()" jsskip="1">', |
- '<div jseval="innercallback()">', |
- '</div>', |
- '</div>' |
- ].join(''); |
- |
- var data = {}; |
- var ctx = new JsEvalContext(data); |
- var outerCalled = false; |
- ctx.setVariable("outercallback", function() { |
- outerCalled = true; |
- }); |
- var innerCalled = false; |
- ctx.setVariable("innercallback", function() { |
- innerCalled = true; |
- }); |
- jstProcess(ctx, div); |
- |
- assertTrue(outerCalled); |
- assertFalse(innerCalled); |
-} |
- |
-function testScalarContext() { |
- var t = document.getElementById('testScalarContext'); |
- |
- jstWrap(true, t); |
- assertTrue(/>true</.test(t.innerHTML)); |
- |
- jstWrap(false, t); |
- assertTrue(/>false</.test(t.innerHTML)); |
- |
- jstWrap(0, t); |
- assertTrue(/>0</.test(t.innerHTML)); |
- |
- jstWrap("foo", t); |
- assertTrue(/>foo</.test(t.innerHTML)); |
- |
- jstWrap(undefined, t); |
- assertTrue(/>undefined</.test(t.innerHTML)); |
- |
- jstWrap(null, t); |
- assertTrue(/>null</.test(t.innerHTML)); |
-} |
- |
-function testJstLoadTemplate() { |
- var wrapperId = 'testJstLoadTemplateWrapper'; |
- var id = 'testJstLoadTemplate'; |
- jstLoadTemplate_(document, '<div id="' + id + '">content</div>', wrapperId); |
- var wrapperElem = document.getElementById(wrapperId); |
- assertTrue('Expected wrapper element to be in document', |
- !!wrapperElem); |
- var newTemplate = document.getElementById(id); |
- assertTrue('Expected newly loaded template to be in document', |
- !!newTemplate); |
- assertTrue('Expected wrapper to be grandparent of template', |
- newTemplate.parentNode.parentNode == wrapperElem); |
- |
- // Make sure the next template loaded with the same wrapper id re-uses the |
- // wrapper element. |
- var id2 = 'testJstLoadTemplate2'; |
- jstLoadTemplate_(document, '<div id="' + id2 + '">content</div>', wrapperId); |
- var newTemplate2 = document.getElementById(id2); |
- assertTrue('Expected newly loaded template to be in document', |
- !!newTemplate2); |
- assertTrue('Expected wrapper to be grandparent of template', |
- newTemplate2.parentNode.parentNode == wrapperElem); |
-} |
- |
-function testJstGetTemplateFromDom() { |
- var element; |
- // Get by id a template in the document |
- // Success |
- element = jstGetTemplate('t1'); |
- assertTrue("Asserted jstGetTemplate('t1') to return a dom element", |
- !!element); |
- // Failure |
- element = jstGetTemplate('asdf'); |
- assertFalse("Asserted jstGetTemplate('asdf') to return null", |
- !!element); |
-} |
- |
-function testJstGetTemplateFromFunction() { |
- var element; |
- // Fetch a jstemplate by id from within a html string, passed via a function. |
- function returnHtmlWithId(id) { |
- var html = |
- '<div>' + |
- '<div id="' + id + '">Here is the template</div>' + |
- '</div>'; |
- return html; |
- } |
- // Success |
- element = jstGetTemplate('template', |
- partial(returnHtmlWithId, 'template')); |
- assertTrue("Expected jstGetTemplate('template') to return a dom element", |
- !!element); |
- |
- // Failure |
- element = jstGetTemplate('asdf', |
- partial(returnHtmlWithId, 'zxcv')); |
- assertFalse("Expected jstGetTemplate('zxcv') to return null", |
- !!element); |
-} |
- |
-function testPrepareNode() { |
- var id, node; |
- // Reset the cache so we're testing from a known state. |
- JstProcessor.jstCache_ = {}; |
- JstProcessor.jstCache_[0] = {}; |
- |
- // Skip pre-processed nodes. Preprocessed nodes are those with a |
- // PROP_jstcache property. |
- var t = document.getElementById('t1'); |
- var caches = []; |
- caches.push(JstProcessor.prepareNode_(t)); |
- caches.push(JstProcessor.prepareNode_(t)); |
- assertEquals('The same cache should be returned on each call to prepareNode', |
- caches[0], caches[1]); |
- |
- // Preprocessing a node with a jst attribute should return a valid struct |
- id = 'testPrepareNodeWithAttributes'; |
- jstLoadTemplate_(document, '<div id="' + id + '" jsskip="1"></div>'); |
- node = document.getElementById(id); |
- var cache = JstProcessor.prepareNode_(node); |
- try { |
- var jsskip = cache['jsskip']({}, {}); |
- } catch (e) { |
- fail('Exception when evaluating jsskip from cache'); |
- } |
- assertEquals(1, jsskip); |
-} |
- |
- |
-function testPrepareNodeWithNoAttributes() { |
- // Preprocessing a node with no jst attributes should return null |
- var id = 'testPrepareNodeNoAttributes'; |
- jstLoadTemplate_(document, '<div id="' + id + '"></div>'); |
- var node = document.getElementById(id); |
- assertEquals('prepareNode with no jst attributes should return default', |
- JstProcessor.jstcache_[0], JstProcessor.prepareNode_(node)); |
-} |
- |
- |
-function testJsVars() { |
- var template = document.createElement('div'); |
- document.body.appendChild(template); |
- template.innerHTML = '<div jsvars="foo:\'foo\';bar:true;$baz:1"></div>'; |
- |
- var context = new JsEvalContext; |
- jstProcess(context, template); |
- |
- assertEquals('foo', context.getVariable('foo')); |
- assertEquals(1, context.getVariable('$baz')); |
- assertTrue(context.getVariable('bar')); |
- assertUndefined(context.getVariable('foobar')); |
-} |
- |
- |
-function testCacheReuse() { |
- var template = document.createElement('div'); |
- document.body.appendChild(template); |
- template.innerHTML = |
- '<div jsvars="foo:\'foo\';bar:true;$baz:1"></div>' + |
- '<span jsvars="foo:\'foo\';bar:true;$baz:1"></span>'; |
- JstProcessor.prepareTemplate_(template); |
- assertEquals(template.firstChild.getAttribute(ATT_jstcache), |
- template.lastChild.getAttribute(ATT_jstcache)); |
-} |