123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /*
- * 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');
- });
- });
- }
|