123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- /*
- * grunt
- * http://gruntjs.com/
- *
- * Copyright (c) 2012 "Cowboy" Ben Alman
- * Licensed under the MIT license.
- * https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
- */
- // For now, run this "test suite" with:
- // grunt --gruntfile ./test/gruntfile/multi-task-files.js
- 'use strict';
- module.exports = function(grunt) {
- grunt.file.setBase('../fixtures/files');
- grunt.initConfig({
- build: '123',
- mappings: {
- cwd: 'src/',
- dest: 'foo/',
- ext: '.bar',
- rename: function(destBase, destPath) {
- return destBase + 'baz/' + destPath.replace(/\.js$/, '<%= mappings.ext %>');
- },
- },
- run: {
- options: {a: 1, b: 11},
- // This is the "compact" format, where the target name is actually the
- // dest filename. Doesn't support per-target options, templated dest, or
- // >1 srcs-dest grouping.
- 'dist/built.js': 'src/*1.js',
- 'dist/built1.js': ['src/*1.js', 'src/*2.js'],
- // This is the "medium" format. The target name is arbitrary and can be
- // used like "grunt run:built". Supports per-target options, templated
- // dest, and arbitrary "extra" paramters. Doesn't support >1 srcs-dest
- // grouping.
- built: {
- options: {a: 2, c: 22},
- src: ['src/*1.js', 'src/*2.js'],
- dest: 'dist/built-<%= build %>.js',
- extra: 123,
- },
- // This is the "full" format. The target name is arbitrary and can be
- // used like "grunt run:long1". Supports per-target options, templated
- // dest and >1 srcs-dest grouping.
- long1: {
- options: {a: 3, c: 33},
- files: {
- 'dist/built-<%= build %>-a.js': ['src/*1.js'],
- 'dist/built-<%= build %>-b.js': ['src/*1.js', 'src/*2.js'],
- }
- },
- long2: {
- options: {a: 4, c: 44},
- files: [
- {'dist/built-<%= build %>-a.js': ['src/*.whoops']},
- {'dist/built-<%= build %>-b.js': ['src/*1.js', 'src/*2.js']},
- ]
- },
- // This "full" variant supports per srcs-dest arbitrary "extra" paramters.
- long3: {
- options: {a: 5, c: 55},
- files: [
- {dest: 'dist/built-<%= build %>-a.js', src: ['src/*2.js'], extra: 456},
- {dest: 'dist/built-<%= build %>-b.js', src: ['src/*1.js', 'src/*2.js'], extra: 789},
- ]
- },
- // File mapping options can be specified in these 2 formats.
- built_mapping: {
- options: {a: 6, c: 66},
- expand: true,
- cwd: '<%= mappings.cwd %>',
- src: ['*1.js', '*2.js'],
- dest: '<%= mappings.dest %>',
- rename: '<%= mappings.rename %>',
- extra: 123
- },
- long3_mapping: {
- options: {a: 7, c: 77},
- files: [
- {
- expand: true,
- cwd: '<%= mappings.cwd %>',
- src: ['*1.js', '*2.js'],
- dest: '<%= mappings.dest %>',
- rename: '<%= mappings.rename %>',
- extra: 123
- }
- ]
- },
- // Need to ensure the task function is run if no files or options were
- // specified!
- no_files_or_options: {},
- },
- });
- var results = {};
- var counters = [];
- var counter = -1;
- grunt.registerMultiTask('run', 'Store stuff for later testing.', function() {
- var key = this.nameArgs;
- results[key] = {
- options: this.options({d: 9}),
- files: this.files,
- };
- // Test asynchronous-ness.
- var done;
- if (counter++ % 2 === 0) {
- done = this.async();
- setTimeout(function() {
- counters.push(counter);
- done();
- }, 10);
- } else {
- counters.push(counter);
- }
- });
- var expecteds = {
- 'run:no_files_or_options': {
- options: {a: 1, b: 11, d: 9},
- files: [],
- },
- 'run:dist/built.js': {
- options: {a: 1, b: 11, d: 9},
- files: [
- {
- dest: 'dist/built.js',
- src: ['src/file1.js'],
- orig: {
- dest: 'dist/built.js',
- src: ['src/*1.js'],
- },
- },
- ]
- },
- 'run:dist/built1.js': {
- options: {a: 1, b: 11, d: 9},
- files: [
- {
- dest: 'dist/built1.js',
- src: ['src/file1.js', 'src/file2.js'],
- orig: {
- dest: 'dist/built1.js',
- src: ['src/*1.js', 'src/*2.js'],
- },
- },
- ]
- },
- 'run:built': {
- options: {a: 2, b: 11, c: 22, d: 9},
- files: [
- {
- dest: 'dist/built-123.js',
- src: ['src/file1.js', 'src/file2.js'],
- extra: 123,
- orig: {
- dest: 'dist/built-123.js',
- src: ['src/*1.js', 'src/*2.js'],
- extra: 123,
- },
- },
- ],
- },
- 'run:long1': {
- options: {a: 3, b: 11, c: 33, d: 9},
- files: [
- {
- dest: 'dist/built-123-a.js',
- src: ['src/file1.js'],
- orig: {
- dest: 'dist/built-123-a.js',
- src: ['src/*1.js'],
- },
- },
- {
- dest: 'dist/built-123-b.js',
- src: ['src/file1.js', 'src/file2.js'],
- orig: {
- dest: 'dist/built-123-b.js',
- src: ['src/*1.js', 'src/*2.js'],
- },
- },
- ],
- },
- 'run:long2': {
- options: {a: 4, b: 11, c: 44, d: 9},
- files: [
- {
- dest: 'dist/built-123-a.js',
- src: [],
- orig: {
- dest: 'dist/built-123-a.js',
- src: ['src/*.whoops'],
- },
- },
- {
- dest: 'dist/built-123-b.js',
- src: ['src/file1.js', 'src/file2.js'],
- orig: {
- dest: 'dist/built-123-b.js',
- src: ['src/*1.js', 'src/*2.js'],
- },
- },
- ],
- },
- 'run:long3': {
- options: {a: 5, b: 11, c: 55, d: 9},
- files: [
- {
- dest: 'dist/built-123-a.js',
- src: ['src/file2.js'],
- extra: 456,
- orig: {
- dest: 'dist/built-123-a.js',
- src: ['src/*2.js'],
- extra: 456,
- },
- },
- {
- dest: 'dist/built-123-b.js',
- src: ['src/file1.js', 'src/file2.js'],
- extra: 789,
- orig: {
- src: ['src/*1.js', 'src/*2.js'],
- dest: 'dist/built-123-b.js',
- extra: 789,
- },
- },
- ],
- },
- 'run:built_mapping': {
- options: {a: 6, b: 11, c: 66, d: 9},
- files: [
- {
- dest: 'foo/baz/file1.bar',
- src: ['src/file1.js'],
- extra: 123,
- orig: {
- expand: true,
- cwd: grunt.config.get('mappings.cwd'),
- src: ['*1.js', '*2.js'],
- dest: grunt.config.get('mappings.dest'),
- rename: grunt.config.get('run.built_mapping.rename'),
- extra: 123,
- },
- },
- {
- dest: 'foo/baz/file2.bar',
- src: ['src/file2.js'],
- extra: 123,
- orig: {
- expand: true,
- cwd: grunt.config.get('run.built_mapping.cwd'),
- src: ['*1.js', '*2.js'],
- dest: grunt.config.get('run.built_mapping.dest'),
- rename: grunt.config.get('run.built_mapping.rename'),
- extra: 123,
- },
- },
- ],
- },
- 'run:long3_mapping': {
- options: {a: 7, b: 11, c: 77, d: 9},
- files: [
- {
- dest: 'foo/baz/file1.bar',
- src: ['src/file1.js'],
- extra: 123,
- orig: {
- expand: true,
- cwd: grunt.config.get('mappings.cwd'),
- src: ['*1.js', '*2.js'],
- dest: grunt.config.get('mappings.dest'),
- rename: grunt.config.get('mappings.rename'),
- extra: 123,
- },
- },
- {
- dest: 'foo/baz/file2.bar',
- src: ['src/file2.js'],
- extra: 123,
- orig: {
- expand: true,
- cwd: grunt.config.get('mappings.cwd'),
- src: ['*1.js', '*2.js'],
- dest: grunt.config.get('mappings.dest'),
- rename: grunt.config.get('run.built_mapping.rename'),
- extra: 123,
- },
- },
- ],
- },
- };
- var assert = require('assert');
- var difflet = require('difflet')({indent: 2, comment: true});
- var test = function(name, fn) {
- try {
- fn();
- } catch (err) {
- grunt.log.subhead('Assertion Failure in ' + name);
- console.log(difflet.compare(err.expected, err.actual));
- throw new Error(err.message);
- }
- };
- grunt.registerTask('test', 'Test file and option objects.', function() {
- var key = 'run:' + this.nameArgs.replace(/^.*?:/, '');
- var all = key === 'run:all';
- var actual = all ? results : results[key];
- var expected = all ? expecteds : expecteds[key];
- test(this.name, function() {
- assert.deepEqual(actual, expected, 'Actual should match expected.');
- });
- if (all) {
- results = {};
- } else {
- delete results[key];
- }
- });
- grunt.registerTask('test:counters', 'Test function execution order.', function() {
- test(this.name, function() {
- assert.equal(counters.length, counter + 1, 'Task functions should have run the correct number of times.');
- var expected = [];
- for (var i = 0; i < counters.length; i++) { expected.push(i); }
- assert.deepEqual(counters, expected, 'Task functions should have actually executed in-order.');
- });
- });
- grunt.registerTask('default', [
- 'run:no_files_or_options',
- 'test:no_files_or_options',
- 'run:dist/built.js',
- 'test:dist/built.js',
- 'run:dist/built1.js',
- 'test:dist/built1.js',
- 'run:built',
- 'test:built',
- 'run:long1',
- 'test:long1',
- 'run:long2',
- 'test:long2',
- 'run:long3',
- 'test:long3',
- 'run:built_mapping',
- 'test:built_mapping',
- 'run:long3_mapping',
- 'test:long3_mapping',
- 'run',
- 'test:all',
- 'test:counters',
- ]);
- };
|