blob: 524b040b63061d10266f11d91d239a22f0a911fb [file] [log] [blame]
/*
*
* 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.
*
*/
var session = require(__dirname + "/../../../../../templates/project/cordova/lib/session"),
localize = require(__dirname + "/../../../../../templates/project/cordova/lib/localize"),
testUtils = require("./test-utilities"),
utils = require(__dirname + "/../../../../../templates/project/cordova/lib/utils"),
path = require("path"),
fs = require("fs"),
wrench = require("wrench"),
zipLocation = __dirname + "/../../config.xml";
describe("Session", function () {
beforeEach(function () {
//Do not create the source folder
spyOn(wrench, "mkdirSyncRecursive");
spyOn(utils, "getProperties").andReturn({});
});
it("sets the source directory correctly when specified [-s C:/sampleApp/mySource]", function () {
testUtils.mockResolve(path);
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
output: 'C:/sampleApp/bin',
source: 'C:/sampleApp/mySource'//equivalent to [-s C:/sampleApp/mySource]
},
result = session.initialize(data);
expect(result.sourceDir).toEqual(path.normalize("C:/sampleApp/mySource/src"));
});
it("sets the source directory correctly when unspecified [-s] and output path set [-o]", function () {
testUtils.mockResolve(path);
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
output: 'C:/sampleApp/bin',
source: true//equivalent to [-s]
},
result = session.initialize(data);
//src folder should be created in output directory
expect(result.sourceDir).toEqual(path.normalize("C:/sampleApp/bin/src"));
});
it("sets the source directory correctly when unspecified [-s] and no output path is set", function () {
testUtils.mockResolve(path);
var data = {
args: [ zipLocation ],
source: true//equivalent to [-s]
},
result = session.initialize(data);
//src folder should be created in output directory
expect(result.sourceDir).toEqual(path.join(path.dirname(zipLocation), "src"));
});
it("sets the password when specified using -g", function () {
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
output: 'C:/sampleApp/bin',
source: 'C:/sampleApp/mySource',//equivalent to [-s C:/sampleApp/mySource]
password: 'myPassword'
},
result = session.initialize(data);
expect(result.storepass).toEqual('myPassword');
});
it("does not set the password when not a string", function () {
//Commander sometimes improperly sets password to a function, when no value provided
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
output: 'C:/sampleApp/bin',
source: 'C:/sampleApp/mySource',//equivalent to [-s C:/sampleApp/mySource]
password: function () {}
},
result = session.initialize(data);
expect(result.storepass).toBeUndefined();
});
it("sets the buildId when specified [-buildId]", function () {
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
output: 'C:/sampleApp/bin',
source: 'C:/sampleApp/mySource',//equivalent to [-s C:/sampleApp/mySource]
buildId: '100'
},
result = session.initialize(data);
expect(result.buildId).toEqual('100');
});
it("sets the appdesc correctly when specified [--appdesc C:/path/bardescriptor.xml]", function () {
testUtils.mockResolve(path);
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
appdesc: 'C:/path/bardescriptor.xml' //equivalent to [--appdesc C:/path/bardescriptor.xml]
},
result = session.initialize(data);
expect(result.appdesc).toEqual(path.normalize("C:/path/bardescriptor.xml"));
});
it("sets the appdesc correctly when not specified", function () {
testUtils.mockResolve(path);
var data = {
args: [ 'C:/sampleApp/sample.zip' ]
},
result = session.initialize(data);
expect(result.appdesc).toBeUndefined();
});
it("sets the output directory correctly when specified with a relative path [-o myOutput]", function () {
var bbwpDir = __dirname + "/../../../../../../",
data = {
args: [ 'C:/sampleApp/sample.zip' ],
output: 'myOutput',
},
result = session.initialize(data);
//output should be set to bbwp location + outputFolder
expect(result.outputDir).toEqual(path.normalize(path.join(bbwpDir, "myOutput")));
});
describe("get params", function () {
beforeEach(function () {
delete require.cache[require.resolve(__dirname + "/../../../../../templates/project/cordova/lib/session")];
session = require(__dirname + "/../../../../../templates/project/cordova/lib/session");
});
it("get params from external file", function () {
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
params: "params.json"
},
result;
spyOn(path, "resolve").andReturn(path.normalize(__dirname + "../../../params.json"));
spyOn(fs, "existsSync").andReturn(true);
result = session.initialize(data);
expect(result.getParams("blackberry-signer")).toEqual({
"-proxyhost": "abc.com",
"-proxyport": "80"
});
});
it("get params from non-existent file should throw error", function () {
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
params: "blah.json",
keystorepass: "test"
};
spyOn(fs, "existsSync").andReturn(false);
expect(function () {
session.initialize(data);
}).toThrow(localize.translate("EXCEPTION_PARAMS_FILE_NOT_FOUND", path.resolve("blah.json")));
});
it("get params from bad JSON file should throw error", function () {
var data = {
args: [ 'C:/sampleApp/sample.zip' ],
params: "params-bad.json"
},
result;
spyOn(path, "resolve").andReturn("test/params-bad.json");
spyOn(fs, "existsSync").andReturn(true);
expect(function () {
session.initialize(data);
}).toThrow(localize.translate("EXCEPTION_PARAMS_FILE_ERROR", path.resolve("blah.json")));
});
});
describe("when setting the log level", function () {
var logger = require(__dirname + "/../../../../../templates/project/cordova/lib/logger");
beforeEach(function () {
spyOn(logger, "level");
});
it("defaults to verbose with no args", function () {
session.initialize({args: []});
expect(logger.level).toHaveBeenCalledWith("verbose");
});
it("sets level to verbose", function () {
session.initialize({args: [], loglevel: 'verbose'});
expect(logger.level).toHaveBeenCalledWith("verbose");
});
it("sets level to warn", function () {
session.initialize({args: [], loglevel: 'warn'});
expect(logger.level).toHaveBeenCalledWith("warn");
});
it("sets level to error", function () {
session.initialize({args: [], loglevel: 'error'});
expect(logger.level).toHaveBeenCalledWith("error");
});
});
});