diff --git a/.travis.yml b/.travis.yml index 9e02e415c..f246e9856 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,3 +15,6 @@ addons: before_script: - npm run bootstrap + +after_failure: + - npm run debug diff --git a/package.json b/package.json index e2466f06f..942a6a241 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "bootstrap": "npm i; lerna bootstrap", "test": "lerna run test", "clean": "rimraf lerna-debug.log && lerna run clean", - "nuke": "lerna clean && rm -r node_modules" + "nuke": "lerna clean && rm -r node_modules", + "debug": "cat lerna-debug.log && for d in packages/*/npm-debug.log*; do echo $d; cat $d; done" }, "devDependencies": { "babel-plugin-react-require": "^2.1.0", diff --git a/packages/react-server-gulp-module-tagger/gulpfile.js b/packages/react-server-gulp-module-tagger/gulpfile.js deleted file mode 100644 index ecc0412ff..000000000 --- a/packages/react-server-gulp-module-tagger/gulpfile.js +++ /dev/null @@ -1,14 +0,0 @@ -const path = require('path'); -const gulp = require('gulp'); -const nsp = require('gulp-nsp'); -const eslint = require('gulp-eslint'); - -gulp.task('eslint', [], () => gulp.src("index.js") - .pipe(eslint()) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()) -); - -gulp.task('nsp', (cb) => nsp({package: path.resolve('package.json')}, cb)); - -gulp.task('test', ['nsp', 'eslint']); diff --git a/packages/react-server-gulp-module-tagger/index.js b/packages/react-server-gulp-module-tagger/index.js index 0624449ce..ca5627d43 100644 --- a/packages/react-server-gulp-module-tagger/index.js +++ b/packages/react-server-gulp-module-tagger/index.js @@ -101,7 +101,7 @@ var getColor = (function(){ return (hash%len+len)%len; } - return function(fn){ - return colors[hash(fn)]; + return function(fn, opts){ + return colors[hash(opts.name)]; } })(); diff --git a/packages/react-server-gulp-module-tagger/package.json b/packages/react-server-gulp-module-tagger/package.json index c0048be78..0dce5aee8 100644 --- a/packages/react-server-gulp-module-tagger/package.json +++ b/packages/react-server-gulp-module-tagger/package.json @@ -4,7 +4,7 @@ "description": "A gulp plugin to replace tags with module information", "main": "index.js", "scripts": { - "test": "gulp test", + "test": "ava test/test.js && eslint index.js && nsp check", "clean": "rimraf target npm-debug.log*" }, "repository": "redfin/react-server", @@ -15,9 +15,13 @@ ], "dependencies": { "gulp-foreach": "0.1.0", + "gulp-plumber": "^1.1.0", "gulp-replace": "0.5.2" }, "devDependencies": { + "ava": "^0.15.2", + "del": "^2.2.1", + "nsp": "^2.4.0", "rimraf": "^2.5.2" } } diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/example/actual.js b/packages/react-server-gulp-module-tagger/test/fixtures/example/actual.js new file mode 100644 index 000000000..397c15fe9 --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/example/actual.js @@ -0,0 +1,3 @@ +var logger = require('react-server').logging.getLogger(__LOGGER__); +var fooLogger = logging.getLogger(__LOGGER__({ label: "foo" })); +var barLogger = logging.getLogger(__LOGGER__({ label: "bar" })); diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/example/expected.js b/packages/react-server-gulp-module-tagger/test/fixtures/example/expected.js new file mode 100644 index 000000000..cbfeef39a --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/example/expected.js @@ -0,0 +1,3 @@ +var logger = require('react-server').logging.getLogger({"name":"react-server-gulp-module-tagger.test.fixtures.example.actual","color":{"server":75,"client":"rgb(42,127,212)"}}); +var fooLogger = logging.getLogger({"label":"foo","name":"react-server-gulp-module-tagger.test.fixtures.example.actual.foo","color":{"server":147,"client":"rgb(127,127,212)"}}); +var barLogger = logging.getLogger({"label":"bar","name":"react-server-gulp-module-tagger.test.fixtures.example.actual.bar","color":{"server":133,"client":"rgb(127,42,127)"}}); diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/example/gulpfile.js b/packages/react-server-gulp-module-tagger/test/fixtures/example/gulpfile.js new file mode 100644 index 000000000..88048261e --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/example/gulpfile.js @@ -0,0 +1,8 @@ +const gulp = require('gulp'); +const tagger = require('../../..'); + +gulp.task('default', () => { + gulp.src('actual.js') + .pipe(tagger()) + .pipe(gulp.dest('build')); +}); diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/actual.js b/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/actual.js new file mode 100644 index 000000000..4d86c7533 --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/actual.js @@ -0,0 +1,2 @@ +__CHANNEL__ +__CACHE__ diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/expected.js b/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/expected.js new file mode 100644 index 000000000..e620fee93 --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/expected.js @@ -0,0 +1,2 @@ +{"name":"react-server-gulp-module-tagger.test.fixtures.reserved-future-tokens.actual","color":{"server":215,"client":"rgb(212,127,42)"}} +{"name":"react-server-gulp-module-tagger.test.fixtures.reserved-future-tokens.actual","color":{"server":215,"client":"rgb(212,127,42)"}} diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/gulpfile.js b/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/gulpfile.js new file mode 100644 index 000000000..88048261e --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/reserved-future-tokens/gulpfile.js @@ -0,0 +1,8 @@ +const gulp = require('gulp'); +const tagger = require('../../..'); + +gulp.task('default', () => { + gulp.src('actual.js') + .pipe(tagger()) + .pipe(gulp.dest('build')); +}); diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/trim/actual.js b/packages/react-server-gulp-module-tagger/test/fixtures/trim/actual.js new file mode 100644 index 000000000..397c15fe9 --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/trim/actual.js @@ -0,0 +1,3 @@ +var logger = require('react-server').logging.getLogger(__LOGGER__); +var fooLogger = logging.getLogger(__LOGGER__({ label: "foo" })); +var barLogger = logging.getLogger(__LOGGER__({ label: "bar" })); diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/trim/expected.js b/packages/react-server-gulp-module-tagger/test/fixtures/trim/expected.js new file mode 100644 index 000000000..b31c1f126 --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/trim/expected.js @@ -0,0 +1,3 @@ +var logger = require('react-server').logging.getLogger({"name":"fixtures.trim.actual","color":{"server":227,"client":"rgb(212,212,42)"}}); +var fooLogger = logging.getLogger({"label":"foo","name":"fixtures.trim.actual.foo","color":{"server":85,"client":"rgb(42,212,127)"}}); +var barLogger = logging.getLogger({"label":"bar","name":"fixtures.trim.actual.bar","color":{"server":73,"client":"rgb(42,127,127)"}}); diff --git a/packages/react-server-gulp-module-tagger/test/fixtures/trim/gulpfile.js b/packages/react-server-gulp-module-tagger/test/fixtures/trim/gulpfile.js new file mode 100644 index 000000000..9339d0d6e --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/fixtures/trim/gulpfile.js @@ -0,0 +1,8 @@ +const gulp = require('gulp'); +const tagger = require('../../..'); + +gulp.task('default', () => { + gulp.src('actual.js') + .pipe(tagger({ trim: 'react-server-gulp-module-tagger.test.' })) + .pipe(gulp.dest('build')); +}); diff --git a/packages/react-server-gulp-module-tagger/test/test.js b/packages/react-server-gulp-module-tagger/test/test.js new file mode 100644 index 000000000..80bcd7970 --- /dev/null +++ b/packages/react-server-gulp-module-tagger/test/test.js @@ -0,0 +1,72 @@ +import test from 'ava'; +import fs from 'fs'; +import cp from 'child_process'; +import path from 'path'; +import del from 'del'; + +getTestCases().then((testCases) => { + testCases.forEach((dir) => { + test(`testing fixture in ${dir}`, async t => { + await runGulp(dir); + const expected = await readFile(path.join('fixtures', dir, 'expected.js')); + const actual = await readFile(path.join('fixtures', dir, 'build', 'actual.js')); + t.is(actual.toString(), expected.toString()); + }); + }); +}); + +test('module can be required', t => { + try { + require('..'); + t.pass(); + } catch (e) { + t.fail(); + } +}); + +test.after.always('cleanup', async t => { + const promises = []; + const fixtures = await getTestCases(); + fixtures.forEach(fixture => { + promises.push(del(path.join('fixtures', fixture, 'build'))); + }) + await Promise.all(promises); +}); + +function getTestCases() { + return new Promise((resolve, reject) => { + fs.readdir('fixtures', (err, data) => { + if (err) { + reject(err); + } else { + resolve(data); + } + }) + }) +} + +function readFile(filename) { + return new Promise((resolve, reject) => { + fs.readFile(filename, (err, data) => { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +} + +function runGulp(dir) { + return new Promise((resolve, reject) => { + dir = path.join(__dirname, 'fixtures', dir); + cp.exec('gulp', { cwd: dir }, (err, stdout, stderr) => { + if (err) { + console.error(stderr); + reject(err); + } else { + resolve(stdout); + } + }); + }); +}