- 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