UNPKG

7.23 kBJavaScriptView Raw
1'use strict';
2
3var grunt = require('../../lib/grunt');
4
5exports['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};