refactor app directory structure and add tests
This commit is contained in:
205
tests/node_modules/nightwatch/lib/runner/module.js
generated
vendored
Normal file
205
tests/node_modules/nightwatch/lib/runner/module.js
generated
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
var path = require('path');
|
||||
var Utils = require('../util/utils.js');
|
||||
|
||||
function Module(modulePath, opts, addtOpts) {
|
||||
|
||||
try {
|
||||
this['@module'] = require(modulePath);
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
if (!this['@module']) {
|
||||
throw new Error('Invalid test suite provided.');
|
||||
}
|
||||
|
||||
var currentTestcase = addtOpts && addtOpts.testcase;
|
||||
|
||||
this['@testSuiteName'] = null;
|
||||
this['@attributes'] = {
|
||||
'@endSessionOnFail' : true,
|
||||
'@disabled' : false,
|
||||
'@desiredCapabilities' : {},
|
||||
'@tags' : []
|
||||
};
|
||||
|
||||
this.groupName = '';
|
||||
this.setTestSuiteName();
|
||||
|
||||
this.keys = this.getKeys(currentTestcase);
|
||||
if (currentTestcase && this.keys.length === 0) {
|
||||
throw new Error('Error: "' + currentTestcase + '" is not a valid testcase in the current test suite.');
|
||||
}
|
||||
this.allKeys = this.keys.slice();
|
||||
this.filePath = modulePath;
|
||||
|
||||
this.modulePathParts = this.filePath.split(path.sep);
|
||||
this.moduleName = this.modulePathParts.pop();
|
||||
this.options = opts;
|
||||
}
|
||||
|
||||
Module.prototype.get = function(key) {
|
||||
if (!key) {
|
||||
return this['@module'];
|
||||
}
|
||||
return this['@module'][key];
|
||||
};
|
||||
|
||||
Module.prototype.set = function(key, value) {
|
||||
if (!key || !value) {
|
||||
return this;
|
||||
}
|
||||
this['@module'][key] = value;
|
||||
return this;
|
||||
};
|
||||
|
||||
Module.prototype.getName = function() {
|
||||
return this.moduleName;
|
||||
};
|
||||
|
||||
Module.prototype.call = function(fnName /* arg1, arg2 ...*/) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
return this['@module'][fnName].apply(this['@module'], args);
|
||||
};
|
||||
|
||||
Module.prototype.callAsync = function(fnName, api, done, expectedArgs) {
|
||||
expectedArgs = expectedArgs || 2;
|
||||
var fnAsync = Utils.makeFnAsync(expectedArgs, this['@module'][fnName], this['@module']);
|
||||
fnAsync.name = fnName;
|
||||
|
||||
var args = [done];
|
||||
if (expectedArgs == 2) {
|
||||
args.unshift(api);
|
||||
}
|
||||
|
||||
return fnAsync.apply(this['@module'], args);
|
||||
};
|
||||
|
||||
Module.prototype.setReportKey = function(fullPaths, srcFolders) {
|
||||
var diffInFolder = '', folder, parentFolder = '';
|
||||
var filePath = this.modulePathParts.join(path.sep);
|
||||
if (srcFolders) {
|
||||
for (var i = 0; i < srcFolders.length; i++) {
|
||||
folder = path.resolve(srcFolders[i]);
|
||||
if (fullPaths.length > 1) {
|
||||
parentFolder = folder.split(path.sep).pop();
|
||||
}
|
||||
if (filePath.indexOf(folder) === 0) {
|
||||
diffInFolder = filePath.substring(folder.length + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (diffInFolder.substr(-1) == path.sep) {
|
||||
diffInFolder = diffInFolder.substring(0, diffInFolder.length-1);
|
||||
}
|
||||
|
||||
this.groupName = diffInFolder.split(path.sep).pop(); // in case we're in a sub-folder
|
||||
this.moduleKey = path.join(parentFolder, diffInFolder, this.moduleName);
|
||||
return this;
|
||||
};
|
||||
|
||||
Module.prototype.getKeys = function(currentTestcase) {
|
||||
return Object.keys(this['@module']).filter(function(element) {
|
||||
if (!this['@module'][element]) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var isFunction = typeof this['@module'][element] == 'function';
|
||||
if (currentTestcase) {
|
||||
return isFunction && (element === currentTestcase);
|
||||
}
|
||||
return isFunction;
|
||||
}, this);
|
||||
};
|
||||
|
||||
Module.prototype.removeKey = function(key) {
|
||||
var self = this;
|
||||
if (Array.isArray(key)) {
|
||||
key.forEach(function(item) {
|
||||
self.removeKey(item);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var index = this.keys.indexOf(key);
|
||||
if (index > -1) {
|
||||
this.keys.splice(index, 1);
|
||||
}
|
||||
};
|
||||
|
||||
Module.prototype.setTestSuiteName = function() {
|
||||
var module = this['@module'];
|
||||
|
||||
var keys = Object.keys(module);
|
||||
var suiteName;
|
||||
|
||||
var hasSubSuite = keys.some(function(item) {
|
||||
var isAttribute = this.isAttribute(item);
|
||||
if (isAttribute) {
|
||||
var attrName = Module.geAttributeName(item);
|
||||
this['@attributes'][attrName] = module[item];
|
||||
} else if (typeof module[item] == 'object' && module[item]) {
|
||||
suiteName = item;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}, this);
|
||||
|
||||
if (hasSubSuite && suiteName) {
|
||||
var sections = [];
|
||||
if (this['@testSuiteName']) {
|
||||
sections.push(this['@testSuiteName']);
|
||||
}
|
||||
sections.push(suiteName);
|
||||
this['@testSuiteName'] = sections.join(' :: ');
|
||||
this['@module'] = module[suiteName];
|
||||
|
||||
return this.setTestSuiteName();
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Module.geAttributeName = function(item) {
|
||||
return (item.charAt(0) == '@' ? '' : '@') + item;
|
||||
};
|
||||
|
||||
Module.prototype.isAttribute = function(item) {
|
||||
var attrName = Module.geAttributeName(item);
|
||||
return (attrName in this['@attributes']) && (typeof module[item] != 'function');
|
||||
};
|
||||
|
||||
Module.prototype.getTestSuiteName = function() {
|
||||
return this['@testSuiteName'];
|
||||
};
|
||||
|
||||
Module.prototype.getNextKey = function() {
|
||||
if (this.keys.length) {
|
||||
return this.keys.shift();
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Module.prototype.resetKeys = function() {
|
||||
this.keys = this.allKeys.slice();
|
||||
};
|
||||
|
||||
Module.prototype.endSessionOnFail = function() {
|
||||
return this['@attributes']['@endSessionOnFail'];
|
||||
};
|
||||
|
||||
Module.prototype.isDisabled = function() {
|
||||
return this['@attributes']['@disabled'];
|
||||
};
|
||||
|
||||
Module.prototype.desiredCapabilities = function(capability) {
|
||||
if (capability && (capability in this['@attributes']['@desiredCapabilities'])) {
|
||||
return this['@attributes']['@desiredCapabilities'][capability];
|
||||
}
|
||||
|
||||
return this['@attributes']['@desiredCapabilities'];
|
||||
};
|
||||
|
||||
module.exports = Module;
|
Reference in New Issue
Block a user