Skip to content

Commit

Permalink
Fix tests so they auto-start when run via cordova-paramedic
Browse files Browse the repository at this point in the history
  • Loading branch information
dpa99c committed Oct 5, 2018
1 parent cbfa195 commit 86cc778
Showing 1 changed file with 107 additions and 118 deletions.
225 changes: 107 additions & 118 deletions tests/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
*
*/

/* global MSApp, alert */
/* global MSApp */

var cordova = require('cordova');
var isWindows = cordova.platformId === 'windows';
Expand All @@ -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');
Expand All @@ -165,6 +163,15 @@ exports.defineAutoTests = function () {

exports.defineManualTests = function (contentEl, createActionButton) {

var platformOpts = '';
var platform_info = '';
if (isIos) {
platformOpts = 'usewkwebview=no';
platform_info = '<h1>Webview</h1>' +
'<p>Use this button to toggle the Webview implementation.</p>' +
'<div id="webviewToggle"></div>';
}

function doOpen (url, target, params, numExpectedRedirects, useWindowOpen) {
numExpectedRedirects = numExpectedRedirects || 0;
useWindowOpen = useWindowOpen || false;
Expand All @@ -173,7 +180,6 @@ exports.defineManualTests = function (contentEl, createActionButton) {
var counts;
var lastLoadStartURL;
var wasReset = false;

function reset () {
counts = {
'loaderror': 0,
Expand All @@ -183,7 +189,6 @@ exports.defineManualTests = function (contentEl, createActionButton) {
};
lastLoadStartURL = '';
}

reset();

var iab;
Expand Down Expand Up @@ -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);
});
}
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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) {
Expand All @@ -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);
Expand All @@ -358,15 +358,6 @@ exports.defineManualTests = function (contentEl, createActionButton) {
'<h4>User-Agent: <span id="user-agent"> </span></hr>' +
'</div>';

var platformOpts = '';
var platform_info = '';
if (isIos) {
platformOpts = 'usewkwebview=no';
platform_info = '<h1>Webview</h1>' +
'<p>Use this button to toggle the Webview implementation.</p>' +
'<div id="webviewToggle"></div>';
}

var local_tests = '<h1>Local URL</h1>' +
'<div id="openLocal"></div>' +
'Expected result: opens successfully in CordovaWebView.' +
Expand Down Expand Up @@ -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';
Expand Down

0 comments on commit 86cc778

Please sign in to comment.