diff --git a/Makefile b/Makefile index fe150e5bf3..1653ae9157 100644 --- a/Makefile +++ b/Makefile @@ -135,6 +135,10 @@ serve: build/test_requires.js build/test_rendering_requires.js test: build/timestamps/node-modules-timestamp build/test_requires.js node tasks/test.js +.PHONY: test-node +test-node: build/timestamps/node-modules-timestamp + ./node_modules/.bin/mocha test/node + .PHONY: test-coverage test-coverage: build/timestamps/node-modules-timestamp node tasks/test-coverage.js diff --git a/package.json b/package.json index 15027d950e..86870e097b 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "postinstall": "closure-util update", "start": "node tasks/serve.js", "pretest": "eslint tasks test test_rendering src examples", + "test-node": "mocha test/node", "test": "node tasks/test.js", "debug-server": "node tasks/serve-lib.js" }, diff --git a/test/node/.eslintrc b/test/node/.eslintrc new file mode 100644 index 0000000000..22abc7fb2b --- /dev/null +++ b/test/node/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "es6": true + } +} diff --git a/test/node/one-provide.js b/test/node/one-provide.js new file mode 100644 index 0000000000..53064f03a3 --- /dev/null +++ b/test/node/one-provide.js @@ -0,0 +1,64 @@ +const assert = require('assert'); +const fs = require('fs'); +const glob = require('glob'); +const path = require('path'); + +const src = path.join(__dirname, '..', '..', 'src'); + +const PROVIDE_RE = /^goog.provide\('(.*)'\);/ + +describe('each file', () => { + + const provides = {}; + + before(done => { + glob('**/*.js', {cwd: src}, function(err, files) { + if (err) { + return done(err); + } + let count = files.length; + let called = false; + files.forEach(file => { + fs.readFile(path.join(src, file), (err, data) => { + if (!called && err) { + called = true; + return done(err); + } + provides[file] = []; + String(data).split('\n').forEach(line => { + const match = line.match(PROVIDE_RE); + if (match) { + provides[file].push(match[1]); + } + }); + --count; + if (count === 0 && !called) { + called = true; + return done(); + } + }); + }); + }); + }); + + it('has a single provide', () => { + for (let file in provides) { + assert.equal(provides[file].length, 1, 'expected a single provide: ' + file); + } + }); + + it('has a path that maps to the provide', () => { + for (let file in provides) { + const provide = provides[file][0]; + let ext; + if (file.endsWith('index.js')) { + ext = path.sep + 'index.js'; + } else { + ext = '.js'; + } + const mapped = provide.split('.').map(part => part.toLowerCase()).join(path.sep) + ext; + assert.equal(mapped, file, 'expected provide to be like the path: ' + file); + } + }); + +});