From 86cc778c4ae70e61d21b4f97ef840b67d5fe12b4 Mon Sep 17 00:00:00 2001 From: Dave Alden Date: Fri, 5 Oct 2018 21:23:56 +0100 Subject: [PATCH] Fix tests so they auto-start when run via cordova-paramedic --- tests/tests.js | 225 +++++++++++++++++++++++-------------------------- 1 file changed, 107 insertions(+), 118 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 69ff46cad..3ef8ca1df 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -19,7 +19,7 @@ * */ -/* global MSApp, alert */ +/* global MSApp */ var cordova = require('cordova'); var isWindows = cordova.platformId === 'windows'; @@ -33,128 +33,126 @@ if (isWindows && navigator && navigator.notification && navigator.notification.a } exports.defineAutoTests = function () { - var createTests = function (platformOpts) { platformOpts = platformOpts || ''; - describe('cordova.InAppBrowser', function () { + describe('cordova.InAppBrowser', function () { - it('inappbrowser.spec.1 should exist', function () { - expect(cordova.InAppBrowser).toBeDefined(); - }); + it('inappbrowser.spec.1 should exist', function () { + expect(cordova.InAppBrowser).toBeDefined(); + }); - it('inappbrowser.spec.2 should contain open function', function () { - expect(cordova.InAppBrowser.open).toBeDefined(); - expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function)); - }); + it('inappbrowser.spec.2 should contain open function', function () { + expect(cordova.InAppBrowser.open).toBeDefined(); + expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function)); }); + }); - describe('open method', function () { + describe('open method', function () { - if (cordova.platformId === 'osx') { - pending('Open method not fully supported on OSX.'); - return; - } + if (cordova.platformId === 'osx') { + pending('Open method not fully supported on OSX.'); + return; + } - var iabInstance; - var originalTimeout; - var url = 'https://dist.apache.org/repos/dist/dev/cordova/'; - var badUrl = 'http://bad-uri/'; + var iabInstance; + var originalTimeout; + var url = 'https://dist.apache.org/repos/dist/dev/cordova/'; + var badUrl = 'http://bad-uri/'; - beforeEach(function () { - // increase timeout to ensure test url could be loaded within test time - originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; - jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; + beforeEach(function () { + // increase timeout to ensure test url could be loaded within test time + originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; - iabInstance = null; - }); - - afterEach(function (done) { - // restore original timeout - jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + iabInstance = null; + }); - if (iabInstance !== null && iabInstance.close) { - iabInstance.close(); - } - iabInstance = null; - // add some extra time so that iab dialog is closed - setTimeout(done, 2000); - }); + afterEach(function (done) { + // restore original timeout + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; - function verifyEvent (evt, type) { - expect(evt).toBeDefined(); - expect(evt.type).toEqual(type); - // `exit` event does not have url field, browser returns null url for CORS requests - if (type !== 'exit' && !isBrowser) { - expect(evt.url).toEqual(url); - } + if (iabInstance !== null && iabInstance.close) { + iabInstance.close(); } + iabInstance = null; + // add some extra time so that iab dialog is closed + setTimeout(done, 2000); + }); - function verifyLoadErrorEvent (evt) { - expect(evt).toBeDefined(); - expect(evt.type).toEqual('loaderror'); - expect(evt.url).toEqual(badUrl); - expect(evt.code).toEqual(jasmine.any(Number)); - expect(evt.message).toEqual(jasmine.any(String)); + function verifyEvent (evt, type) { + expect(evt).toBeDefined(); + expect(evt.type).toEqual(type); + // `exit` event does not have url field, browser returns null url for CORS requests + if (type !== 'exit' && !isBrowser) { + expect(evt.url).toEqual(url); } + } + + function verifyLoadErrorEvent (evt) { + expect(evt).toBeDefined(); + expect(evt.type).toEqual('loaderror'); + expect(evt.url).toEqual(badUrl); + expect(evt.code).toEqual(jasmine.any(Number)); + expect(evt.message).toEqual(jasmine.any(String)); + } - it('inappbrowser.spec.3 should return InAppBrowser instance with required methods', function () { + it('inappbrowser.spec.3 should return InAppBrowser instance with required methods', function () { iabInstance = cordova.InAppBrowser.open(url, '_blank', platformOpts); - expect(iabInstance).toBeDefined(); + expect(iabInstance).toBeDefined(); - expect(iabInstance.addEventListener).toEqual(jasmine.any(Function)); - expect(iabInstance.removeEventListener).toEqual(jasmine.any(Function)); - expect(iabInstance.close).toEqual(jasmine.any(Function)); - expect(iabInstance.show).toEqual(jasmine.any(Function)); - expect(iabInstance.hide).toEqual(jasmine.any(Function)); - expect(iabInstance.executeScript).toEqual(jasmine.any(Function)); - expect(iabInstance.insertCSS).toEqual(jasmine.any(Function)); - }); + expect(iabInstance.addEventListener).toEqual(jasmine.any(Function)); + expect(iabInstance.removeEventListener).toEqual(jasmine.any(Function)); + expect(iabInstance.close).toEqual(jasmine.any(Function)); + expect(iabInstance.show).toEqual(jasmine.any(Function)); + expect(iabInstance.hide).toEqual(jasmine.any(Function)); + expect(iabInstance.executeScript).toEqual(jasmine.any(Function)); + expect(iabInstance.insertCSS).toEqual(jasmine.any(Function)); + }); - it('inappbrowser.spec.4 should support loadstart and loadstop events', function (done) { - var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) { - verifyEvent(evt, 'loadstart'); - }); + it('inappbrowser.spec.4 should support loadstart and loadstop events', function (done) { + var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) { + verifyEvent(evt, 'loadstart'); + }); iabInstance = cordova.InAppBrowser.open(url, '_blank', platformOpts); - iabInstance.addEventListener('loadstart', onLoadStart); - iabInstance.addEventListener('loadstop', function (evt) { - verifyEvent(evt, 'loadstop'); - if (!isBrowser) { - // according to documentation, "loadstart" event is not supported on browser - // https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1 - expect(onLoadStart).toHaveBeenCalled(); - } - done(); - }); + iabInstance.addEventListener('loadstart', onLoadStart); + iabInstance.addEventListener('loadstop', function (evt) { + verifyEvent(evt, 'loadstop'); + if (!isBrowser) { + // according to documentation, "loadstart" event is not supported on browser + // https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1 + expect(onLoadStart).toHaveBeenCalled(); + } + done(); }); + }); - it('inappbrowser.spec.5 should support exit event', function (done) { + it('inappbrowser.spec.5 should support exit event', function (done) { iabInstance = cordova.InAppBrowser.open(url, '_blank', platformOpts); - iabInstance.addEventListener('exit', function (evt) { - verifyEvent(evt, 'exit'); - done(); - }); - iabInstance.close(); - iabInstance = null; + iabInstance.addEventListener('exit', function (evt) { + verifyEvent(evt, 'exit'); + done(); }); + iabInstance.close(); + iabInstance = null; + }); - it('inappbrowser.spec.6 should support loaderror event', function (done) { - if (isBrowser) { - // according to documentation, "loaderror" event is not supported on browser - // https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1 - pending('Browser platform doesn\'t support loaderror event'); - } + it('inappbrowser.spec.6 should support loaderror event', function (done) { + if (isBrowser) { + // according to documentation, "loaderror" event is not supported on browser + // https://github.com/apache/cordova-plugin-inappbrowser#browser-quirks-1 + pending('Browser platform doesn\'t support loaderror event'); + } iabInstance = cordova.InAppBrowser.open(badUrl, '_blank', platformOpts); - iabInstance.addEventListener('loaderror', function (evt) { - verifyLoadErrorEvent(evt); - done(); - }); + iabInstance.addEventListener('loaderror', function (evt) { + verifyLoadErrorEvent(evt); + done(); }); }); + }); }; - if (isIos) { createTests('usewkwebview=no'); createTests('usewkwebview=yes'); @@ -165,6 +163,15 @@ exports.defineAutoTests = function () { exports.defineManualTests = function (contentEl, createActionButton) { + var platformOpts = ''; + var platform_info = ''; + if (isIos) { + platformOpts = 'usewkwebview=no'; + platform_info = '

Webview

' + + '

Use this button to toggle the Webview implementation.

' + + '
'; + } + function doOpen (url, target, params, numExpectedRedirects, useWindowOpen) { numExpectedRedirects = numExpectedRedirects || 0; useWindowOpen = useWindowOpen || false; @@ -173,7 +180,6 @@ exports.defineManualTests = function (contentEl, createActionButton) { var counts; var lastLoadStartURL; var wasReset = false; - function reset () { counts = { 'loaderror': 0, @@ -183,7 +189,6 @@ exports.defineManualTests = function (contentEl, createActionButton) { }; lastLoadStartURL = ''; } - reset(); var iab; @@ -277,11 +282,11 @@ exports.defineManualTests = function (contentEl, createActionButton) { }; if (cssUrl) { iab.addEventListener('loadstop', function (event) { - iab.insertCSS({file: cssUrl}, useCallback && callback); + iab.insertCSS({ file: cssUrl }, useCallback && callback); }); } else { iab.addEventListener('loadstop', function (event) { - iab.insertCSS({code: '#style-update-literal { \ndisplay: block !important; \n}'}, + iab.insertCSS({ code: '#style-update-literal { \ndisplay: block !important; \n}' }, useCallback && callback); }); } @@ -291,7 +296,7 @@ exports.defineManualTests = function (contentEl, createActionButton) { var iab = doOpen(url, '_blank', 'location=yes'); if (jsUrl) { iab.addEventListener('loadstop', function (event) { - iab.executeScript({file: jsUrl}, useCallback && function (results) { + iab.executeScript({ file: jsUrl }, useCallback && function (results) { if (results && results.length === 0) { alert('Results verified'); // eslint-disable-line no-undef } else { @@ -303,11 +308,11 @@ exports.defineManualTests = function (contentEl, createActionButton) { } else { iab.addEventListener('loadstop', function (event) { var code = '(function(){\n' + - ' var header = document.getElementById("header");\n' + - ' header.innerHTML = "Script literal successfully injected";\n' + - ' return "abc";\n' + - '})()'; - iab.executeScript({code: code}, useCallback && function (results) { + ' var header = document.getElementById("header");\n' + + ' header.innerHTML = "Script literal successfully injected";\n' + + ' return "abc";\n' + + '})()'; + iab.executeScript({ code: code }, useCallback && function (results) { if (results && results.length === 1 && results[0] === 'abc') { alert('Results verified'); // eslint-disable-line no-undef } else { @@ -318,11 +323,8 @@ exports.defineManualTests = function (contentEl, createActionButton) { }); } } - var hiddenwnd = null; - var loadlistener = function (event) { - alert('background window loaded '); - }; // eslint-disable-line no-undef + var loadlistener = function (event) { alert('background window loaded '); }; // eslint-disable-line no-undef function openHidden (url, startHidden) { var shopt = (startHidden) ? 'hidden=yes' : ''; if (platformOpts) { @@ -335,13 +337,11 @@ exports.defineManualTests = function (contentEl, createActionButton) { } if (startHidden) hiddenwnd.addEventListener('loadstop', loadlistener); } - function showHidden () { if (hiddenwnd) { hiddenwnd.show(); } } - function closeHidden () { if (hiddenwnd) { hiddenwnd.removeEventListener('loadstop', loadlistener); @@ -358,15 +358,6 @@ exports.defineManualTests = function (contentEl, createActionButton) { '

User-Agent: ' + ''; - var platformOpts = ''; - var platform_info = ''; - if (isIos) { - platformOpts = 'usewkwebview=no'; - platform_info = '

Webview

' + - '

Use this button to toggle the Webview implementation.

' + - '
'; - } - var local_tests = '

Local URL

' + '
' + 'Expected result: opens successfully in CordovaWebView.' + @@ -523,13 +514,11 @@ exports.defineManualTests = function (contentEl, createActionButton) { var injectjs = isWindows ? basePath + 'inject.js' : 'inject.js'; var injectcss = isWindows ? basePath + 'inject.css' : 'inject.css'; var videohtml = basePath + 'video.html'; - if (isIos) { createActionButton('Webview=UIWebView', function () { var webviewOption = 'usewkwebview='; var webviewToggle = document.getElementById('webviewToggle'); var button = webviewToggle.getElementsByClassName('topcoat-button')[0]; - if (platformOpts === webviewOption + 'yes') { platformOpts = webviewOption + 'no'; button.textContent = 'Webview=UIWebView';