1 | var Promise, chai, deRegister, exec, expect, fs, listDir, md5, mocha, path, runClean, sample, temp, vm,
|
2 | slice = [].slice;
|
3 |
|
4 | Promise = require('bluebird');
|
5 |
|
6 | exec = require('child_process').execSync;
|
7 |
|
8 | md5 = require('md5');
|
9 |
|
10 | fs = require('fs-jetpack');
|
11 |
|
12 | vm = require('vm');
|
13 |
|
14 | path = require('path');
|
15 |
|
16 | mocha = require('mocha');
|
17 |
|
18 | chai = require('chai');
|
19 |
|
20 | expect = chai.expect;
|
21 |
|
22 | listDir = function(dir) {
|
23 | return fs.listAsync(dir).then(function(files) {
|
24 | return files.filter(function(file) {
|
25 | return file[0] !== '.';
|
26 | });
|
27 | });
|
28 | };
|
29 |
|
30 | sample = function() {
|
31 | return path.join.apply(path, [__dirname, 'samples'].concat(slice.call(arguments)));
|
32 | };
|
33 |
|
34 | temp = function() {
|
35 | return path.join.apply(path, [__dirname, 'temp'].concat(slice.call(arguments)));
|
36 | };
|
37 |
|
38 | process.env.COFFEE_CACHE_DIR = temp('.cache');
|
39 |
|
40 | runClean = function(fn) {
|
41 | deRegister();
|
42 | return fn();
|
43 | };
|
44 |
|
45 | deRegister = 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 |
|
65 | suite("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 | });
|