UNPKG

5.69 kBJavaScriptView Raw
1var createFormatter = require('..');
2var empower = require('empower');
3var baseAssert = require('assert');
4var assert = empower(baseAssert, createFormatter());
5var babel = require('babel-core');
6var createEspowerPlugin = require('babel-plugin-espower/create');
7
8function weave (line) {
9 return babel.transform(line, {
10 filename: '/absolute/path/to/project/test/some_test.js',
11 plugins: [
12 createEspowerPlugin(babel, {
13 sourceRoot: '/absolute/path/to/project'
14 })
15 ]
16 }).code;
17}
18
19function assertPowerAssertContextFormatting (body, expectedLines, done) {
20 if (done) {
21 baseAssert.equal(body.length, 1, 'body should accept a "done" callback');
22 body(function (e) {
23 try {
24 if (!e) {
25 baseAssert.fail('AssertionError should be thrown');
26 }
27 baseAssert.equal(e.message, expectedLines.join('\n'));
28 } catch (err) {
29 return done(err);
30 }
31 done();
32 });
33 } else {
34 baseAssert.equal(body.length, 0, 'assertPowerAssertContextFormatting must be passed a "done" callback if "body" needs to run async');
35 try {
36 body();
37 baseAssert.fail('AssertionError should be thrown');
38 } catch (e) {
39 baseAssert.equal(e.message, expectedLines.join('\n'));
40 }
41 }
42}
43
44suite('ES6 features', function () {
45
46 test('TemplateLiteral', function () {
47 var alice = { name: 'alice' };
48 var bob = { name: 'bob' };
49 assertPowerAssertContextFormatting(function () {
50 eval(weave('assert(`${alice.name} and ${bob.name}` === `bob and alice`);'));
51 }, [
52 ' # test/some_test.js:1',
53 ' ',
54 ' assert(`${ alice.name } and ${ bob.name }` === `bob and alice`)',
55 ' | | | | | | | ',
56 ' | | | | | | "bob and alice" ',
57 ' | | | | "bob" false ',
58 ' | | "alice" Object{name:"bob"} ',
59 ' | Object{name:"alice"} ',
60 ' "alice and bob" ',
61 ' ',
62 ' --- [string] `bob and alice`',
63 ' +++ [string] `${ alice.name } and ${ bob.name }`',
64 ' @@ -1,13 +1,13 @@',
65 ' -bob and alice',
66 ' +alice and bob',
67 ' ',
68 ' '
69 ]);
70 });
71
72 test('ArrowFunctionExpression and SpreadElement', function () {
73 var seven = 7, ary = [4, 5];
74 assertPowerAssertContextFormatting(function () {
75 eval(weave('assert(seven === ((v, i) => v + i)(...[...ary]));'));
76 }, [
77 ' # test/some_test.js:1',
78 ' ',
79 ' assert(seven === ((v, i) => v + i)(...[...ary]))',
80 ' | | | | | ',
81 ' | | | | [4,5] ',
82 ' | | 9 [4,5] ',
83 ' 7 false ',
84 ' ',
85 ' [number] ((v, i) => v + i)(...[...ary])',
86 ' => 9',
87 ' [number] seven',
88 ' => 7',
89 ' '
90 ]);
91 });
92
93 test('Enhanced Object Literals', function () {
94 var name = 'bobby';
95 assertPowerAssertContextFormatting(function () {
96 eval(weave('assert.deepEqual({ name, [ `${name} greet` ]: `Hello, I am ${name}` }, null);'));
97 }, [
98 ' # test/some_test.js:1',
99 ' ',
100 ' assert.deepEqual({name,[`${ name } greet`]: `Hello, I am ${ name }`}, null)',
101 ' | | | | | ',
102 ' | | | | "bobby" ',
103 ' | | "bobby" "Hello, I am bobby" ',
104 ' | "bobby greet" ',
105 ' Object{name:"bobby","bobby greet":"Hello, I am bobby"} ',
106 ' '
107 ]);
108 });
109
110 test('Yield Statements', function (done) {
111 assertPowerAssertContextFormatting(function (done) {
112 var Promise = require('bluebird');
113 var regeneratorRuntime = require('regenerator/runtime-module');
114 var big = 'big';
115 eval(weave([
116 'function bigOrSmall(size) {',
117 ' return Promise.resolve(size > 100 ? "big" : "small");',
118 '}',
119 '',
120 'function *myGenerator (input) {',
121 ' assert((yield bigOrSmall(input)) === big);',
122 '}',
123 '',
124 'var gen = myGenerator(3);',
125 'gen.next().value.then((val) => gen.next(val)).catch(done);'
126 ].join('\n')));
127 }, [
128 ' # test/some_test.js:6',
129 ' ',
130 ' assert((yield bigOrSmall(input)) === big)',
131 ' | | | | ',
132 ' | | | "big"',
133 ' "small" 3 false ',
134 ' ',
135 ' --- [string] big',
136 ' +++ [string] yield bigOrSmall(input)',
137 ' @@ -1,3 +1,5 @@',
138 ' -big',
139 ' +small',
140 ' ',
141 ' '
142 ], done);
143 });
144});