| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 | 'use strict';module.exports = function (grunt) {    // Report the elapsed execution time of tasks.    require('time-grunt')(grunt);    var COMPRESS_FOR_TESTS = true;    // Project configuration.    grunt.initConfig({        // Metadata required for build.        build: grunt.file.readYAML('build/build.yml'),        pkg: grunt.file.readJSON('package.json'),        meta: {            copyright: 'Copyright (c) 2009-<%= grunt.template.today("yyyy") %>',            banner: '/*!\n' +                ' * Less - <%= pkg.description %> v<%= pkg.version %>\n' +                ' * http://lesscss.org\n' +                ' *\n' +                ' * <%= meta.copyright %>, <%= pkg.author.name %> <<%= pkg.author.email %>>\n' +                ' * Licensed under the <%= pkg.license %> License.\n' +                ' *\n' +                ' */\n\n' +                ' /**' +                ' * @license <%= pkg.license %>\n' +                ' */\n\n'        },        shell: {            options: {stdout: true, failOnError: true},            test: {                command: 'node test'            },            benchmark: {                command: 'node benchmark/index.js'            },            "sourcemap-test": {                command: [                    'node bin/lessc --source-map=test/sourcemaps/maps/import-map.map test/less/import.less test/sourcemaps/import.css',                    'node bin/lessc --source-map test/less/sourcemaps/basic.less test/sourcemaps/basic.css'                ].join('&&')            }        },        browserify: {            browser: {                src: ['./lib/less-browser/bootstrap.js'],                options: {                    exclude: ["promise"],                    browserifyOptions: {                        standalone: 'less'                    }                },                dest: 'tmp/less.js'            }        },        concat: {            options: {                stripBanners: 'all',                banner: '<%= meta.banner %>'            },            browsertest: {                src: COMPRESS_FOR_TESTS ? '<%= uglify.test.dest %>' : '<%= browserify.browser.dest %>',                dest: 'test/browser/less.js'            },            dist: {                src: '<%= browserify.browser.dest %>',                dest: 'dist/less.js'            },            // Rhino            rhino: {                options: {                    banner: '/* Less.js v<%= pkg.version %> RHINO | <%= meta.copyright %>, <%= pkg.author.name %> <<%= pkg.author.email %>> */\n\n',                    footer: '' // override task-level footer                },                src: ['<%= build.rhino %>'],                dest: 'dist/less-rhino.js'            },            // lessc for Rhino            rhinolessc: {                options: {                    banner: '/* Less.js v<%= pkg.version %> RHINO | <%= meta.copyright %>, <%= pkg.author.name %> <<%= pkg.author.email %>> */\n\n',                    footer: '' // override task-level footer                },                src: ['<%= build.rhinolessc %>'],                dest: 'dist/lessc-rhino.js'            }        },        uglify: {            options: {                banner: '<%= meta.banner %>',                mangle: true,                compress: {                    pure_getters: true                }            },            dist: {                src: ['<%= concat.dist.dest %>'],                dest: 'dist/less.min.js'            },            test: {                src: '<%= browserify.browser.dest %>',                dest: 'tmp/less.min.js'            }        },        jshint: {            options: {jshintrc: '.jshintrc'},            files: {                src: [                    'Gruntfile.js',                    'lib/less/**/*.js',                    'lib/less-node/**/*.js',                    'lib/less-browser/**/*.js',                    'lib/less-rhino/**/*.js',                    'bin/lessc'                ]            }        },        jscs: {            src: ["test/**/*.js", "lib/less*/**/*.js", "bin/lessc"],            options: {                config: ".jscsrc"            }        },        connect: {            server: {                options: {                    port: 8081                }            }        },        jasmine: {            options: {                keepRunner: true,                host: 'http://localhost:8081/',                vendor: ['test/browser/jasmine-jsreporter.js', 'test/browser/common.js', 'test/browser/less.js'],                template: 'test/browser/test-runner-template.tmpl'            },            main: {                // src is used to build list of less files to compile                src: ['test/less/*.less', '!test/less/javascript.less', '!test/less/urls.less', '!test/less/empty.less'],                options: {                    helpers: 'test/browser/runner-main-options.js',                    specs: 'test/browser/runner-main-spec.js',                    outfile: 'tmp/browser/test-runner-main.html'                }            },            legacy: {                src: ['test/less/legacy/*.less'],                options: {                    helpers: 'test/browser/runner-legacy-options.js',                    specs: 'test/browser/runner-legacy-spec.js',                    outfile: 'tmp/browser/test-runner-legacy.html'                }            },            strictUnits: {                src: ['test/less/strict-units/*.less'],                options: {                    helpers: 'test/browser/runner-strict-units-options.js',                    specs: 'test/browser/runner-strict-units-spec.js',                    outfile: 'tmp/browser/test-runner-strict-units.html'                }            },            errors: {                src: ['test/less/errors/*.less', '!test/less/errors/javascript-error.less', 'test/browser/less/errors/*.less'],                options: {                    timeout: 20000,                    helpers: 'test/browser/runner-errors-options.js',                    specs: 'test/browser/runner-errors-spec.js',                    outfile: 'tmp/browser/test-runner-errors.html'                }            },            noJsErrors: {                src: ['test/less/no-js-errors/*.less'],                options: {                    helpers: 'test/browser/runner-no-js-errors-options.js',                    specs: 'test/browser/runner-no-js-errors-spec.js',                    outfile: 'tmp/browser/test-runner-no-js-errors.html'                }            },            browser: {                src: ['test/browser/less/*.less'],                options: {                    helpers: 'test/browser/runner-browser-options.js',                    specs: 'test/browser/runner-browser-spec.js',                    outfile: 'tmp/browser/test-runner-browser.html'                }            },            relativeUrls: {                src: ['test/browser/less/relative-urls/*.less'],                options: {                    helpers: 'test/browser/runner-relative-urls-options.js',                    specs: 'test/browser/runner-relative-urls-spec.js',                    outfile: 'tmp/browser/test-runner-relative-urls.html'                }            },            rootpath: {                src: ['test/browser/less/rootpath/*.less'],                options: {                    helpers: 'test/browser/runner-rootpath-options.js',                    specs: 'test/browser/runner-rootpath-spec.js',                    outfile: 'tmp/browser/test-runner-rootpath.html'                }            },            rootpathRelative: {                src: ['test/browser/less/rootpath-relative/*.less'],                options: {                    helpers: 'test/browser/runner-rootpath-relative-options.js',                    specs: 'test/browser/runner-rootpath-relative-spec.js',                    outfile: 'tmp/browser/test-runner-rootpath-relative.html'                }            },            production: {                src: ['test/browser/less/production/*.less'],                options: {                    helpers: 'test/browser/runner-production-options.js',                    specs: 'test/browser/runner-production-spec.js',                    outfile: 'tmp/browser/test-runner-production.html'                }            },            modifyVars: {                src: ['test/browser/less/modify-vars/*.less'],                options: {                    helpers: 'test/browser/runner-modify-vars-options.js',                    specs: 'test/browser/runner-modify-vars-spec.js',                    outfile: 'tmp/browser/test-runner-modify-vars.html'                }            },            globalVars: {                src: ['test/browser/less/global-vars/*.less'],                options: {                    helpers: 'test/browser/runner-global-vars-options.js',                    specs: 'test/browser/runner-global-vars-spec.js',                    outfile: 'tmp/browser/test-runner-global-vars.html'                }            },            postProcessor: {                src: ['test/browser/less/postProcessor/*.less'],                options: {                    helpers: 'test/browser/runner-postProcessor-options.js',                    specs: 'test/browser/runner-postProcessor.js',                    outfile: 'tmp/browser/test-runner-post-processor.html'                }            },            postProcessorPlugin: {                src: ['test/less/postProcessorPlugin/*.less'],                options: {                    helpers: ['test/plugins/postprocess/index.js','test/browser/runner-postProcessorPlugin-options.js'],                    specs: 'test/browser/runner-postProcessorPlugin.js',                    outfile: 'tmp/browser/test-runner-post-processor-plugin.html'                }            },            preProcessorPlugin: {                src: ['test/less/preProcessorPlugin/*.less'],                options: {                    helpers: ['test/plugins/preprocess/index.js','test/browser/runner-preProcessorPlugin-options.js'],                    specs: 'test/browser/runner-preProcessorPlugin.js',                    outfile: 'tmp/browser/test-runner-pre-processor-plugin.html'                }            },            visitorPlugin: {                src: ['test/less/visitorPlugin/*.less'],                options: {                    helpers: ['test/plugins/visitor/index.js','test/browser/runner-VisitorPlugin-options.js'],                    specs: 'test/browser/runner-VisitorPlugin.js',                    outfile: 'tmp/browser/test-runner-visitor-plugin.html'                }            },            filemanagerPlugin: {                src: ['test/less/filemanagerPlugin/*.less'],                options: {                    helpers: ['test/plugins/filemanager/index.js','test/browser/runner-filemanagerPlugin-options.js'],                    specs: 'test/browser/runner-filemanagerPlugin.js',                    outfile: 'tmp/browser/test-runner-filemanager-plugin.html'                }            }                    },        'saucelabs-jasmine': {            all: {                options: {                    urls: ["filemanager-plugin","visitor-plugin","pre-processor-plugin","post-processor-plugin","post-processor", "global-vars", "modify-vars", "production", "rootpath-relative",                           "rootpath", "relative-urls", "browser", "no-js-errors", "legacy", "strict-units"                    ].map(function(testName) {                        return "http://localhost:8081/tmp/browser/test-runner-" + testName + ".html";                    }),                    testname: 'Sauce Unit Test for less.js',                    browsers: [{                        browserName: "chrome",                        version: '',                        platform: 'Windows 8'                    },                    {                        browserName: "firefox",                        version: '33',                        platform: 'Linux'                    },                    {                        browserName: "iPad",                        version: '8.0',                        platform: 'OS X 10.9',                        'device-orientation': 'portrait'                    },                    {                        browserName: "internet explorer",                        version: '8',                        platform: 'Windows XP'                    },                    {                        browserName: "internet explorer",                        version: '9',                        platform: 'Windows 7'                    },                    {                        browserName: "internet explorer",                        version: '10',                        platform: 'Windows 7'                    },                    {                        browserName: "internet explorer",                        version: '11',                        platform: 'Windows 8.1'                    }],                    sauceConfig: {                        'record-video': process.env.TRAVIS_BRANCH !== "master",                        'record-screenshots': process.env.TRAVIS_BRANCH !== "master",                        'idle-timeout': 100, 'max-duration': 120,                        build: process.env.TRAVIS_BRANCH === "master" ? process.env.TRAVIS_JOB_ID : undefined,                        tags: [process.env.TRAVIS_BUILD_NUMBER, process.env.TRAVIS_PULL_REQUEST, process.env.TRAVIS_BRANCH]                    },                    throttled: 3                }            }        },        // Clean the version of less built for the tests        clean: {            test: ['test/browser/less.js', 'tmp', 'test/less-bom'],            "sourcemap-test": ['test/sourcemaps/*.css', 'test/sourcemaps/*.map'],            sauce_log: ["sc_*.log"]        }    });    // Load these plugins to provide the necessary tasks    require('jit-grunt')(grunt);    // Actually load this plugin's task(s).    grunt.loadTasks('build/tasks');    // by default, run tests    grunt.registerTask('default', [        'test'    ]);    // Release    grunt.registerTask('dist', [        'browserify:browser',        'concat:dist',        'uglify:dist'    ]);    // Release Rhino Version    grunt.registerTask('rhino', [        'browserify:rhino',        'concat:rhino',        'concat:rhinolessc'    ]);    // Create the browser version of less.js    grunt.registerTask('browsertest-lessjs', [        'browserify:browser',        'uglify:test',        'concat:browsertest'    ]);    // Run all browser tests    grunt.registerTask('browsertest', [        'browsertest-lessjs',        'connect',        'jasmine'    ]);    // setup a web server to run the browser tests in a browser rather than phantom    grunt.registerTask('browsertest-server', [        'browsertest-lessjs',        'jasmine::build',        'connect::keepalive'    ]);    var previous_force_state = grunt.option("force");    grunt.registerTask("force",function(set) {        if (set === "on") {            grunt.option("force",true);        }        else if (set === "off") {            grunt.option("force",false);        }        else if (set === "restore") {            grunt.option("force",previous_force_state);        }    });    grunt.registerTask('sauce', [        'browsertest-lessjs',        'jasmine::build',        'connect',        'sauce-after-setup'    ]);    // setup a web server to run the browser tests in a browser rather than phantom    grunt.registerTask('sauce-after-setup', [        'saucelabs-jasmine',        'clean:sauce_log'    ]);    var testTasks = [        'clean',        'jshint',        'jscs',        'shell:test',        'browsertest'    ];    if (isNaN(Number(process.env.TRAVIS_PULL_REQUEST, 10)) &&        Number(process.env.TRAVIS_NODE_VERSION) === 0.11 &&        (process.env.TRAVIS_BRANCH === "master" || process.env.TRAVIS_BRANCH === "sauce")) {        testTasks.push("force:on");        testTasks.push("sauce-after-setup");        testTasks.push("force:off");    }    // Run all tests    grunt.registerTask('test', testTasks);    // Run all tests    grunt.registerTask('quicktest', testTasks.slice(0, testTasks.length -1));    // generate a good test environment for testing sourcemaps    grunt.registerTask('sourcemap-test', [        'clean:sourcemap-test',        'shell:sourcemap-test',        'connect::keepalive'    ]);    // Run benchmark    grunt.registerTask('benchmark', [        'shell:benchmark'    ]);};
 |