ti-appium
Version:
An Appium wrapper to test Titanium applications
272 lines (239 loc) • 7.65 kB
JavaScript
;
const
mocha = require('./src/mocha.js'),
output = require('./src/output.js');
/**
* @function info
* @desc
* Writes a message with a green info tag (note no new line is passed by
* default).
*
* @param {String} message - A string to be output after the info tag
*/
exports.info = output.info;
/**
* @function step
* @desc
* Writes a message with a green info tag (note no new line is passed by
* default).
*
* @param {String} message - A string to be output after the info tag
*/
exports.step = output.step;
/**
* @function skip
* @desc
* Writes a yellow skip to the console and resolves the promise if passed.
*
* @param {Function} done - Promise callback passed from the function
* @param {Object} value - An object to be returned with resolve
*/
exports.skip = output.skip;
/**
* @function error
* @desc
* Outputs all of a string in red.
*
* @param {String} message - String to be output
*/
exports.error = output.error;
/**
* @function debug
* @desc
* Outputs a message when the debug flag is used.
*
* @param {String} message - String to be output
*/
exports.debug = output.debug;
/**
* @function warn
* @desc
* Outputs a message when the warn flag is used.
*
* @param {String} message - String to be output
*/
exports.warn = output.warn;
/**
* @function banner
* @desc
* Creates a banner and a green info tag around a message.
*
* @param {String} message - String to be enclosed by the banner
*/
exports.banner = output.banner;
/**
* @function finish
* @desc
* Writes a green done to the console and resolves the promise if passed.
*
* @param {Function} done - Promise callback passed from the function
* @param {Object} value - An object to be returned with resolve
*/
exports.finish = output.finish;
/**
* @function appcRun
* @desc
* Build a specified application for a given platform. Also allows users to
* specify their own arguments
*
* @param {String} args - Arguments to be run after calling appc
* @param {function} matcher - A function that can be used to resolve
*/
exports.appcRun = require('./src/appcelerator.js').runner;
/**
* @function buildApp
* @desc
* Build a specified application for a given platform. Also allows users to
* specify their own arguments.
*
* @param {String} dir - The path to the application root
* @param {String} platform - The mobile OS the app is being built for
* @param {Array} args - Any additional arguments to be passed to the command
*/
exports.buildApp = require('./src/appcelerator.js').build;
/**
* @function createAppPath
* @desc
* Generate a path to the built application based upon platform
*
* @param {String} sdk - The version or branch of the SDK to validate
*/
exports.createAppPath = require('./src/appcelerator.js').createAppPath;
/**
* @function parseSDK
* @desc
* Takes in an SDK identifier and attempts to resolve it to the applicable SDK
* version. Can take a release version, pre-release version, or branch
* identifier and attempts to resolve it to an installable identifier.
*
* @param {String} dir - The path to the root of the application project
* @param {String} platform - The relevant mobile OS
* @param {String} appName - The name of the app to identify the app package
*/
exports.parseSDK = require('./src/appcelerator.js').parseSDK;
/**
* Configure the environment with the required SDK and CLI for the Test run
*
* @param {Object} conf - Object for Appc setup
* @param {String} conf.username - Appcelerator user to login with
* @param {String} conf.password - Appcelerator password to authenticate
* @param {String} conf.organisation - The org you want to log in to
* @param {String} conf.cli - The Appcelerator CLI version to use
* @param {String} conf.sdk - The SDK version or branch to build with
* @param {Object} args - Arguments
* @param {Boolean} args.force - Whether or not to force re-install the SDK
* @param {Boolean} args.ti - Whether or not to use the titanium CLI over appc
*/
exports.appcSetup = async (conf, { force = false, ti = false } = {}) => {
const appc = require('./src/appcelerator.js');
try {
let appcSDK;
if (ti) {
appcSDK = await appc.installSDK(conf.sdk, force);
} else {
await appc.login(conf, 'production');
await appc.installCLI(conf);
appcSDK = await appc.installSDK(conf.sdk, force);
}
return appcSDK;
} catch (err) {
throw err;
}
};
/**
* @function stopAppium
* @desc
* Tells the Appium server to shut down
*/
exports.stopAppium = require('./src/appium.js').quitServ;
/**
* @function stopClient
* @desc
* Stops the WD session, but first it closes and removes the app from the
* device in an attempt to save storage space.
*/
exports.stopClient = require('./src/appium.js').stopClient;
/**
* @function startAppium
* @desc
* Launch an Appium server for the mobile testing, as it cannot use the
* desktop session.
*
* @param {String} modRoot - The path to the root of the project being tested
* @param {Object} args - Arguments
* @param {String} args.hostname - The address of the Appium server to connect to
* @param {Int} args.port - The port of the server that the Appium server is running on
*/
exports.startAppium = require('./src/appium.js').runAppium;
/**
* @function startClient
* @desc
* Starts a WD session on the device, using the given capability requirements
* as Appium configuration.
*
* @param {Object} capabilities - Desired capabilities for Appium to run with
*/
exports.startClient = require('./src/appium.js').startClient;
/**
* Launch the Mocha test run on the collected files
*
* @param {String} dir - The directory containing the test files
* @param {String} modRoot - The root of the project being run
* @param {Object} opts - Optional Arguments
* @param {Int} opts.timeout - Timeout threshold for Mocha tests
* @param {Int} opts.slow - Slow threshold for Mocha tests
*/
exports.test = async (dir, modRoot, { timeout = 60000, slow = 30000 } = {}) => {
try {
let tests = await mocha.collectTests(dir);
// Break here if no tests are defined
if (tests.length === 0) {
throw Error('No Tests Found!');
}
const results = await mocha.run(tests, modRoot, { timeout: timeout, slow: slow });
return results;
} catch (err) {
throw err;
}
};
/**
* @function killEmulator
* @desc
* Kill all the Android emulators.
*
* @param {String} deviceName - The name of the Android device to kill
*/
exports.killEmulator = require('./src/device.js').killEmu;
/**
* @function killSimulator
* @desc
* Kill all the iOS simulators using the killall command
*/
exports.killSimulator = require('./src/device.js').killSim;
/**
* Get the boot status of an iOS simulator via its UDID
*
* @param {String} simName - The name of the iOS device to find
* @param {String} simVersion - The version of the iOS device to find
*/
exports.getSimState = require('./src/device.js').getSimState;
/**
* @function getCert
* @desc
* Use ioslib to probe the machine for a particular iOS certificate, then
* return the certificate object.
*
* @param {String} type - The type of operation the cert is defined for
* @param {String} search - Part of the cert name, used to help locate it
*/
exports.getCert = require('./src/device.js').getCert;
/**
* @function getProfile
* @desc
* Use ioslib to probe the machine for a particular iOS provisioning profile,
* then return the provisioning profile object.
*
* @param {String} type - The type of operation the pp is defined for
* @param {String} search - Part of the pp name, used to help locate it
*/
exports.getProfile = require('./src/device.js').getProfile;