mirror of https://github.com/lukechilds/ava.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
4.1 KiB
172 lines
4.1 KiB
'use strict';
|
|
const path = require('path');
|
|
const tap = require('tap');
|
|
const AvaFiles = require('../lib/ava-files');
|
|
|
|
const test = tap.test;
|
|
|
|
tap.afterEach(done => {
|
|
// We changed the CWD in some of the tests
|
|
process.chdir(path.resolve(__dirname, '..'));
|
|
done();
|
|
});
|
|
|
|
function fixture() {
|
|
const args = Array.prototype.slice.call(arguments);
|
|
args.unshift(__dirname, 'fixture', 'ava-files');
|
|
return path.join.apply(path, args);
|
|
}
|
|
|
|
test('ignores relativeness in patterns', t => {
|
|
const avaFiles = new AvaFiles({files: ['./foo']});
|
|
const file = avaFiles.files[0];
|
|
|
|
t.is(file, 'foo');
|
|
t.end();
|
|
});
|
|
|
|
test('testMatcher', t => {
|
|
const avaFiles = new AvaFiles({files: ['**/foo*']});
|
|
|
|
function isTest(file) {
|
|
t.true(avaFiles.isTest(file), `${file} should be a test`);
|
|
}
|
|
|
|
function notTest(file) {
|
|
t.false(avaFiles.isTest(file), `${file} should not be a test`);
|
|
}
|
|
|
|
isTest('foo-bar.js');
|
|
isTest('foo.js');
|
|
isTest('foo/blah.js');
|
|
isTest('bar/foo.js');
|
|
isTest('bar/foo-bar/baz/buz.js');
|
|
notTest('bar/baz/buz.js');
|
|
notTest('bar.js');
|
|
notTest('bar/bar.js');
|
|
notTest('_foo-bar.js');
|
|
notTest('foo/_foo-bar.js');
|
|
notTest('foo-bar.txt');
|
|
notTest('node_modules/foo.js');
|
|
notTest('fixtures/foo.js');
|
|
notTest('helpers/foo.js');
|
|
t.end();
|
|
});
|
|
|
|
test('sourceMatcher - defaults', t => {
|
|
const avaFiles = new AvaFiles({files: ['**/foo*']});
|
|
|
|
function isSource(file) {
|
|
t.true(avaFiles.isSource(file), `${file} should be a source`);
|
|
}
|
|
|
|
function notSource(file) {
|
|
t.false(avaFiles.isSource(file), `${file} should not be a source`);
|
|
}
|
|
|
|
isSource('foo-bar.js');
|
|
isSource('foo.js');
|
|
isSource('foo/blah.js');
|
|
isSource('bar/foo.js');
|
|
|
|
isSource('_foo-bar.js');
|
|
isSource('foo/_foo-bar.js');
|
|
isSource('fixtures/foo.js');
|
|
isSource('helpers/foo.js');
|
|
|
|
// TODO: Watcher should probably track any required file that matches the source pattern and has a require extension installed for the given extension.
|
|
notSource('foo-bar.json');
|
|
notSource('foo-bar.coffee');
|
|
|
|
// These seem OK
|
|
isSource('bar.js');
|
|
isSource('bar/bar.js');
|
|
notSource('node_modules/foo.js');
|
|
t.end();
|
|
});
|
|
|
|
test('sourceMatcher - allow matching specific node_modules directories', t => {
|
|
const avaFiles = new AvaFiles({
|
|
files: ['**/foo*'],
|
|
sources: ['node_modules/foo/**']
|
|
});
|
|
|
|
t.true(avaFiles.isSource('node_modules/foo/foo.js'));
|
|
t.false(avaFiles.isSource('node_modules/bar/foo.js'));
|
|
t.end();
|
|
});
|
|
|
|
test('sourceMatcher - providing negation patterns', t => {
|
|
const avaFiles = new AvaFiles({
|
|
files: ['**/foo*'],
|
|
sources: ['!**/bar*']
|
|
});
|
|
|
|
t.false(avaFiles.isSource('node_modules/foo/foo.js'));
|
|
t.false(avaFiles.isSource('bar.js'));
|
|
t.false(avaFiles.isSource('foo/bar.js'));
|
|
t.end();
|
|
});
|
|
|
|
test('findFiles - does not return duplicates of the same file', t => {
|
|
const avaFiles = new AvaFiles({files: ['**/ava-files/no-duplicates/**']});
|
|
|
|
avaFiles.findTestFiles().then(files => {
|
|
t.is(files.length, 2);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('findFiles - honors cwd option', t => {
|
|
const avaFiles = new AvaFiles({
|
|
files: ['**/test/*.js'],
|
|
cwd: fixture('cwd', 'dir-b')
|
|
});
|
|
|
|
avaFiles.findTestFiles().then(files => {
|
|
t.is(files.length, 1);
|
|
t.is(path.basename(files[0]), 'baz.js');
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('findFiles - finds the correct files by default', t => {
|
|
const fixtureDir = fixture('default-patterns');
|
|
process.chdir(fixtureDir);
|
|
|
|
const expected = [
|
|
'sub/directory/__tests__/foo.js',
|
|
'sub/directory/bar.test.js',
|
|
'test-foo.js',
|
|
'test.js',
|
|
'test/baz.js',
|
|
'test/deep/deep.js'
|
|
].map(file => path.join(fixtureDir, file)).sort();
|
|
|
|
const avaFiles = new AvaFiles();
|
|
|
|
avaFiles.findTestFiles().then(files => {
|
|
files.sort();
|
|
t.deepEqual(files, expected);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('findTestHelpers - finds the test helpers', t => {
|
|
const fixtureDir = fixture('default-patterns');
|
|
process.chdir(fixtureDir);
|
|
|
|
const expected = [
|
|
'sub/directory/__tests__/helpers/foo.js',
|
|
'sub/directory/__tests__/_foo.js',
|
|
'test/helpers/test.js',
|
|
'test/_foo-help.js'
|
|
].sort().map(file => path.join(fixtureDir, file));
|
|
|
|
const avaFiles = new AvaFiles();
|
|
|
|
avaFiles.findTestHelpers().then(files => {
|
|
t.deepEqual(files.sort(), expected);
|
|
t.end();
|
|
});
|
|
});
|
|
|