Skip to content

Commit

Permalink
fixed a bug with matching files with filter and empty src_folders set…
Browse files Browse the repository at this point in the history
…ting
  • Loading branch information
beatfactor committed May 30, 2020
1 parent 25c26f9 commit b2c2daa
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 37 deletions.
11 changes: 6 additions & 5 deletions lib/runner/folder-walk.js
Expand Up @@ -74,14 +74,15 @@ class Walker {
}

registerMatchers() {
this.tags = new TagsMatcher(this.settings);
const {settings, argv} = this;
this.tags = new TagsMatcher(settings);

if (this.settings.exclude) {
FilenameMatcher.addMatcher(FilenameMatcher.TYPE_EXCLUDE, this.settings);
if (settings.exclude) {
FilenameMatcher.addMatcher(FilenameMatcher.TYPE_EXCLUDE, {settings, argv});
}

if (this.settings.filter) {
FilenameMatcher.addMatcher(FilenameMatcher.TYPE_FILTER, this.settings);
if (settings.filter) {
FilenameMatcher.addMatcher(FilenameMatcher.TYPE_FILTER, {settings, argv});
}
}

Expand Down
47 changes: 19 additions & 28 deletions lib/runner/matchers/filename.js
Expand Up @@ -8,23 +8,31 @@ const MatchRegister = {
};

class MatcherExclude {
constructor(filterPattern, settings) {
constructor({pattern, settings, argv}) {
this.src_folders = settings.src_folders || [];
this.filterPattern = this.adaptFilterPattern(filterPattern);
this.argv = argv;
this.filterPattern = this.adaptFilterPattern(pattern);
}

adaptFilterPattern(filtered) {
if (!Array.isArray(filtered)) {
filtered = [filtered];
adaptFilterPattern(pattern) {
if (!Array.isArray(pattern)) {
pattern = [pattern];
}

return filtered.map(item => {
return pattern.map(item => {
const pathResolved = path.resolve(item);
let srcFolder;

if (this.src_folders.length === 1) {
// in case there is only one src_folder, check if the pattern is specified
// relative to the src_folder
let srcFolder = path.resolve(this.src_folders[0]);
srcFolder = this.src_folders[0];
} else if (this.src_folders.length === 0 && Array.isArray(this.argv._source) && (this.argv._source.length > 0)) {
srcFolder = this.argv._source[0];
}

if (srcFolder) {
srcFolder = path.resolve(srcFolder);

if (pathResolved.startsWith(srcFolder)) {
return pathResolved;
Expand All @@ -51,11 +59,11 @@ class FilenameMatcher {
return 'filter';
}

static create(type, filterPattern, settings) {
static create({type, pattern, settings, argv}) {
switch (type) {
case FilenameMatcher.TYPE_EXCLUDE:
case FilenameMatcher.TYPE_FILTER:
return new MatcherExclude(filterPattern, settings);
return new MatcherExclude({pattern, settings, argv});
}
}

Expand All @@ -79,25 +87,8 @@ class FilenameMatcher {

}

static addMatcher(type, settings) {
let matcher = FilenameMatcher.create(type, settings[type], settings);

FilenameMatcher.register = {
type: type,
value: matcher
};
}

static set register(val) {
if (!val.type || !val.value) {
throw new Error('Supplied matcher object should contain both "type" and "value" keys.');
}

if (MatchRegister[val.type] === undefined) {
throw new Error('Unknown matcher: ' + val.type);
}

MatchRegister[val.type] = val.value;
static addMatcher(type, {settings, argv}) {
MatchRegister[type] = FilenameMatcher.create({type, pattern: settings[type], argv, settings});
}

/**
Expand Down
2 changes: 1 addition & 1 deletion test/src/element/testPageObjectElementSelectors.js
Expand Up @@ -298,7 +298,7 @@ describe('test page object element selectors', function() {
page.waitForElementPresent('@loginAsString', 'element found');

const client = Nightwatch.client();
client.session.commandQueue.tree.on('asynctree:finished', function(tree) {
client.session.commandQueue.tree.once('asynctree:finished', function(tree) {
const command = tree.currentNode.childNodes[0];
try {
strictEqual(command.args.length, 2);
Expand Down
41 changes: 38 additions & 3 deletions test/src/runner/testRunWithTags.js
Expand Up @@ -101,8 +101,8 @@ describe('testRunWithTags', function() {
assert.strictEqual(Object.keys(results.modules).length, 1);
}
},
filter: '**/tags/*',
tag_filter: ['other'],
filter: 'tags/*',
tag_filter: ['login'],
output_folder: false,
};

Expand Down Expand Up @@ -136,6 +136,38 @@ describe('testRunWithTags', function() {
}, settings);
});

it('testRun with filter and skiptags no matches', function() {
let testsPath = path.join(__dirname, '../../sampletests');

let settings = {
selenium: {
port: 10195,
version2: true,
start_process: true
},
silent: true,
output: false,
globals: {
reporter(results) {
}
},
filter: '**/tags/*',
output_folder: false,
};

return NightwatchClient.runTests({
_source: [testsPath],
skiptags: ['logout', 'login']
}, settings).catch(err => {
return err;
}).then(err => {
assert.ok(err instanceof Error);
assert.ok(err.message.includes('No tests defined! using source folder'), err.message + '\n' + err.stack);
assert.ok(err.detailedErr.includes('- using path filter: **/tags/*'));
assert.ok(err.detailedErr.includes('- using skiptags filter: logout,login'));
});
});

it('testRunWithTagsAndSkipTags', function() {
let testsPath = path.join(__dirname, '../../sampletests');

Expand Down Expand Up @@ -183,9 +215,12 @@ describe('testRunWithTags', function() {
_source: [testsPath],
skiptags: ['login']
}, settings).catch(err => {
return err;
}).then(err => {
assert.ok(err instanceof Error);
assert.ok(err.message.includes('No tests defined! using source folder'), err.message + '\n' + err.stack);
assert.ok(err.detailedErr.includes('- using tags filter: other'));
assert.ok(err.detailedErr.includes('- using skiptags filter: login'));
});
})
});
});

0 comments on commit b2c2daa

Please sign in to comment.