| /* |
| * |
| * 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 isWindowsPhone = cordova.platformId == 'windowsphone'; |
| var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8") |
| |
| describe('Whitelist API (cordova.whitelist)', function () { |
| |
| it("should exist", function () { |
| expect(cordova.whitelist).toBeDefined(); |
| }); |
| |
| describe("Match function", 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 () { |
| // 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; |
| |
| if (isWindows || isWindowsPhone) { |
| pending(); |
| } |
| |
| 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); |
| |
| 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", function () { |
| function expectTestWithResult(result) { |
| return (function (url, description) { |
| description = description || ((result ? "should accept " : "should reject ") + url); |
| |
| describe("Test function", function () { |
| if (isWindows || isWindowsPhone) { |
| pending(); |
| } |
| |
| 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'); |
| }); |
| }); |
| } |