Skip to content

Commit

Permalink
Merge pull request web-platform-tests#71 from inexorabletash/inexorab…
Browse files Browse the repository at this point in the history
…letash/promise

step_func propagates result, add unreached_func, Promise examples
  • Loading branch information
jgraham committed Apr 17, 2014
2 parents 0509499 + 82c272b commit 43bad08
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 1 deletion.
119 changes: 119 additions & 0 deletions apisample10.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Async Tests and Promises</title>
</head>
<body>
<h1>Async Tests and Promises</h1>
<p>This test assumes ECMAScript 6 Promise support. Some failures are expected.</p>
<div id="log"></div>
<script src="testharness.js"></script>
<script src="testharnessreport.js"></script>
<script>

test(function() {
var p = new Promise(function(resolve, reject) {});
assert_true('then' in p);
assert_equals(typeof Promise.resolve, 'function');
assert_equals(typeof Promise.reject, 'function');
}, "Promises are supported in your browser");

(function() {
var t = async_test("Promise resolution");
t.step(function() {
Promise.resolve('x').then(
t.step_func(function(value) {
assert_equals(value, 'x');
t.done();
}),
t.unreached_func('Promise should not reject')
);
});
}());

(function() {
var t = async_test("Promise rejection");
t.step(function() {
Promise.reject(Error('fail')).then(
t.unreached_func('Promise should reject'),
t.step_func(function(reason) {
assert_true(reason instanceof Error);
assert_equals(reason.message, 'fail');
t.done();
})
);
});
}());

(function() {
var t = async_test("Promises resolution chaining");
t.step(function() {
var resolutions = [];
Promise.resolve('a').then(
t.step_func(function(value) {
resolutions.push(value);
return 'b';
})
).then(
t.step_func(function(value) {
resolutions.push(value);
return 'c';
})
).then(
t.step_func(function(value) {
resolutions.push(value);

assert_array_equals(resolutions, ['a', 'b', 'c']);
t.done();
})
).catch(
t.unreached_func('promise should not have rejected')
);
});
}());

(function() {
var t = async_test("Use of step_func with Promises");
t.step(function() {
var resolutions = [];
Promise.resolve('x').then(
t.step_func_done(),
t.unreached_func('Promise should not have rejected')
);
});
}());

(function() {
var t = async_test("Promises and test assertion failures (should fail)");
t.step(function() {
var resolutions = [];
Promise.resolve('x').then(
t.step_func(function(value) {
assert_true(false, 'This failure is expected');
})
).then(
t.unreached_func('Promise should not have resolved')
).catch(
t.unreached_func('Promise should not have rejected')
);
});
}());

(function() {
var t = async_test("Use of unreached_func with Promises (should fail)");
t.step(function() {
var resolutions = [];
var r;
var p = new Promise(function(resolve, reject) {
// Reject instead of resolve, to demonstrate failure.
reject(123);
});
p.then(
function(value) {
assert_equals(value, 123, 'This should not actually happen');
},
t.unreached_func('This failure is expected')
);
});
}());
</script>
14 changes: 13 additions & 1 deletion testharness.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,11 @@ policies and contribution forms [3].
*
* object.some_event = t.step_func(function(e) {assert_true(e.a)});
*
* For asynchronous callbacks that should never execute, unreached_func can
* be used. For example:
*
* object.some_event = t.unreached_func("some_event should not fire");
*
* == Single Page Tests ==
*
* Sometimes, particularly when dealing with asynchronous behaviour,
Expand Down Expand Up @@ -1231,7 +1236,7 @@ policies and contribution forms [3].

return function()
{
test_this.step.apply(test_this, [func, this_obj].concat(
return test_this.step.apply(test_this, [func, this_obj].concat(
Array.prototype.slice.call(arguments)));
};
};
Expand All @@ -1254,6 +1259,13 @@ policies and contribution forms [3].
};
};

Test.prototype.unreached_func = function(description)
{
return this.step_func(function() {
assert_unreached(description);
});
};

Test.prototype.add_cleanup = function(callback) {
this.cleanup_callbacks.push(callback);
};
Expand Down

0 comments on commit 43bad08

Please sign in to comment.