From 4f0c7d061d898ebcd49fae88f2070c30aa75cc9f Mon Sep 17 00:00:00 2001 From: David Greenspan Date: Mon, 26 Mar 2012 12:15:09 -0700 Subject: [PATCH 1/5] test.equal -> deep compare, not stringify compare --- packages/tinytest/tinytest.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index 7d2c99e39c..c7ac23a7ef 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -82,23 +82,19 @@ _.extend(TestCaseResults.prototype, { // XXX eliminate 'message' and 'not' arguments equal: function (actual, expected, message, not) { /* If expected is a DOM node, do a literal '===' comparison with - * actual. Otherwise compare the JSON stringifications of expected - * and actual. (It's no good to stringify a DOM node. Circular - * references, to start with..) */ - - // XXX WE REALLY SHOULD NOT BE USING - // STRINGIFY. stringify([undefined]) === stringify([null]). should use - // deep equality instead. + * actual. Otherwise do a deep comparison, as implemented by _.isEqual. + */ + var matched; // XXX remove cruft specific to liverange if (typeof expected === "object" && expected && expected.nodeType) { - var matched = expected === actual; + matched = expected === actual; expected = "[Node]"; actual = "[Unknown]"; } else { + matched = _.isEqual(expected, actual); expected = JSON.stringify(expected); actual = JSON.stringify(actual); - var matched = expected === actual; } if (matched === !!not) { From fb9376759adb7dda54cddb0bf5517bc05e5f3119 Mon Sep 17 00:00:00 2001 From: Nick Martin Date: Mon, 26 Mar 2012 18:17:28 -0700 Subject: [PATCH 2/5] Make test runner show total time elapsed. --- packages/test-in-browser/driver.css | 5 +++++ packages/test-in-browser/driver.html | 8 ++++++-- packages/test-in-browser/driver.js | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/test-in-browser/driver.css b/packages/test-in-browser/driver.css index 2735ae7adb..f8489a5a5f 100644 --- a/packages/test-in-browser/driver.css +++ b/packages/test-in-browser/driver.css @@ -17,6 +17,11 @@ font-weight: bold; } +.header .time { + color: #666; + font-size: 14px; +} + .test_table { font-family: Arial, sans-serif; width: 500px; diff --git a/packages/test-in-browser/driver.html b/packages/test-in-browser/driver.html index 6117d06544..ff92106314 100644 --- a/packages/test-in-browser/driver.html +++ b/packages/test-in-browser/driver.html @@ -11,9 +11,13 @@
Testing in progress ...
{{else}} {{#if passed}} -
All tests pass!
+
All tests pass! + {{total_test_time}} ms +
{{else}} -
There are failures.
+
There are failures. + {{total_test_time}} ms +
{{/if}} {{/if}} diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index 8e4220d0d4..bd2796a022 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -47,6 +47,33 @@ Template.test_table.passed = function() { return walk(resultTree); }; + +Template.test_table.total_test_time = function() { + var cx = Meteor.deps.Context.current; + if (cx) { + resultDeps.push(cx); + } + + // walk whole tree to get all tests + var walk = function (groups) { + var total = 0; + + _.each(groups || [], function (group) { + _.each(group.tests || [], function (t) { + total += _testTime(t); + }); + + total += walk(group.groups); + }); + + return total; + }; + + return walk(resultTree); +}; + + + Template.test_table.data = function() { var cx = Meteor.deps.Context.current; if (cx) { From 27a15af421f30a5e9a4524969049eecb8063b9b1 Mon Sep 17 00:00:00 2001 From: Nick Martin Date: Wed, 28 Mar 2012 18:10:00 -0700 Subject: [PATCH 3/5] Semicolon fixes. --- packages/handlebars/package.js | 2 +- packages/uuid/uuid.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/handlebars/package.js b/packages/handlebars/package.js index da2203e54b..46d285ad82 100644 --- a/packages/handlebars/package.js +++ b/packages/handlebars/package.js @@ -12,7 +12,7 @@ require('../../packages/handlebars/parse.js'); // XXX lame!! Package.on_use(function (api) { // XXX should only be sent if we have handlebars templates in the app.. api.add_files('evaluate.js', 'client'); - api.use('underscore', 'client') + api.use('underscore', 'client'); }); // XXX lots more to do here .. registering this a templating engine, diff --git a/packages/uuid/uuid.js b/packages/uuid/uuid.js index 1469be2823..ca42c34447 100644 --- a/packages/uuid/uuid.js +++ b/packages/uuid/uuid.js @@ -99,7 +99,7 @@ Meteor._Alea = function () { return random; } (Array.prototype.slice.call(arguments))); -} +}; // instantiate RNG. use the default seed, which is current time. Meteor.random = new Meteor._Alea(); From 5a1ecf6d163b4624ddece0a498ef6dba47973963 Mon Sep 17 00:00:00 2001 From: Nick Martin Date: Wed, 28 Mar 2012 18:10:36 -0700 Subject: [PATCH 4/5] Events test helper, plus misc test fixups. --- packages/minimongo/minimongo_tests.js | 2 +- packages/test-helpers/package.js | 1 + packages/test-helpers/test_events.js | 14 ++++++++++++++ packages/test-in-browser/driver.html | 2 +- packages/tinytest/tinytest.js | 4 +++- 5 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 packages/test-helpers/test_events.js diff --git a/packages/minimongo/minimongo_tests.js b/packages/minimongo/minimongo_tests.js index c6f62d7c17..fc04e8d197 100644 --- a/packages/minimongo/minimongo_tests.js +++ b/packages/minimongo/minimongo_tests.js @@ -76,7 +76,7 @@ Tinytest.add("minimongo - basics", function (test) { test.equal(c.find().count(), 4); c.remove(); - test.equal(0, c.find().count()); + test.equal(c.find().count(), 0); c.insert({_id: 1, name: "strawberry", tags: ["fruit", "red", "squishy"]}); c.insert({_id: 2, name: "apple", tags: ["fruit", "red", "hard"]}); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 8883afd771..6019cc0650 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -8,6 +8,7 @@ Package.on_use(function (api, where) { api.add_files('try_all_permutations.js', where); api.add_files('async_multi.js', where); + api.add_files('test_events.js', where); }); Package.on_test(function (api) { diff --git a/packages/test-helpers/test_events.js b/packages/test-helpers/test_events.js new file mode 100644 index 0000000000..76c1ca86c7 --- /dev/null +++ b/packages/test-helpers/test_events.js @@ -0,0 +1,14 @@ +var simulateEvent = function (node, event, args) { + node = (node instanceof $ ? node[0] : node); + + if (document.createEvent) { + var e = document.createEvent("Event"); + e.initEvent(event, true, true); + _.extend(e, args); + node.dispatchEvent(e); + } else { + var e = document.createEventObject(); + _.extend(e, args); + node.fireEvent("on" + event, e); + } +}; diff --git a/packages/test-in-browser/driver.html b/packages/test-in-browser/driver.html index ff92106314..903bdd0167 100644 --- a/packages/test-in-browser/driver.html +++ b/packages/test-in-browser/driver.html @@ -78,7 +78,7 @@ {{/if}} {{/with}} {{#if is_debuggable}} - [Debug] + [Debug] {{/if}} diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index c7ac23a7ef..3efc21a111 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -22,6 +22,7 @@ _.extend(TestCaseResults.prototype, { if (doc) ok.details = doc; if (self.expecting_failure) { + ok.details = ok.details || {}; ok.details["was_expecting_failure"] = true; self.expecting_failure = false; } @@ -199,7 +200,8 @@ _.extend(TestCaseResults.prototype, { if (obj.length === expected_length) this.ok(); else - this.fail({type: "length"}); // XXX what other data? + this.fail({type: "length", expected: expected_length, + actual: obj.length}); } }); From 48947a46bf7204367dcd3294c93d55e2f36e01eb Mon Sep 17 00:00:00 2001 From: Nick Martin Date: Fri, 30 Mar 2012 16:19:42 -0700 Subject: [PATCH 5/5] Rename file per review. --- packages/test-helpers/package.js | 2 +- packages/test-helpers/{test_events.js => simulate_event.js} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/test-helpers/{test_events.js => simulate_event.js} (100%) diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 6019cc0650..ee84d839d5 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -8,7 +8,7 @@ Package.on_use(function (api, where) { api.add_files('try_all_permutations.js', where); api.add_files('async_multi.js', where); - api.add_files('test_events.js', where); + api.add_files('simulate_event.js', where); }); Package.on_test(function (api) { diff --git a/packages/test-helpers/test_events.js b/packages/test-helpers/simulate_event.js similarity index 100% rename from packages/test-helpers/test_events.js rename to packages/test-helpers/simulate_event.js