aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit
diff options
context:
space:
mode:
authorjzaefferer <joern.zaefferer@gmail.com>2011-02-25 11:33:48 +0100
committerjzaefferer <joern.zaefferer@gmail.com>2011-02-25 11:33:48 +0100
commit540b78d92026de6e287144b9bf37221699ccb9e8 (patch)
tree78064c3b34c6ac94f4bf8877d8ad823f65e537d3 /tests/unit
parent6a5eb351c767c3e5879d2cdcd4489b5afa7f03de (diff)
downloadjquery-ui-540b78d92026de6e287144b9bf37221699ccb9e8.tar.gz
jquery-ui-540b78d92026de6e287144b9bf37221699ccb9e8.zip
Adding a domEqual assertion to our testsuite for more sane DOM
comparisons. Comparing innerHTML is too dependent on random browser quirks like IE only sometimes rendering closing tags.
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/accordion/accordion_methods.js17
-rw-r--r--tests/unit/autocomplete/autocomplete_methods.js10
-rw-r--r--tests/unit/menu/menu_methods.js10
-rw-r--r--tests/unit/testsuite.js34
4 files changed, 42 insertions, 29 deletions
diff --git a/tests/unit/accordion/accordion_methods.js b/tests/unit/accordion/accordion_methods.js
index e0ed734f6..eade690b1 100644
--- a/tests/unit/accordion/accordion_methods.js
+++ b/tests/unit/accordion/accordion_methods.js
@@ -3,20 +3,9 @@
module( "accordion: methods", accordionSetupTeardown() );
test( "destroy", function() {
- var beforeHtml = $( "#list1" )
- .find( "div" )
- .css( "font-style", "normal" )
- .end()
- .parent()
- .html();
- var afterHtml = $( "#list1" )
- .accordion()
- .accordion( "destroy" )
- .parent()
- .html()
- // Opera 9 outputs role="" instead of removing the attribute like everyone else
- .replace( / role=""/g, "" );
- equal( afterHtml, beforeHtml );
+ domEqual("#list1", function() {
+ $("#list1").accordion().accordion("destroy");
+ });
});
test( "enable/disable", function() {
diff --git a/tests/unit/autocomplete/autocomplete_methods.js b/tests/unit/autocomplete/autocomplete_methods.js
index 05a7d6e14..1043e47ba 100644
--- a/tests/unit/autocomplete/autocomplete_methods.js
+++ b/tests/unit/autocomplete/autocomplete_methods.js
@@ -11,13 +11,9 @@ module("autocomplete: methods", {
});
test("destroy", function() {
- var beforeHtml = $("#autocomplete").parent().html();
- var afterHtml = $("#autocomplete").autocomplete().autocomplete("destroy").parent().html();
- // Opera 9 outputs role="" instead of removing the attribute like everyone else
- if ($.browser.opera) {
- afterHtml = afterHtml.replace(/ role=""/g, "");
- }
- equal( afterHtml, beforeHtml, "before/after html should be the same" );
+ domEqual("#autocomplete", function() {
+ $("#autocomplete").autocomplete().autocomplete("destroy");
+ });
})
var data = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl"];
diff --git a/tests/unit/menu/menu_methods.js b/tests/unit/menu/menu_methods.js
index b6ebaf215..0ecaf7328 100644
--- a/tests/unit/menu/menu_methods.js
+++ b/tests/unit/menu/menu_methods.js
@@ -6,13 +6,9 @@
module("menu: methods");
test("destroy", function() {
- var beforeHtml = $("#menu1").find("div").css("font-style", "normal").end().parent().html();
- var afterHtml = $("#menu1").menu().menu("destroy").parent().html();
- // Opera 9 outputs role="" instead of removing the attribute like everyone else
- if ($.browser.opera) {
- afterHtml = afterHtml.replace(/ role=""/g, "");
- }
- equal( afterHtml, beforeHtml );
+ domEqual("#menu1", function() {
+ $("#menu1").menu().menu("destroy");
+ });
});
diff --git a/tests/unit/testsuite.js b/tests/unit/testsuite.js
index b3748d8ee..9c7c46c22 100644
--- a/tests/unit/testsuite.js
+++ b/tests/unit/testsuite.js
@@ -65,6 +65,38 @@ window.commonWidgetTests = function( widget, settings ) {
test( "version", function() {
ok( "version" in $.ui[ widget ], "version property exists" );
});
-};
+}
+
+/*
+ * Experimental assertion for comparing DOM objects.
+ *
+ * Serializes an element and some attributes and it's children if any, otherwise the text.
+ * Then compares the result using deepEqual.
+ */
+window.domEqual = function( selector, modifier, message ) {
+ var attributes = ["class", "role", "id", "tabIndex", "aria-activedescendant"];
+
+ function extract(value) {
+ var result = {};
+ result.nodeName = value[0].nodeName;
+ $.each(attributes, function(index, attr) {
+ result[attr] = value.attr(attr);
+ });
+ result.children = [];
+ var children = value.children();
+ if (children.length) {
+ children.each(function() {
+ result.children.push(extract($(this)));
+ });
+ } else {
+ result.text = value.text();
+ }
+ return result;
+ }
+ var expected = extract($(selector));
+ modifier($(selector));
+
+ deepEqual( extract($(selector)), expected, message );
+}
}());