Merge pull request #8 from jpchase/CB-8295
CB-8295 Enable CSP for mobile spec
diff --git a/www/assets/main.css b/www/assets/main.css
index fe47a1e..7665448 100644
--- a/www/assets/main.css
+++ b/www/assets/main.css
@@ -123,11 +123,10 @@
}
#test-enablers-container {
- margin: 10px 0px;
+ margin: 10px 5px;
}
#test-expander {
- margin: 5px;
text-decoration: underline;
}
diff --git a/www/main.js b/www/main.js
index a2412b0..f83b7b2 100644
--- a/www/main.js
+++ b/www/main.js
@@ -21,8 +21,6 @@
'use strict';
-var autoFirstTime = true;
-
/******************************************************************************/
function getMode(callback) {
@@ -153,16 +151,10 @@
/******************************************************************************/
function setupAutoTestsEnablers(cdvtests) {
-
var enablerList = createEnablerList();
// Iterate over all the registered test modules
- Object.keys(cdvtests.tests).forEach(function(api) {
- var testModule = cdvtests.tests[api];
-
- if (!testModule.hasOwnProperty('defineAutoTests'))
- return;
-
+ iterateAutoTests(cdvtests, function(api, testModule) {
// For "standard" plugins remove the common/repetitive bits of
// the api key, for use as the title. For third-party plugins, the full
// api will be used as the title
@@ -170,6 +162,8 @@
createEnablerCheckbox(api, title, testModule.getEnabled(), enablerList.id, toggleTestHandler);
});
+
+ updateEnabledTestCount();
}
/******************************************************************************/
@@ -179,63 +173,87 @@
var enablerContainer = document.createElement('div');
enablerContainer.id = 'test-enablers-container';
-
+
+ // Create header to show count of enabled/total tests
+ var header = document.createElement('h3');
+ header.id = 'tests-enabled';
+
+ // Create widget to show/hide list
var expander = document.createElement('span');
expander.id = 'test-expander';
expander.innerText = 'Show/hide tests to be run';
expander.onclick = toggleEnablerVisibility;
+ // Create list to contain checkboxes for each test
var enablerList = document.createElement('div');
enablerList.id = "test-list";
-
+
+ // Create select/deselect all buttons (in button bar)
var checkButtonBar = document.createElement('ul');
checkButtonBar.classList.add('topcoat-button-bar');
-
- for (var i = 0; i < 2; i++)
- {
+
+ function createSelectToggleButton(title, selected) {
var barItem = document.createElement('li');
barItem.classList.add('topcoat-button-bar__item');
-
+
var link = document.createElement('a');
- var selected = (i === 0);
link.classList.add('topcoat-button-bar__button');
- link.innerText = selected ? 'Check all' : 'Uncheck all';
+ link.innerText = title;
link.href = null;
- link.onclick = (function(select) {
- return function(e) {
- e.preventDefault();
- toggleSelected(enablerList.id, select);
- return false;
- };
- })(selected);
+ link.onclick = function(e) {
+ e.preventDefault();
+ toggleSelected(enablerList.id, selected);
+ return false;
+ };
barItem.appendChild(link);
checkButtonBar.appendChild(barItem);
- }
-
+ };
+ createSelectToggleButton('Check all', true);
+ createSelectToggleButton('Uncheck all', false);
enablerList.appendChild(checkButtonBar);
-
+
+ enablerContainer.appendChild(header);
enablerContainer.appendChild(expander);
enablerContainer.appendChild(enablerList);
-
+
buttons.appendChild(enablerContainer);
-
+
return enablerList;
}
/******************************************************************************/
-function toggleSelected(containerId, newCheckedValue) {
- var container = document.getElementById(containerId);
-
- var cbs = container.getElementsByTagName('input');
-
- for (var i = 0; i < cbs.length; i++) {
- if(cbs[i].type === 'checkbox') {
- cbs[i].checked = newCheckedValue;
- toggleTestEnabled(cbs[i]);
+function updateEnabledTestCount() {
+ var enabledLabel = document.getElementById('tests-enabled');
+
+ // Determine how many tests are currently enabled
+ var cdvtests = cordova.require('org.apache.cordova.test-framework.cdvtests');
+ var total = 0;
+ var enabled = 0;
+ iterateAutoTests(cdvtests, function(api, testModule) {
+ total++;
+ if (testModule.getEnabled()) {
+ enabled++;
}
- }
+ });
+
+ if (enabled == total) {
+ enabledLabel.innerText = 'Running All Tests.';
+ } else {
+ enabledLabel.innerText = 'Running ' + enabled + ' of ' + total + ' Tests.';
+ }
+}
+
+/******************************************************************************/
+
+function toggleSelected(containerId, newCheckedValue) {
+ [].forEach.call(document.getElementById(containerId).getElementsByTagName('input'), function(input) {
+ if (input.type !== 'checkbox') return;
+ input.checked = newCheckedValue;
+ toggleTestEnabled(input);
+ });
+ updateEnabledTestCount();
}
/******************************************************************************/
@@ -256,7 +274,7 @@
var label = document.createElement('label');
label.classList.add('topcoat-checkbox');
-
+
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.value = api;
@@ -270,10 +288,10 @@
var div = document.createElement('div');
div.classList.add('topcoat-checkbox__checkmark');
-
+
var text = document.createElement('span');
text.innerText = title;
-
+
label.appendChild(checkbox);
label.appendChild(div);
label.appendChild(text);
@@ -285,8 +303,9 @@
function toggleTestHandler(event) {
var checkbox = event.target;
-
+
toggleTestEnabled(checkbox);
+ updateEnabledTestCount();
}
/******************************************************************************/
@@ -298,6 +317,18 @@
/******************************************************************************/
+function iterateAutoTests(cdvtests, callback) {
+ Object.keys(cdvtests.tests).forEach(function(api) {
+ var testModule = cdvtests.tests[api];
+ if (!testModule.hasOwnProperty('defineAutoTests')) {
+ return;
+ }
+ callback(api, testModule);
+ });
+}
+
+/******************************************************************************/
+
function runAutoTests() {
setTitle('Auto Tests');
@@ -308,20 +339,12 @@
var cdvtests = cordova.require('org.apache.cordova.test-framework.cdvtests');
cdvtests.init();
setupAutoTestsEnablers(cdvtests);
-
+
cdvtests.defineAutoTests();
// Run the tests!
var jasmineEnv = window.jasmine.getEnv();
-
- if (autoFirstTime) {
- autoFirstTime = false;
- // Uncomment to skip running of tests on initial load
- // - If you're testing a specific plugin, you probably want to uncomment,
- // so you don't have to wait for all the tests to run every time
- //return;
- }
-
+
jasmineEnv.execute();
}