1 | var createFormatter = require('..');
|
2 | var empower = require('empower');
|
3 | var baseAssert = require('assert');
|
4 | var assert = empower(baseAssert, createFormatter());
|
5 | var babel = require('babel-core');
|
6 | var createEspowerPlugin = require('babel-plugin-espower/create');
|
7 |
|
8 | function 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 |
|
19 | function 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 |
|
44 | suite('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 | });
|