UNPKG

7.04 kBJavaScriptView Raw
1var Promise, chai, deRegister, exec, expect, fs, listDir, md5, mocha, path, runClean, sample, temp, vm,
2 slice = [].slice;
3
4Promise = require('bluebird');
5
6exec = require('child_process').execSync;
7
8md5 = require('md5');
9
10fs = require('fs-jetpack');
11
12vm = require('vm');
13
14path = require('path');
15
16mocha = require('mocha');
17
18chai = require('chai');
19
20expect = chai.expect;
21
22listDir = function(dir) {
23 return fs.listAsync(dir).then(function(files) {
24 return files.filter(function(file) {
25 return file[0] !== '.';
26 });
27 });
28};
29
30sample = function() {
31 return path.join.apply(path, [__dirname, 'samples'].concat(slice.call(arguments)));
32};
33
34temp = function() {
35 return path.join.apply(path, [__dirname, 'temp'].concat(slice.call(arguments)));
36};
37
38process.env.COFFEE_CACHE_DIR = temp('.cache');
39
40runClean = function(fn) {
41 deRegister();
42 return fn();
43};
44
45deRegister = function() {
46 var cached, cachedFile, i, j, len, len1, sampleFile, samples;
47 delete require.extensions['.coffee'];
48 delete require.extensions['.litcoffee'];
49 delete require.extensions['.coffee.md'];
50 delete require.cache[require.resolve('coffee-script/register')];
51 delete require.cache[require.resolve('coffee-script/lib/coffee-script/register')];
52 delete require.cache[require.resolve('../')];
53 samples = fs.list(sample());
54 for (i = 0, len = samples.length; i < len; i++) {
55 sampleFile = samples[i];
56 delete require.cache[sample(sampleFile)];
57 }
58 cached = fs.list(temp('.cache'));
59 for (j = 0, len1 = cached.length; j < len1; j++) {
60 cachedFile = cached[j];
61 delete require.cache[temp('.cache', cachedFile)];
62 }
63};
64
65suite("coffee-register", function() {
66 suiteTeardown(function() {
67 return fs.removeAsync(temp());
68 });
69 suiteSetup(function() {
70 return fs.dirAsync(temp());
71 });
72 setup(function() {
73 return fs.dirAsync(temp('.cache'), {
74 empty: true
75 });
76 });
77 test("basic register", function() {
78 var src;
79 src = function() {
80 require('../');
81 return require('./samples/all.coffee');
82 };
83 return Promise.resolve().then(function() {
84 return runClean(src);
85 }).then(function(result) {
86 return expect(result).to.equal('sampleA-sampleB-sampleC');
87 });
88 });
89 test("index.coffee require", function() {
90 var src;
91 src = function() {
92 require('../');
93 return require('./samples/index');
94 };
95 return Promise.resolve().then(function() {
96 return runClean(src);
97 }).then(function(result) {
98 return expect(result).to.equal('theIndex');
99 });
100 });
101 test("dir require", function() {
102 var src;
103 src = function() {
104 require('../');
105 return require('./samples');
106 };
107 return Promise.resolve().then(function() {
108 return runClean(src);
109 }).then(function(result) {
110 return expect(result).to.equal('theIndex');
111 });
112 });
113 test("cached result", function() {
114 var src;
115 src = function() {
116 require('../');
117 return require('./samples/all.coffee');
118 };
119 return Promise.resolve().then(function() {
120 return listDir(temp('.cache'));
121 }).then(function(list) {
122 return expect(list).to.eql([]);
123 }).then(function() {
124 return runClean(src);
125 }).then(function(result) {
126 return expect(result).to.equal('sampleA-sampleB-sampleC');
127 }).then(function() {
128 return listDir(temp('.cache'));
129 }).tap(function(list) {
130 return expect(list.length).to.equal(4);
131 }).then(function(list) {
132 var hashA, hashAll, hashB, hashC;
133 hashA = md5(fs.read(sample('sampleA.coffee')));
134 hashB = md5(fs.read(sample('.sampleB.coffee')));
135 hashC = md5(fs.read(sample('sampleC.extension.coffee')));
136 hashAll = md5(fs.read(sample('all.coffee')));
137 global.hashB = hashB;
138 expect(list).to.contain(hashA + ".js");
139 expect(list).to.contain(hashB + ".js");
140 expect(list).to.contain(hashC + ".js");
141 return expect(list).to.contain(hashAll + ".js");
142 }).then(function() {
143 return runClean(src);
144 }).then(function(result) {
145 return expect(result).to.equal('sampleA-sampleB-sampleC');
146 }).then(function() {
147 return listDir(temp('.cache'));
148 }).tap(function(list) {
149 return expect(list.length).to.equal(4);
150 }).then(function(list) {
151 return fs.writeAsync(temp('.cache', hashB + ".js"), fs.read(temp('.cache', hashB + ".js")).replace("'sample", "'SAMPLE"));
152 }).then(function() {
153 return runClean(src);
154 }).then(function(result) {
155 return expect(result).to.equal('sampleA-SAMPLEB-sampleC');
156 });
157 });
158 test("cached result deletion", function() {
159 var src;
160 src = function() {
161 require('../');
162 return require('./samples/all.coffee');
163 };
164 return Promise.resolve().then(function() {
165 return listDir(temp('.cache'));
166 }).then(function(list) {
167 return expect(list).to.eql([]);
168 }).then(function() {
169 return runClean(src);
170 }).then(function(result) {
171 return expect(result).to.equal('sampleA-sampleB-sampleC');
172 }).then(function() {
173 return listDir(temp('.cache'));
174 }).tap(function(list) {
175 return expect(list.length).to.equal(4);
176 }).then(function(list) {
177 return fs.removeAsync(temp('.cache', list[1]));
178 }).then(function() {
179 return listDir(temp('.cache'));
180 }).then(function(list) {
181 return expect(list.length).to.equal(3);
182 }).then(function() {
183 return runClean(src);
184 }).then(function(result) {
185 return expect(result).to.equal('sampleA-sampleB-sampleC');
186 }).then(function() {
187 return listDir(temp('.cache'));
188 }).then(function(list) {
189 return expect(list.length).to.equal(4);
190 });
191 });
192 return test("cached result update/change", function() {
193 var src;
194 src = function() {
195 require('../');
196 return require('./samples/all.coffee');
197 };
198 return Promise.resolve().then(function() {
199 return listDir(temp('.cache'));
200 }).then(function(list) {
201 return expect(list).to.eql([]);
202 }).then(function() {
203 return runClean(src);
204 }).then(function(result) {
205 return expect(result).to.equal('sampleA-sampleB-sampleC');
206 }).then(function() {
207 return listDir(temp('.cache'));
208 }).then(function(list) {
209 return expect(list.length).to.equal(4);
210 }).then(function() {
211 return fs.read(sample('all.coffee'));
212 }).then(function(contents) {
213 return fs.write(sample('all.coffee'), contents + ' ');
214 }).then(function() {
215 return runClean(src);
216 }).then(function(result) {
217 return expect(result).to.equal('sampleA-sampleB-sampleC');
218 }).then(function() {
219 return listDir(temp('.cache'));
220 }).then(function(list) {
221 return expect(list.length).to.equal(5);
222 }).then(function() {
223 return runClean(src);
224 }).then(function(result) {
225 return expect(result).to.equal('sampleA-sampleB-sampleC');
226 }).then(function() {
227 return listDir(temp('.cache'));
228 }).then(function(list) {
229 return expect(list.length).to.equal(5);
230 });
231 });
232});