Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80698 views
1
var assert = require('assert');
2
var browserify = require('browserify');
3
var coffeeify = require('coffeeify');
4
var reactify = require('../index');
5
6
describe('reactify', function() {
7
8
function bundle(entry, cb) {
9
return browserify(entry, {basedir: __dirname})
10
.transform(coffeeify)
11
.transform(reactify)
12
.bundle(cb);
13
};
14
15
function normalizeWhitespace(src) {
16
return src.replace(/\n/g, '').replace(/ +/g, '');
17
}
18
19
function assertContains(bundle, code) {
20
code = normalizeWhitespace(code);
21
bundle = normalizeWhitespace(bundle);
22
assert(bundle.indexOf(code) > -1, "bundle does not contain: " + code);
23
}
24
25
it('works for *.js with pragma', function(done) {
26
bundle('./fixtures/main.js', function(err, result) {
27
assert(!err);
28
assert(result);
29
assertContains(result, 'React.createElement("h1", null, "Hello, world!")');
30
done();
31
});
32
});
33
34
it('works for *.jsx', function(done) {
35
bundle('./fixtures/main.jsx', function(err, result) {
36
assert(!err);
37
assert(result);
38
assertContains(result, 'React.createElement("h1", null, "Hello, world!")');
39
done();
40
});
41
});
42
43
it('works for plain *.js', function(done) {
44
bundle('./fixtures/simple.js', function(err, result) {
45
assert(!err);
46
assert(result);
47
assertContains(result, 'React.createElement("h1", null, "Hello, world!")');
48
done();
49
});
50
});
51
52
it('returns error on invalid JSX', function(done) {
53
bundle('./fixtures/invalid.js', function(err, result) {
54
assert(err);
55
assertContains(String(err), 'Parse Error: Line 6: Unexpected token');
56
assert(!result);
57
done();
58
});
59
});
60
61
describe('transforming files with extensions other than .js/.jsx', function() {
62
63
it('activates via extension option', function(done) {
64
browserify('./fixtures/main.jsnox', {basedir: __dirname})
65
.transform({extension: 'jsnox'}, reactify)
66
.bundle(function(err, result) {
67
assert(!err);
68
assert(result);
69
assertContains(result, 'React.createElement("h1", null, "Hello, world!")');
70
done();
71
});
72
});
73
74
it('activates via x option', function(done) {
75
browserify('./fixtures/main.jsnox', {basedir: __dirname})
76
.transform({x: 'jsnox'}, reactify)
77
.bundle(function(err, result) {
78
assert(!err);
79
assert(result);
80
assertContains(result, 'React.createElement("h1", null, "Hello, world!")');
81
done();
82
});
83
});
84
85
it('activates via everything option', function(done) {
86
browserify('./fixtures/main.jsnox', {basedir: __dirname})
87
.transform({everything: true}, reactify)
88
.bundle(function(err, result) {
89
assert(!err);
90
assert(result);
91
assertContains(result, 'React.createElement("h1", null, "Hello, world!")');
92
done();
93
});
94
});
95
96
});
97
98
describe('transforming with es6 visitors', function() {
99
100
it('activates via es6 option', function(done) {
101
browserify('./fixtures/main.es6.jsx', {basedir: __dirname})
102
.transform({es6: true}, reactify)
103
.bundle(function(err, result) {
104
assert(!err);
105
assert(result);
106
assertContains(result, 'var func = function(x) {return React.createElement("div", null, x)');
107
done();
108
});
109
});
110
111
it('activates via harmony option', function(done) {
112
browserify('./fixtures/main.es6.jsx', {basedir: __dirname})
113
.transform({harmony: true}, reactify)
114
.bundle(function(err, result) {
115
assert(!err);
116
assert(result);
117
assertContains(result, 'var func = function(x) {return React.createElement("div", null, x)');
118
done();
119
});
120
});
121
122
});
123
124
describe('transforming with es5 as a target', function() {
125
126
it('activates via target option', function(done) {
127
browserify('./fixtures/main.es6-target-es5.jsx', {basedir: __dirname})
128
.transform({es6: true, target: 'es5'}, reactify)
129
.bundle(function(err, result) {
130
assert(!err);
131
assert(result);
132
assertContains(result, ' Object.defineProperty(Foo.prototype,"bar",{enumerable:true,configurable:true,get:function() {"use strict";');
133
done();
134
});
135
});
136
137
});
138
139
describe('stripping types', function() {
140
141
it('activates via "strip-types" option', function(done) {
142
browserify('./fixtures/main.strip-types.js', {basedir: __dirname})
143
.transform({'strip-types': true}, reactify)
144
.bundle(function(err, result) {
145
assert(!err);
146
assert(result);
147
assertContains(result, 'var x = 1; function y(param) { return 1; }');
148
done();
149
});
150
});
151
152
it('activates via "stripTypes" option', function(done) {
153
browserify('./fixtures/main.strip-types.js', {basedir: __dirname})
154
.transform({stripTypes: true}, reactify)
155
.bundle(function(err, result) {
156
assert(!err);
157
assert(result);
158
assertContains(result, 'var x = 1; function y(param) { return 1; }');
159
done();
160
});
161
});
162
163
});
164
165
describe('stripping types and transform with es6 visitors', function() {
166
167
it('activates via "stripTypes" and "es6" option', function(done) {
168
browserify('./fixtures/main.strip-types-es6.jsx', {basedir: __dirname})
169
.transform({stripTypes: true, es6: true}, reactify)
170
.bundle(function(err, result) {
171
assert(!err);
172
assert(result);
173
assertContains(result, 'function Foo(){"use strict";}');
174
done();
175
});
176
});
177
178
});
179
180
});
181
182