- From: Robin Berjon <robin@w3.org>
- Date: Wed, 02 Apr 2014 11:57:18 +0200
- To: Simon Pieters <simonp@opera.com>, "public-test-infra@w3.org" <public-test-infra@w3.org>, James Graham <james@hoppipolla.co.uk>
On 02/04/2014 10:30 , Simon Pieters wrote: > On Wed, 02 Apr 2014 00:07:49 +0200, James Graham > <james@hoppipolla.co.uk> wrote: >> So one request I've had from people at Mozilla used to writing >> Mochitests is an easier way to write testharness.js tests, >> particularly for the special case where there is exactly one test per >> file. This is a interesting case because the file itself provides the >> isolation that we usually try to obtain by wrapping each test step in >> a function() {}, so it is possible to cut out some of the verbosity. >> An example of the kind of result we might get is >> >> <doctype html> >> <title>Example test</title> >> <script src=/resources/testharness.js></script> >> <script src=/resources/testharnessreport.js></script> >> <script> >> setup({file_is_test:true}) >> >> onload = function() {assert_true(true); done()} >> >> I think there are some possible disadvantages to this; in particular >> it might encourage people to put a whole load of things that should be >> separate tests as multiple asserts in one file in a way that will >> break if one assert doesn't work in a particular browser. However it >> does seem like if used wisely it could be a win, and might help sell >> the idea of writing testharness.js tests going forward at Mozilla. >> What do people think? > > I think it's a good idea. But it would be nice to minimize the boilerplate. Agreed. > The snippet above omits <div id="log"></div> which is currently > required, but the script could create it if it's missing. The script could also inject the link to testharnessreport.js if it isn't there? It's a little bit tricky due to existing content but maybe given a flag? The flag wouldn't be very useful if that's all it did, but it could also take care of setup({file_is_test:true}). Also, do we really need to run onload for most tests? <!doctype html> <title>Example test</title> <script src=/resources/testharness.js data-test></script> <script> onload = function() {assert_true(true); done(); }; Crudely: if (document.currentScript.dataset.test !== undefined) { var s = document.createElement("script"); s.src = document.currentScript.src.replace("testharness", "testharnessreport"); s.onload = function () { setup({file_is_test:true}); }; document.currentScript.after(s); } I wonder if we could ditch the onload too. Other option: <!doctype html> <title>Example test</title> <script src=/resources/testharness.js></script> <script> run(function() {assert_true(true); done(); }); Again, crudely: function run (fn) { if (!document.query("script[src$=testharnessreport.js]")) { var ref = document.query("script[src$=testharness.js]") , s = document.createElement("script") , log = document.createElement("div") ; log.id = "log"; document.body.appendChild(log); s.src = ref.src.replace("testharness", "testharnessreport"); s.onload = function () { setup({file_is_test:true}); fn(); }; ref.after(s); } } I dunno, just a thought. -- Robin Berjon - http://berjon.com/ - @robinberjon
Received on Wednesday, 2 April 2014 09:57:34 UTC