1 | 'use strict';
|
2 |
|
3 | var grunt = require('../../lib/grunt');
|
4 |
|
5 | exports['task.normalizeMultiTaskFiles'] = {
|
6 | setUp: function(done) {
|
7 | this.cwd = process.cwd();
|
8 | process.chdir('test/fixtures/files');
|
9 | done();
|
10 | },
|
11 | tearDown: function(done) {
|
12 | process.chdir(this.cwd);
|
13 | done();
|
14 | },
|
15 | 'normalize': function(test) {
|
16 | test.expect(7);
|
17 | var actual, expected, key, value;
|
18 | var flatten = grunt.util._.flatten;
|
19 |
|
20 | key = 'dist/built.js';
|
21 | value = 'src/*1.js';
|
22 | actual = grunt.task.normalizeMultiTaskFiles(value, key);
|
23 | expected = [
|
24 | {
|
25 | dest: 'dist/built.js',
|
26 | src: ['src/file1.js'],
|
27 | orig: {dest: key, src: [value]},
|
28 | },
|
29 | ];
|
30 | test.deepEqual(actual, expected, 'should normalize destTarget: srcString.');
|
31 |
|
32 | key = 'dist/built.js';
|
33 | value = [['src/*1.js'], ['src/*2.js']];
|
34 | actual = grunt.task.normalizeMultiTaskFiles(value, key);
|
35 | expected = [
|
36 | {
|
37 | dest: 'dist/built.js',
|
38 | src: ['src/file1.js', 'src/file2.js'],
|
39 | orig: {dest: key, src: flatten(value)},
|
40 | },
|
41 | ];
|
42 | test.deepEqual(actual, expected, 'should normalize destTarget: srcArray.');
|
43 |
|
44 | value = {
|
45 | src: ['src/*1.js', 'src/*2.js'],
|
46 | dest: 'dist/built.js'
|
47 | };
|
48 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
49 | expected = [
|
50 | {
|
51 | dest: 'dist/built.js',
|
52 | src: ['src/file1.js', 'src/file2.js'],
|
53 | orig: value,
|
54 | },
|
55 | ];
|
56 | test.deepEqual(actual, expected, 'should normalize target: {src: srcStuff, dest: destStuff}.');
|
57 |
|
58 | value = {
|
59 | files: {
|
60 | 'dist/built-a.js': 'src/*1.js',
|
61 | 'dist/built-b.js': ['src/*1.js', [['src/*2.js']]]
|
62 | }
|
63 | };
|
64 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
65 | expected = [
|
66 | {
|
67 | dest: 'dist/built-a.js',
|
68 | src: ['src/file1.js'],
|
69 | orig: {dest: 'dist/built-a.js', src: [value.files['dist/built-a.js']]},
|
70 | },
|
71 | {
|
72 | dest: 'dist/built-b.js',
|
73 | src: ['src/file1.js', 'src/file2.js'],
|
74 | orig: {dest: 'dist/built-b.js', src: flatten(value.files['dist/built-b.js'])},
|
75 | },
|
76 | ];
|
77 | test.deepEqual(actual, expected, 'should normalize target: {files: {destTarget: srcStuff, ...}}.');
|
78 |
|
79 | value = {
|
80 | files: [
|
81 | {'dist/built-a.js': 'src/*.whoops'},
|
82 | {'dist/built-b.js': [[['src/*1.js'], 'src/*2.js']]}
|
83 | ]
|
84 | };
|
85 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
86 | expected = [
|
87 | {
|
88 | dest: 'dist/built-a.js',
|
89 | src: [],
|
90 | orig: {dest: Object.keys(value.files[0])[0], src: [value.files[0]['dist/built-a.js']]},
|
91 | },
|
92 | {
|
93 | dest: 'dist/built-b.js',
|
94 | src: ['src/file1.js', 'src/file2.js'],
|
95 | orig: {dest: Object.keys(value.files[1])[0], src: flatten(value.files[1]['dist/built-b.js'])},
|
96 | },
|
97 | ];
|
98 | test.deepEqual(actual, expected, 'should normalize target: {files: [{destTarget: srcStuff}, ...]}.');
|
99 |
|
100 | value = {
|
101 | files: [
|
102 | {dest: 'dist/built-a.js', src: ['src/*2.js']},
|
103 | {dest: 'dist/built-b.js', src: ['src/*1.js', 'src/*2.js']}
|
104 | ]
|
105 | };
|
106 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
107 | expected = [
|
108 | {
|
109 | dest: 'dist/built-a.js',
|
110 | src: ['src/file2.js'],
|
111 | orig: value.files[0],
|
112 | },
|
113 | {
|
114 | dest: 'dist/built-b.js',
|
115 | src: ['src/file1.js', 'src/file2.js'],
|
116 | orig: value.files[1],
|
117 | },
|
118 | ];
|
119 | test.deepEqual(actual, expected, 'should normalize target: {files: [{src: srcStuff, dest: destStuff}, ...]}.');
|
120 |
|
121 | value = {
|
122 | files: [
|
123 | {dest: 'dist/built-a.js', src: ['src/*2.js'], foo: 123, bar: true},
|
124 | {dest: 'dist/built-b.js', src: ['src/*1.js', 'src/*2.js'], foo: 456, bar: null}
|
125 | ]
|
126 | };
|
127 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
128 | expected = [
|
129 | {
|
130 | dest: 'dist/built-a.js',
|
131 | src: ['src/file2.js'],
|
132 | foo: 123,
|
133 | bar: true,
|
134 | orig: value.files[0],
|
135 | },
|
136 | {
|
137 | dest: 'dist/built-b.js',
|
138 | src: ['src/file1.js', 'src/file2.js'],
|
139 | foo: 456,
|
140 | bar: null,
|
141 | orig: value.files[1],
|
142 | },
|
143 | ];
|
144 | test.deepEqual(actual, expected, 'should propagate extra properties.');
|
145 |
|
146 | test.done();
|
147 | },
|
148 | 'nonull': function(test) {
|
149 | test.expect(2);
|
150 | var actual, expected, value;
|
151 |
|
152 | value = {
|
153 | src: ['src/xxx*.js', 'src/yyy*.js'],
|
154 | dest: 'dist/built.js',
|
155 | };
|
156 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
157 | expected = [
|
158 | {
|
159 | dest: value.dest,
|
160 | src: [],
|
161 | orig: value,
|
162 | },
|
163 | ];
|
164 | test.deepEqual(actual, expected, 'if nonull is not set, should not include non-matching patterns.');
|
165 |
|
166 | value = {
|
167 | src: ['src/xxx*.js', 'src/yyy*.js'],
|
168 | dest: 'dist/built.js',
|
169 | nonull: true,
|
170 | };
|
171 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
172 | expected = [
|
173 | {
|
174 | dest: value.dest,
|
175 | src: value.src,
|
176 | nonull: true,
|
177 | orig: value,
|
178 | },
|
179 | ];
|
180 | test.deepEqual(actual, expected, 'if nonull is set, should include non-matching patterns.');
|
181 | test.done();
|
182 | },
|
183 | 'expandMapping': function(test) {
|
184 | test.expect(3);
|
185 | var actual, expected, value;
|
186 |
|
187 | value = {
|
188 | files: [
|
189 | {dest: 'dist/', src: ['src/file?.js'], expand: true},
|
190 | {dest: 'dist/', src: ['file?.js'], expand: true, cwd: 'src'},
|
191 | ]
|
192 | };
|
193 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
194 | expected = [
|
195 | {
|
196 | dest: 'dist/src/file1.js', src: ['src/file1.js'],
|
197 | orig: value.files[0],
|
198 | },
|
199 | {
|
200 | dest: 'dist/src/file2.js', src: ['src/file2.js'],
|
201 | orig: value.files[0],
|
202 | },
|
203 | {
|
204 | dest: 'dist/file1.js', src: ['src/file1.js'],
|
205 | orig: value.files[1],
|
206 | },
|
207 | {
|
208 | dest: 'dist/file2.js', src: ['src/file2.js'],
|
209 | orig: value.files[1],
|
210 | },
|
211 | ];
|
212 | test.deepEqual(actual, expected, 'expand to file mapping, removing cwd from destination paths.');
|
213 |
|
214 | value = {
|
215 | files: [
|
216 | {dest: 'dist/', src: ['src/file?.js'], expand: true, flatten: true},
|
217 | ]
|
218 | };
|
219 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
220 | expected = [
|
221 | {
|
222 | dest: 'dist/file1.js', src: ['src/file1.js'],
|
223 | orig: value.files[0],
|
224 | },
|
225 | {
|
226 | dest: 'dist/file2.js', src: ['src/file2.js'],
|
227 | orig: value.files[0],
|
228 | },
|
229 | ];
|
230 | test.deepEqual(actual, expected, 'expand to file mapping, flattening destination paths.');
|
231 |
|
232 | value = {
|
233 | files: [
|
234 | {
|
235 | dest: 'dist/',
|
236 | src: ['src/file?.js'],
|
237 | expand: true,
|
238 | rename: function(destBase, destPath) {
|
239 | return destBase + 'min/' + destPath.replace(/(\.js)$/, '.min$1');
|
240 | },
|
241 | },
|
242 | ]
|
243 | };
|
244 | actual = grunt.task.normalizeMultiTaskFiles(value, 'ignored');
|
245 | expected = [
|
246 | {
|
247 | dest: 'dist/min/src/file1.min.js', src: ['src/file1.js'],
|
248 | orig: value.files[0],
|
249 | },
|
250 | {
|
251 | dest: 'dist/min/src/file2.min.js', src: ['src/file2.js'],
|
252 | orig: value.files[0],
|
253 | },
|
254 | ];
|
255 | test.deepEqual(actual, expected, 'expand to file mapping, renaming files.');
|
256 |
|
257 | test.done();
|
258 | },
|
259 | };
|