blob: a1e23c5e97af47400d8fce4cb241bbda70ac56be [file] [log] [blame]
/*
* Copyright 2010-2011 Research In Motion Limited.
*
* Licensed 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.
*/
var srcPath = __dirname + '/../../../lib/';
describe("Utils", function () {
var utils = require(srcPath + 'utils.js');
describe("endsWith", function () {
it("returns true when a string ends with another", function () {
expect(utils.endsWith("www.smoketest9-vmyyz.labyyz.testnet.rim.net:8080", ".smoketest9-vmyyz.labyyz.testnet.rim.net:8080")).toEqual(true);
});
});
it("Verify that the filenameToImageMIME is defined", function () {
expect(utils.fileNameToImageMIME).toBeDefined();
});
it("Verify that the proper PNG MIME types are returned", function () {
expect(utils.fileNameToImageMIME("test.png")).toEqual("image/png");
});
it("Verify that the proper period MIME types are returned", function () {
expect(utils.fileNameToImageMIME("test.t.png")).toEqual("image/png");
});
it("Verify that the proper JPG types are returned", function () {
expect(utils.fileNameToImageMIME("test.jpg")).toEqual("image/jpeg");
});
it("Verify that the proper GIF types are returned", function () {
expect(utils.fileNameToImageMIME("test.gif")).toEqual("image/gif");
});
it("Verify that the proper TIFF types are returned", function () {
expect(utils.fileNameToImageMIME("test_test_.tif")).toEqual("image/tiff");
});
it("Verify that the proper TIFF types are returned", function () {
expect(utils.fileNameToImageMIME("test_test_.tiff")).toEqual("image/tiff");
});
it("Verify that the proper JPE MIME types are returned", function () {
expect(utils.fileNameToImageMIME("test.jpe")).toEqual("image/jpeg");
});
it("Verify that the proper BMP MIME types are returned", function () {
expect(utils.fileNameToImageMIME("test.bmp")).toEqual("image/bmp");
});
it("Verify that the proper JPEG MIME types are returned", function () {
expect(utils.fileNameToImageMIME("test.jpeg")).toEqual("image/jpeg");
});
it("Verify that the proper SVG MIME types are returned", function () {
expect(utils.fileNameToImageMIME("test.svg")).toEqual("image/svg+xml");
});
it("has an invokeInBrowser function", function () {
var url = "http://www.webworks.com",
mockApplication = {
invocation: {
invoke: jasmine.createSpy("invocation.invoke")
}
},
mockWindow = {
qnx: {
webplatform: {
getApplication: function () {
return mockApplication;
}
}
}
};
GLOBAL.window = mockWindow;
this.after(function () {
delete GLOBAL.window;
});
expect(utils.invokeInBrowser).toBeDefined();
utils.invokeInBrowser(url);
expect(mockApplication.invocation.invoke).toHaveBeenCalledWith({
uri: url,
target: "sys.browser"
});
});
// A cascading method invoker, kinda like jWorkflow
describe("series", function () {
var tasks,
callbackObj,
seriesComplete,
callbackInvocations,
invocationCounter,
task;
beforeEach(function () {
tasks = [];
callbackInvocations = [];
invocationCounter = 0;
seriesComplete = false;
callbackObj = {
func: function (args) {
callbackInvocations.push('done');
seriesComplete = true;
},
args: []
};
task = {
func: function (callback) {
callbackInvocations.push(invocationCounter++);
callback();
},
args: []
};
});
afterEach(function () {
tasks = null;
callbackObj = null;
seriesComplete = null;
callbackInvocations = null;
invocationCounter = null;
task = null;
});
it('should call callback right away when there are no tasks to execute', function () {
spyOn(callbackObj, 'func');
utils.series(tasks, callbackObj);
expect(callbackObj.func).toHaveBeenCalled();
});
it('should invoke the task method before the callback', function () {
tasks.push(task);
utils.series(tasks, callbackObj);
waitsFor(function () {
return seriesComplete;
});
expect(callbackInvocations.length).toEqual(2);
expect(callbackInvocations[0]).toEqual(0);
expect(callbackInvocations[1]).toEqual('done');
});
it('should invocation the tasks in order with the callback being the last invocation', function () {
var i;
tasks.push(task);
tasks.push(task);
tasks.push(task);
tasks.push(task);
utils.series(tasks, callbackObj);
waitsFor(function () {
return seriesComplete;
});
expect(callbackInvocations.length).toEqual(5);
for (i = 0; i < 4; i++) {
expect(callbackInvocations[i]).toEqual(i);
}
expect(callbackInvocations[4]).toEqual('done');
});
});
describe("utils translate path", function () {
beforeEach(function () {
GLOBAL.window = {
qnx: {
webplatform: {
getApplication: function () {
return {
getEnv: function (path) {
if (path === "HOME")
return "/accounts/home";
}
};
}
}
}
};
});
afterEach(function () {
delete GLOBAL.window;
});
it("Expect translate path to be defined", function () {
expect(utils.translatePath).toBeDefined();
});
it("translate path successfully returns the original path when passed non local value", function () {
var path = "http://google.com";
path = utils.translatePath(path);
expect(path).toEqual("http://google.com");
});
it("translate path successfully returns the original path when passed a telephone uri", function () {
var path = "tel://250-654-34243";
path = utils.translatePath(path);
expect(path).toEqual("tel://250-654-34243");
});
it("translate path successfully returns an updated string for a local path", function () {
var path = "local:///this-is-a-local/img/path.jpg";
path = utils.translatePath(path);
expect(path).toEqual("file:///accounts/home/../app/native/this-is-a-local/img/path.jpg");
});
});
describe("deepclone", function () {
it("passes through null", function () {
expect(utils.deepclone(null)).toBe(null);
});
it("passes through undefined", function () {
expect(utils.deepclone(undefined)).toBe(undefined);
});
it("passes through a Number", function () {
expect(utils.deepclone(1)).toBe(1);
});
it("passes through a String", function () {
var str = "hello world";
expect(utils.deepclone(str)).toBe(str);
});
it("passes through a Boolean", function () {
expect(utils.deepclone(true)).toBe(true);
expect(utils.deepclone(false)).toBe(false);
});
it("returns a new Date", function () {
var date = new Date(),
dateCopy = utils.deepclone(date);
expect(dateCopy instanceof Date).toBe(true, "Not a Date");
expect(date).not.toBe(dateCopy);
expect(date.getTime()).toBe(dateCopy.getTime());
});
it("returns a new RegExp", function () {
var regex = /a/,
regexCopy = utils.deepclone(regex);
expect(regexCopy instanceof RegExp).toBe(true, "Not a RegExp");
expect(regexCopy).not.toBe(regex);
expect(regexCopy.toString()).toBe(regex.toString());
});
it("copies nested Object properties", function () {
var obj = {
a: "hello world",
b: "hello again"
},
objCopy = utils.deepclone(obj);
expect(obj).not.toBe(objCopy);
expect(obj).toEqual(objCopy);
});
});
});