aboutsummaryrefslogtreecommitdiffstats
path: root/tests/content/harness.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/content/harness.js')
-rw-r--r--tests/content/harness.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/tests/content/harness.js b/tests/content/harness.js
new file mode 100644
index 00000000000..7dafac00b6e
--- /dev/null
+++ b/tests/content/harness.js
@@ -0,0 +1,92 @@
+function _oneline(x) {
+ var i = x.indexOf("\n");
+ return (i == -1) ? x : (x.slice(0, i) + "...");
+}
+
+var _expectations = 0;
+var _tests = 0;
+function expect(num) {
+ _expectations = num;
+}
+
+function _fail(s, m) {
+ _tests++;
+ // string split to avoid problems with tests that end up printing the value of window._fail.
+ window.alert(_oneline("TEST-UNEXPECTED" + "-FAIL | " + s + ": " + m));
+}
+
+function _pass(s, m) {
+ _tests++;
+ window.alert(_oneline("TEST-PASS | " + s + ": " + m));
+}
+
+function _printer(opstr, op) {
+ return function (a, b, msg) {
+ let f = op(a,b) ? _pass : _fail;
+ if (!msg) msg = "";
+ f(a + " " + opstr + " " + b, msg);
+ };
+}
+
+var is = _printer("===", function (a,b) { return a === b; });
+var is_not = _printer("!==", function (a,b) { return a !== b; });
+var is_a = _printer("is a", function (a,b) { return a instanceof b; });
+var is_not_a = _printer("is not a", function (a,b) { return !(a instanceof b); });
+var is_in = _printer("is in", function (a,b) { return a in b; });
+var is_not_in = _printer("is not in", function (a,b) { return !(a in b); });
+var as_str_is = _printer("as string is", function (a,b) { return String(a) == b; });
+var lt = _printer("<", function (a,b) { return a < b; });
+var gt = _printer(">", function (a,b) { return a > b; });
+var leq = _printer("<=", function (a,b) { return a <= b; });
+var geq = _printer(">=", function (a,b) { return a >= b; });
+var starts_with = _printer("starts with", function (a,b) { return a.indexOf(b) == 0; });
+
+function is_function(val, name) {
+ starts_with(String(val), "function " + name + "(");
+}
+
+function should_throw(f) {
+ try {
+ f();
+ _fail("operation should have thrown but did not");
+ } catch (x) {
+ _pass("operation successfully threw an exception", x.toString());
+ }
+}
+
+function should_not_throw(f) {
+ try {
+ f();
+ _pass("operation did not throw an exception");
+ } catch (x) {
+ _fail("operation should have not thrown", x.toString());
+ }
+}
+
+function check_selector(elem, selector, matches) {
+ is(elem.matches(selector), matches);
+}
+
+function check_disabled_selector(elem, disabled) {
+ check_selector(elem, ":disabled", disabled);
+ check_selector(elem, ":enabled", !disabled);
+}
+
+var _test_complete = false;
+var _test_timeout = 10000; //10 seconds
+function finish() {
+ if (_expectations > _tests) {
+ _fail('expected ' + _expectations + ' tests, fullfilled ' + _tests);
+ }
+ _test_complete = true;
+ window.close();
+}
+
+function _test_timed_out() {
+ if (!_test_complete) {
+ _fail('test timed out (' + _test_timeout/1000 + 's)');
+ finish();
+ }
+}
+
+setTimeout(_test_timed_out, _test_timeout);