www/tests.js (86 lines of code) (raw):

/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ 'use strict'; exports.tests = Object.create(null); function TestModule (api) { var name = api; var enabled = true; var enabledPref = localStorage.getItem('cordova-tests-enabled-' + name); if (enabledPref) { enabled = (enabledPref === true.toString()); } this.getEnabled = function () { return enabled; }; this.setEnabled = function (isEnabled) { enabled = isEnabled; localStorage.setItem('cordova-tests-enabled-' + name, enabled); }; } function getTestsObject (api) { exports.tests[api] = exports.tests[api] || new TestModule(api); return exports.tests[api]; } function requireAllTestModules () { // This finds all js-modules named "tests" (regardless of plugins they came from) var test_modules = cordova.require('cordova/plugin_list') .map(function (jsmodule) { return jsmodule.id; }) .filter(function (id) { return /\.tests$/.test(id); }); // Map auto / manual test definitions for each, but without actually running the handlers test_modules.forEach(function (id) { try { var plugintests = cordova.require(id); if (Object.prototype.hasOwnProperty.call(plugintests, 'defineAutoTests')) { getTestsObject(id).defineAutoTests = function () { describe(id + ' >>', plugintests.defineAutoTests.bind(plugintests)); }; } if (Object.prototype.hasOwnProperty.call(plugintests, 'defineManualTests')) { getTestsObject(id).defineManualTests = plugintests.defineManualTests.bind(plugintests); } } catch (ex) { console.warn('Failed to load tests: ', id); } }); } function createJasmineInterface () { var jasmine_helpers = require('cordova-plugin-test-framework.jasmine_helpers'); var jasmineInterface = jasmine_helpers.setUpJasmine(); return jasmineInterface; } function attachJasmineInterfaceToGlobal () { var jasmineInterface = createJasmineInterface(); for (var property in jasmineInterface) { window[property] = jasmineInterface[property]; } } function detachJasmineInterfaceFromGlobal () { var jasmineInterface = createJasmineInterface(); for (var property in jasmineInterface) { delete window[property]; } } exports.defineAutoTests = function () { requireAllTestModules(); attachJasmineInterfaceToGlobal(); Object.keys(exports.tests).forEach(function (key) { if (!exports.tests[key].getEnabled()) { return; } if (!Object.prototype.hasOwnProperty.call(exports.tests[key], 'defineAutoTests')) { return; } exports.tests[key].defineAutoTests(); }); }; exports.defineManualTests = function (contentEl, beforeEach, createActionButton) { requireAllTestModules(); detachJasmineInterfaceFromGlobal(); Object.keys(exports.tests).forEach(function (key) { if (!exports.tests[key].getEnabled()) { return; } if (!Object.prototype.hasOwnProperty.call(exports.tests[key], 'defineManualTests')) { return; } createActionButton(key, function () { beforeEach(key); exports.tests[key].defineManualTests(contentEl, createActionButton); }); }); }; exports.init = function () { requireAllTestModules(); };