diff options
Diffstat (limited to 'includes/js/dojo/tests/parser.html')
-rw-r--r-- | includes/js/dojo/tests/parser.html | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/includes/js/dojo/tests/parser.html b/includes/js/dojo/tests/parser.html new file mode 100644 index 0000000..8d7565b --- /dev/null +++ b/includes/js/dojo/tests/parser.html @@ -0,0 +1,241 @@ +<html> + <head> + <title>Parser Unit Test</title> + <style type="text/css"> + @import "../resources/dojo.css"; + </style> + <script type="text/javascript" + src="../dojo.js" + djConfig="isDebug: true, parseOnLoad: true"></script> + <script type="text/javascript"> + dojo.require("dojo.parser"); + dojo.require("doh.runner"); + + dojo.declare("tests.parser.Class1", null, { + constructor: function(args, node){ dojo.mixin(this, args); }, + preambleTestProp: 1, + preamble: function(){ + this.preambleTestProp++; + }, + intProp: 1, + callCount: 0, // for connect testing + callInc: function(){ this.callCount++; }, + callCount2: 0, // for assignment testing + strProp1: "original1", + strProp2: "original2", + arrProp: [], + boolProp1: false, + boolProp2: true, + boolProp3: false, + boolProp4: true, + dateProp1: dojo.date.stamp.fromISOString('2007-01-01'), + dateProp2: dojo.date.stamp.fromISOString('2007-01-01'), + dateProp3: dojo.date.stamp.fromISOString('2007-01-01'), + funcProp: function(){}, + funcProp2: function(){}, + funcProp3: function(){}, + onclick: function(){ this.prototypeOnclick=true; } + // FIXME: have to test dates!! + // FIXME: need to test the args property!! + }); + + dojo.declare("tests.parser.Class2", null, { + constructor: function(){ + this.fromMarkup = false; + }, + fromMarkup: false, + markupFactory: function(args, node, classCtor){ + var i = new tests.parser.Class2(); + i.fromMarkup = true; + return i; + } + }); + + + dojo.declare("tests.parser.Class3", tests.parser.Class2, { + fromMarkup: false, + markupFactory: function(args, node, classCtor){ + var i = new classCtor(); + i.classCtor = classCtor; + return i; + } + }); + + dojo.declare("tests.parser.inputClass", null, { + constructor: function(args, node){ dojo.mixin(this, args); }, + // these attributes are special in HTML, they don't have a value specified + disabled: false, + checked: false + }); + + deepTestProp = { + blah: { + thinger: 1 + } + }; + + dojo.addOnLoad(function(){ + doh.register("t", + [ + function testJsId(t){ + // console.debug(obj); + t.t(typeof obj == "object"); + }, + + // Attribute parsing tests + function testStrProp(t){ + // normal string parameter + t.t(dojo.isString(obj.strProp1)); + t.is("text", obj.strProp1); + + // make sure that you override a string value like "foo" to a blank value + t.t(dojo.isString(obj.strProp2)); + t.is("", obj.strProp2); + }, + function testIntProp(t){ + t.is("number", (typeof obj.intProp)); + t.is(5, obj.intProp); + }, + function testArrProp(t){ + t.is(3, obj.arrProp.length); + t.is(3, obj.arrProp[1].length); + t.is(["foo", "bar", "baz"], obj.arrProp); + }, + function testBoolProp(t){ + // make sure that both true and false get read correctly, + // and that unspecified attributes' values don't change + + // boolProp1 specified at true + t.is("boolean", (typeof obj.boolProp1)); + t.t(obj.boolProp1); + + // boolProp2 specified as false + t.is("boolean", (typeof obj.boolProp2)); + t.f(obj.boolProp2); + + // boolProp3 not specified (prototype says false) + t.is("boolean", (typeof obj.boolProp3)); + t.f(obj.boolProp3); + + // boolProp4 not specified (prototype says true) + t.is("boolean", (typeof obj.boolProp4)); + t.t(obj.boolProp4); + }, + function testDateProp(t){ + // dateProp1 specified as 2006-1-1 + t.is("2006-01-01", dojo.date.stamp.toISOString(obj.dateProp1, {selector: 'date'})); + + // dateProp2="", should map to NaN (a blank value on DateTextBox) + t.t(isNaN(obj.dateProp2)); + + // dateProp3="now", should map to current date + t.is(dojo.date.stamp.toISOString(new Date(), {selector: 'date'}), + dojo.date.stamp.toISOString(obj.dateProp3, {selector: 'date'})); + }, + function testDisabledFlag(t){ + t.is("boolean", (typeof disabledObj.disabled)); + t.t(disabledObj.disabled); + t.f(disabledObj.checked); + }, + function testCheckedFlag(t){ + t.is("boolean", (typeof checkedObj.checked)); + t.f(checkedObj.disabled); + t.t(checkedObj.checked); + }, + function testFunctionProp(t){ + // make sure that unspecified functions (even with common names) + // don't get overridden (bug #3074) + obj.onclick(); + t.t(obj.prototypeOnclick); + + // funcProp2="foo" + obj.funcProp2(); + t.t(obj.fooCalled); + + // funcProp3="this.func3Called=true;" + obj.funcProp3(); + t.t(obj.func3Called); + }, + + // test <script> tags inside innerHTML of source node + "t.is(4, obj.preambleTestProp);", + "t.is(deepTestProp, obj.deepProp);", + function testConnect(t){ + obj.callInc(); + t.is(2, obj.callCount); + }, + function testFunctionAssignment(t){ + obj.callInc2(); + t.is(1, obj.callCount2); + }, + function testSubNodeParse(t){ + t.f(dojo.exists("obj2")); + var toParse = dojo.byId("toParse"); + toParse.setAttribute("dojoType", toParse.getAttribute("type")); + dojo.parser.parse(toParse.parentNode); + t.t(dojo.exists("obj2")); + t.is("tests.parser.Class1", obj2.declaredClass); + }, + function testMarkupFactory(t){ + t.t(dojo.exists("obj3")); + t.t(obj3.fromMarkup); + }, + function testMarkupFactoryClass(t){ + t.t(dojo.exists("obj4")); + t.is(obj4.classCtor, tests.parser.Class3); + t.t(obj4 instanceof tests.parser.Class3); + t.t(obj4 instanceof tests.parser.Class2); + }, + function testDisabledFlag(t){ + t.t(disabledObj.disabled); + t.f(disabledObj.checked); + }, + function testCheckedFlag(t){ + t.f(checkedObj.disabled); + t.t(checkedObj.checked); + } + ] + ); + doh.run(); + }) + </script> + </head> + <body> + <h1>Parser Unit Test</h1> + <script> + function foo(){ this.fooCalled=true; } + </script> + <div dojoType="tests.parser.Class1" jsId="obj" + strProp1="text" strProp2="" + intProp="5" + arrProp="foo, bar, baz" + boolProp1="true" boolProp2="false" + dateProp1="2006-01-01" dateProp2="" dateProp3="now" + funcProp2="foo" funcProp3="this.func3Called=true;" + > + <script type="dojo/method" event="preamble"> + this.preambleTestProp = 3; + </script> + <script type="dojo/method"> + // this should be run immediately + this.deepProp = deepTestProp; + </script> + <script type="dojo/connect" event="callInc"> + this.callCount++; + </script> + <script type="dojo/method" event="callInc2"> + this.callCount2++; + </script> + </div> + <div> + <div type="tests.parser.Class1" jsId="obj2" id="toParse"> + </div> + </div> + <div dojoType="tests.parser.Class2" jsId="obj3"> + </div> + <div dojoType="tests.parser.Class3" jsId="obj4"> + </div> + <input dojoType="tests.parser.inputClass" jsId="checkedObj" checked type="checkbox"> + <button dojoType="tests.parser.inputClass" jsId="disabledObj" disabled>hi</button> + </body> +</html> |