/* | |
* 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. | |
* | |
*/ | |
exports.defineAutoTests = function () { | |
var isAndroid = (cordova.platformId === "android"); | |
describe('Whitelist API (cordova.whitelist)', function () { | |
it("should exist", function () { | |
expect(cordova.whitelist).toBeDefined(); | |
}); | |
describe("Match function (cordova.whitelist.match) that checks URLs against patterns", function () { | |
function expectMatchWithResult(result) { | |
return (function (url, patterns, description) { | |
description = description || ((result ? "should accept " : "should reject ") + url + " for " + JSON.stringify(patterns)); | |
this.result = result; | |
describe("Match function", function () { | |
if (!isAndroid) { | |
pending("Whitelist Plugin only exists for Android"); | |
} | |
// Timeout is 7.5 seconds to allow physical devices enough | |
// time to query the response. This is important for some | |
// Android devices. | |
var originalTimeout, | |
cb; | |
beforeEach(function (done) { | |
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; | |
jasmine.DEFAULT_TIMEOUT_INTERVAL = 7500; | |
cb = jasmine.createSpy('spy').and.callFake(function () { | |
done(); | |
}); | |
cordova.whitelist.match(url, patterns, cb); | |
}); | |
afterEach(function () { | |
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; | |
}); | |
it(description, function () { | |
expect(cb).toHaveBeenCalledWith(result); | |
}); | |
}); | |
}); | |
} | |
var itShouldMatch = expectMatchWithResult(true); | |
var itShouldNotMatch = expectMatchWithResult(false); | |
it("should exist", function () { | |
expect(cordova.whitelist.match).toBeDefined(); | |
expect(typeof cordova.whitelist.match).toBe("function"); | |
}); | |
itShouldMatch('http://www.apache.org/', ['*'], "should accept any domain for *"); | |
itShouldNotMatch('http://www.apache.org/', [], "should not accept any domain for []"); | |
itShouldMatch('http://apache.org/', ['http://*.apache.org']); | |
itShouldMatch('http://www.apache.org/', ['http://*.apache.org']); | |
itShouldMatch('http://www.apache.org/some/path', ['http://*.apache.org']); | |
itShouldMatch('http://some.domain.under.apache.org/', ['http://*.apache.org']); | |
itShouldMatch('http://user:pass@apache.org/', ['http://*.apache.org']); | |
itShouldMatch('http://user:pass@www.apache.org/', ['http://*.apache.org']); | |
itShouldMatch('http://www.apache.org/?some=params', ['http://*.apache.org']); | |
itShouldNotMatch('http://apache.com/', ['http://*.apache.org']); | |
itShouldNotMatch('http://www.evil.com/?url=www.apache.org', ['http://*.apache.org']); | |
itShouldNotMatch('http://www.evil.com/?url=http://www.apache.org', ['http://*.apache.org']); | |
itShouldNotMatch('http://www.evil.com/?url=http%3A%2F%2Fwww%2Eapache%2Eorg', ['http://*.apache.org']); | |
itShouldNotMatch('https://apache.org/', ['http://*.apache.org']); | |
itShouldNotMatch('http://www.apache.org:pass@evil.com/', ['http://*.apache.org']); | |
itShouldNotMatch('http://www.apache.org.evil.com/', ['http://*.apache.org']); | |
itShouldMatch('http://www.apache.org/', ['http://*.apache.org', 'https://*.apache.org']); | |
itShouldMatch('https://www.apache.org/', ['http://*.apache.org', 'https://*.apache.org']); | |
itShouldNotMatch('ftp://www.apache.org/', ['http://*.apache.org', 'https://*.apache.org']); | |
itShouldNotMatch('http://www.apache.com/', ['http://*.apache.org', 'https://*.apache.org']); | |
itShouldMatch('http://www.apache.org/', ['http://www.apache.org']); | |
itShouldNotMatch('http://build.apache.org/', ['http://www.apache.org']); | |
itShouldNotMatch('http://apache.org/', ['http://www.apache.org']); | |
itShouldMatch('http://www.apache.org/', ['http://*/*']); | |
itShouldMatch('http://www.apache.org/foo/bar.html', ['http://*/*']); | |
itShouldMatch('http://www.apache.org/foo', ['http://*/foo*']); | |
itShouldMatch('http://www.apache.org/foo/bar.html', ['http://*/foo*']); | |
itShouldNotMatch('http://www.apache.org/', ['http://*/foo*']); | |
itShouldMatch('file:///foo', ['file:///*']); | |
itShouldMatch('file:///foo', ['file:///foo*']); | |
itShouldMatch('file:///foo/bar.html', ['file:///foo*']); | |
itShouldNotMatch('file:///foo.html', []); | |
itShouldNotMatch('http://www.apache.org/etc/foo', ['http://www.apache.org/foo*']); | |
itShouldNotMatch('http://www.apache.org/foo', ['file:///foo*']); | |
itShouldMatch('http://www.apache.org/', ['*://www.apache.org/*']); | |
itShouldMatch('https://www.apache.org/', ['*://www.apache.org/*']); | |
itShouldMatch('ftp://www.apache.org/', ['*://www.apache.org/*']); | |
itShouldMatch('file://www.apache.org/', ['*://www.apache.org/*']); | |
if (cordova.platformId == 'android') | |
itShouldMatch('content://www.apache.org/', ['*://www.apache.org/*']); | |
itShouldMatch('foo://www.apache.org/', ['*://www.apache.org/*']); | |
itShouldNotMatch('http://www.apache.com/', ['*://www.apache.org/*']); | |
itShouldMatch('http://www.apache.org/', ['*.apache.org']); | |
itShouldMatch('https://www.apache.org/', ['*.apache.org']); | |
itShouldNotMatch('ftp://www.apache.org/', ['*.apache.org']); | |
itShouldMatch('http://www.apache.org:81/', ['http://www.apache.org:81/*']); | |
itShouldMatch('http://user:pass@www.apache.org:81/foo/bar.html', ['http://www.apache.org:81/*']); | |
itShouldNotMatch('http://www.apache.org:80/', ['http://www.apache.org:81/*']); | |
itShouldNotMatch('http://www.apache.org/', ['http://www.apache.org:81/*']); | |
itShouldNotMatch('http://www.apache.org:foo/', ['http://www.apache.org:81/*']); | |
itShouldNotMatch('http://www.apache.org:81@www.apache.org/', ['http://www.apache.org:81/*']); | |
itShouldNotMatch('http://www.apache.org:81@www.evil.com/', ['http://www.apache.org:81/*']); | |
itShouldMatch('http://www.APAche.org/', ['*.apache.org']); | |
itShouldMatch('http://WWw.apache.org/', ['*.apache.org']); | |
itShouldMatch('http://www.apache.org/', ['*.APACHE.ORG']); | |
itShouldMatch('HTTP://www.apache.org/', ['*.apache.org']); | |
itShouldMatch('HTTP://www.apache.org/', ['http://*.apache.org']); | |
itShouldMatch('http://www.apache.org/', ['HTTP://*.apache.org']); | |
itShouldMatch('http://www.apache.org/foo/', ['*://*.apache.org/foo/*']); | |
itShouldMatch('http://www.apache.org/foo/bar', ['*://*.apache.org/foo/*']); | |
itShouldNotMatch('http://www.apache.org/bar/foo/', ['*://*.apache.org/foo/*']); | |
itShouldNotMatch('http://www.apache.org/Foo/', ['*://*.apache.org/foo/*']); | |
itShouldNotMatch('http://www.apache.org/Foo/bar', ['*://*.apache.org/foo/*']); | |
}); | |
describe("Test function (cordova.whitelist.test) that checks against config.xml", function () { | |
function expectTestWithResult(result) { | |
return (function (url, description) { | |
description = description || ((result ? "should accept " : "should reject ") + url); | |
describe("Test function", function () { | |
if (!isAndroid) { | |
pending("Whitelist Plugin only exists for Android"); | |
} | |
var cb, | |
originalTimeout; | |
beforeEach(function (done) { | |
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; | |
jasmine.DEFAULT_TIMEOUT_INTERVAL = 7500; | |
cb = jasmine.createSpy('spy').and.callFake(function (){ | |
done(); | |
}); | |
cordova.whitelist.test(url, cb); | |
}); | |
afterEach(function () { | |
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; | |
}); | |
it(description, function () { | |
expect(cb).toHaveBeenCalledWith(result); | |
}); | |
}); | |
}); | |
} | |
var itShouldAccept = expectTestWithResult(true); | |
var itShouldReject = expectTestWithResult(false); | |
it("should exist", function () { | |
expect(cordova.whitelist.test).toBeDefined(); | |
expect(typeof cordova.whitelist.test).toBe("function"); | |
}); | |
itShouldAccept('http://apache.org'); | |
itShouldAccept('http://apache.org/'); | |
itShouldAccept('http://www.apache.org/'); | |
itShouldAccept('http://www.apache.org/some/path'); | |
itShouldAccept('http://some.domain.under.apache.org/'); | |
itShouldAccept('http://user:pass@apache.org/'); | |
itShouldAccept('http://user:pass@www.apache.org/'); | |
itShouldAccept('https://www.apache.org/'); | |
itShouldReject('ftp://www.apache.org/'); | |
itShouldReject('http://www.apache.com/'); | |
itShouldReject('http://www.apache.org:pass@evil.com/'); | |
itShouldReject('http://www.apache.org.evil.com/'); | |
itShouldAccept('file:///foo'); | |
if (cordova.platformId == 'android') | |
itShouldReject('content:///foo'); | |
}); | |
}); | |
} |