aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dojo/tests/parser.html
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojo/tests/parser.html')
-rw-r--r--includes/js/dojo/tests/parser.html241
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>