UNPKG

3.16 kBJavaScriptView Raw
1'use strict';
2var assert = require('core-assert');
3var deepEqual = require('deeper');
4var observableToPromise = require('observable-to-promise');
5var isObservable = require('is-observable');
6var isPromise = require('is-promise');
7var util = require('util');
8var x = module.exports;
9
10Object.defineProperty(x, 'AssertionError', {value: assert.AssertionError});
11
12function noop() {}
13
14function create(val, expected, operator, msg, fn) {
15 return {
16 actual: val,
17 expected: expected,
18 message: msg,
19 operator: operator,
20 stackStartFunction: fn
21 };
22}
23
24function test(ok, opts) {
25 if (!ok) {
26 throw new assert.AssertionError(opts);
27 }
28}
29
30x.pass = function (msg) {
31 test(true, create(true, true, 'pass', msg, x.pass));
32};
33
34x.fail = function (msg) {
35 msg = msg || 'Test failed via t.fail()';
36 test(false, create(false, false, 'fail', msg, x.fail));
37};
38
39x.ok = function (val, msg) {
40 test(val, create(val, true, '==', msg, x.ok));
41};
42
43x.notOk = function (val, msg) {
44 test(!val, create(val, false, '==', msg, x.notOk));
45};
46
47x.true = function (val, msg) {
48 test(val === true, create(val, true, '===', msg, x.true));
49};
50
51x.false = function (val, msg) {
52 test(val === false, create(val, false, '===', msg, x.false));
53};
54
55x.is = function (val, expected, msg) {
56 test(val === expected, create(val, expected, '===', msg, x.is));
57};
58
59x.not = function (val, expected, msg) {
60 test(val !== expected, create(val, expected, '!==', msg, x.not));
61};
62
63x.same = function (val, expected, msg) {
64 test(deepEqual(val, expected), create(val, expected, '===', msg, x.same));
65};
66
67x.notSame = function (val, expected, msg) {
68 test(!deepEqual(val, expected), create(val, expected, '!==', msg, x.notSame));
69};
70
71x.throws = function (fn, err, msg) {
72 if (isObservable(fn)) {
73 fn = observableToPromise(fn);
74 }
75
76 if (isPromise(fn)) {
77 return fn
78 .then(function () {
79 x.throws(noop, err, msg);
80 }, function (fnErr) {
81 return x.throws(function () {
82 throw fnErr;
83 }, err, msg);
84 });
85 }
86
87 try {
88 if (typeof err === 'string') {
89 var errMsg = err;
90 err = function (err) {
91 return err.message === errMsg;
92 };
93 }
94
95 var result;
96
97 assert.throws(function () {
98 try {
99 fn();
100 } catch (error) {
101 result = error;
102 throw error;
103 }
104 }, err, msg);
105
106 return result;
107 } catch (err) {
108 test(false, create(err.actual, err.expected, err.operator, err.message, x.throws));
109 }
110};
111
112x.notThrows = function (fn, msg) {
113 if (isObservable(fn)) {
114 fn = observableToPromise(fn);
115 }
116
117 if (isPromise(fn)) {
118 return fn
119 .catch(function (err) {
120 x.notThrows(function () {
121 throw err;
122 }, msg);
123 });
124 }
125
126 try {
127 assert.doesNotThrow(fn, msg);
128 } catch (err) {
129 test(false, create(err.actual, err.expected, err.operator, err.message, x.notThrows));
130 }
131};
132
133x.doesNotThrow = util.deprecate(x.notThrows, 't.doesNotThrow is renamed to t.notThrows. The old name still works, but will be removed in AVA 1.0.0. Update your references.');
134
135x.regex = function (contents, regex, msg) {
136 test(regex.test(contents), create(regex, contents, '===', msg, x.regex));
137};
138
139x.ifError = x.error = function (err, msg) {
140 test(!err, create(err, 'Error', '!==', msg, x.ifError));
141};