| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- 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;
|