mirror of
https://github.com/remy/inliner.git
synced 2024-10-05 14:57:27 +03:00
test: improve coverage
This commit is contained in:
parent
51f0ca07ba
commit
c0a632b24b
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
node_modules/
|
||||
.idea/
|
||||
|
||||
coverage
|
||||
.nyc_output
|
||||
|
@ -11,9 +11,9 @@ When these are put in the [fixtures](https://github.com/remy/inliner/tree/master
|
||||
|
||||
If there are any external assets the example needs, please also include these and name them with the same root as your example, i.e. `<issue>.css` or `<issue>.min.js` etc.
|
||||
|
||||
In addition `<issue>.opts.json` can be loaded to help specify runtime options during the test.
|
||||
In addition `<issue>.opts.json` can be loaded to help specify runtime options during the test.
|
||||
|
||||
**To test a single fixture you can use: `npm test <issue>`**
|
||||
**To test a single fixture you can use: `FILTER=<issue> npm test`**
|
||||
|
||||
## Commit messages
|
||||
|
||||
|
@ -56,16 +56,15 @@ module.exports = function get(url, options) {
|
||||
return reject(error);
|
||||
}
|
||||
|
||||
if (!res) {
|
||||
res = { headers: {}, statusCode: null };
|
||||
}
|
||||
|
||||
debug('response: %s %s', res.statusCode, url);
|
||||
if (res.statusCode !== 200) {
|
||||
body = '';
|
||||
inliner.emit('warning', res.statusCode + ' on ' + url);
|
||||
}
|
||||
|
||||
if (res.statusCode >= 400) {
|
||||
body = '';
|
||||
}
|
||||
|
||||
resolve({
|
||||
body: body,
|
||||
headers: res.headers,
|
||||
|
15
lib/index.js
15
lib/index.js
@ -128,7 +128,13 @@ function Inliner(source, options, callback) {
|
||||
setTimeout(fn, 0);
|
||||
};
|
||||
}
|
||||
global.setImmediate(this.main.bind(this));
|
||||
this.promise = new Promise(function (resolve) {
|
||||
global.setImmediate(function () {
|
||||
resolve(inliner.main());
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.promise = Promise.reject(new Error('No source to inline'));
|
||||
}
|
||||
|
||||
return this;
|
||||
@ -157,10 +163,10 @@ function main() {
|
||||
var inliner = this;
|
||||
var url = this.source;
|
||||
|
||||
fs.exists(this.filename || url)
|
||||
return fs.exists(this.filename || url)
|
||||
.then(function exists(isFile) {
|
||||
if (!isFile) {
|
||||
throw new Error();
|
||||
throw new Error('Not a file - use URL parser');
|
||||
}
|
||||
|
||||
debug('inlining file');
|
||||
@ -169,7 +175,7 @@ function main() {
|
||||
inliner.url = url; // this is a hack for the `resolve` function later on
|
||||
return inliner.get(this.filename || url, { encoding: 'binary' });
|
||||
})
|
||||
.catch(function isUrl() {
|
||||
.catch(function isUrl(error) {
|
||||
// make the best guess as to whether we're working with a url
|
||||
if (inliner.url || url.indexOf('<') === -1) {
|
||||
url = inliner.url || inliner.source;
|
||||
@ -310,6 +316,7 @@ function main() {
|
||||
debug('fail', error.stack);
|
||||
inliner.callback(error);
|
||||
inliner.emit('error', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
|
10
package.json
10
package.json
@ -4,7 +4,9 @@
|
||||
"homepage": "http://github.com/remy/inliner",
|
||||
"main": "lib/index.js",
|
||||
"scripts": {
|
||||
"test": "jscs -v cli/*.js lib/*.js && node test/*.test.js --cov",
|
||||
"cover": "tap test/*.test.js --cov --coverage-report=lcov",
|
||||
"lint": "jscs -v cli/*.js lib/*.js",
|
||||
"test": "npm run lint && tap test/*.test.js --cov -R spec",
|
||||
"semantic-release": "semantic-release pre && npm publish && semantic-release post"
|
||||
},
|
||||
"keywords": [
|
||||
@ -29,6 +31,7 @@
|
||||
"minimist": "^1.1.3",
|
||||
"request": "^2.60.0",
|
||||
"svgo": "^0.5.6",
|
||||
"tap-only": "0.0.5",
|
||||
"then-fs": "^2.0.0",
|
||||
"uglify-js": "^2.4.24",
|
||||
"update-notifier": "^0.5.0"
|
||||
@ -43,9 +46,8 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"jscs": "^2.0.0",
|
||||
"semantic-release": "^4.0.0",
|
||||
"st": "^0.5.5",
|
||||
"tap-spec": "^4.0.2",
|
||||
"tape": "^4.0.1",
|
||||
"semantic-release": "^4.0.0"
|
||||
"tap": "^5.4.2"
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,22 @@
|
||||
'use strict';
|
||||
var test = require('tape');
|
||||
var test = require('tap-only');
|
||||
var Promise = require('es6-promise').Promise; // jshint ignore:line
|
||||
var fs = require('then-fs');
|
||||
var path = require('path');
|
||||
var tapSpec = require('tap-spec');
|
||||
var http = require('http');
|
||||
var debug = require('debug')('inliner:test');
|
||||
var st = require('st');
|
||||
var server;
|
||||
|
||||
test.createStream().pipe(tapSpec()).pipe(process.stdout);
|
||||
test('setup mock server', function (t) {
|
||||
server = http.createServer(
|
||||
st(path.resolve(__dirname, 'fixtures'))
|
||||
).listen(54321);
|
||||
|
||||
server.on('listening', function listening() {
|
||||
t.pass('mock server ready');
|
||||
t.end();
|
||||
});
|
||||
});
|
||||
|
||||
test('inliner core functions', function coreTests(t) {
|
||||
var Inliner = require('../');
|
||||
@ -28,14 +36,28 @@ test('inliner core functions', function coreTests(t) {
|
||||
});
|
||||
});
|
||||
|
||||
test('inliner fixtures', function fixtureTests(t) {
|
||||
var testFilter = process.argv.slice(-1).pop();
|
||||
var testOffset = 1;
|
||||
test('failures', function failureTests(t) {
|
||||
var Inliner = require('../');
|
||||
var throwBack = function (e) { return e; };
|
||||
return Promise.all([
|
||||
'http://localhost:11111_11',
|
||||
'http://localhost:11111',
|
||||
'http://localhost:1111'].map(function (url) {
|
||||
return (new Inliner('http://localhost:11111_11').promise).catch(throwBack).then(function (res) {
|
||||
t.ok(res instanceof Error, url + ' throws error');
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
if (testFilter === '--cov') { // this is part of our npm test command
|
||||
testFilter = null;
|
||||
testOffset = 0;
|
||||
} else {
|
||||
test('inliner fixtures', function fixtureTests(t) {
|
||||
var testFilter = Object.keys(process.env).map(function (key) {
|
||||
if (key.toLowerCase() === 'filter') {
|
||||
return process.env[key];
|
||||
}
|
||||
return false;
|
||||
}).filter(Boolean).shift();
|
||||
|
||||
if (testFilter) {
|
||||
t.pass('filtering against ' + testFilter + '.src.html');
|
||||
}
|
||||
|
||||
@ -55,42 +77,35 @@ test('inliner fixtures', function fixtureTests(t) {
|
||||
return file;
|
||||
});
|
||||
|
||||
t.plan(files.length + testOffset);
|
||||
Promise.all(results).then(function then(results) {
|
||||
return Promise.all(files.map(function map(file, i) {
|
||||
// Read test-specific command line arguments.
|
||||
var optsfile = file.replace('.src.html', '.opts.json');
|
||||
var opts = {};
|
||||
try {
|
||||
opts = require(optsfile);
|
||||
debug('loaded options %s', optsfile, opts);
|
||||
} catch (e) {}
|
||||
|
||||
var server = http.createServer(
|
||||
st(path.resolve(__dirname, 'fixtures'))
|
||||
).listen(54321);
|
||||
|
||||
server.on('listening', function listening() {
|
||||
Promise.all(results).then(function then(results) {
|
||||
return Promise.all(files.map(function map(file, i) {
|
||||
// Read test-specific command line arguments.
|
||||
var optsfile = file.replace('.src.html', '.opts.json');
|
||||
var opts = {};
|
||||
try {
|
||||
opts = require(optsfile);
|
||||
debug('loaded options %s', optsfile, opts);
|
||||
} catch (e) {}
|
||||
|
||||
return new Promise(function inlinerPromise(resolve, reject) {
|
||||
new Inliner(file, opts, function callback(error, html) {
|
||||
var basename = path.basename(file);
|
||||
if (error) {
|
||||
error.message += ' @ ' + basename;
|
||||
return reject(error);
|
||||
}
|
||||
t.ok(html.trim() === results[i].trim(), basename + ' matches');
|
||||
debug('result', html.trim());
|
||||
// debug('expected', results[i].trim());
|
||||
resolve();
|
||||
});
|
||||
return new Promise(function inlinerPromise(resolve, reject) {
|
||||
new Inliner(file, opts, function callback(error, html) {
|
||||
var basename = path.basename(file);
|
||||
if (error) {
|
||||
error.message += ' @ ' + basename;
|
||||
return reject(error);
|
||||
}
|
||||
t.equal(html.trim(), results[i].trim(), basename + ' matches');
|
||||
debug('result', html.trim());
|
||||
// debug('expected', results[i].trim());
|
||||
resolve();
|
||||
});
|
||||
}));
|
||||
}).catch(function errHandler(error) {
|
||||
t.fail(error.message);
|
||||
console.log(error.stack);
|
||||
}).then(function close() {
|
||||
server.close();
|
||||
});
|
||||
});
|
||||
});
|
||||
}));
|
||||
}).catch(t.threw).then(t.end);
|
||||
});
|
||||
|
||||
test('tear down', function (t) {
|
||||
server.close();
|
||||
t.pass('tear down complete');
|
||||
t.end();
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user