Compare commits

...

18 Commits

Author SHA1 Message Date
Steve Gill 37ee3cdf81 Set VERSION to 6.1.2 (via coho) 2017-01-26 16:30:31 -08:00
Steve Gill 22694606f9 Update JS snapshot to version 6.1.2 (via coho) 2017-01-26 16:30:31 -08:00
Steve Gill 9d217813f1 CB-12403 Updated RELEASENOTES and Version for release 6.1.2 2017-01-26 16:30:02 -08:00
Joe Bowser 07dce213a2 Change to https by default 2017-01-26 16:29:11 -08:00
audreyso f114ac8c8c CB:12018 : added dev dependencies to gitignore
This closes #355
2017-01-26 16:27:39 -08:00
audreyso 05af619521 CB-12018 : updated tests to work with jasmine (promise matcher tests commented out for now) 2017-01-26 16:27:29 -08:00
Steve Gill 96457effbc Set VERSION to 6.1.1 (via coho) 2017-01-03 17:45:53 -08:00
Steve Gill 67e7980eba Update JS snapshot to version 6.1.1 (via coho) 2017-01-03 17:45:53 -08:00
Steve Gill 0efa6cd766 CB-12314 Updated RELEASENOTES and Version for release 6.1.1 2017-01-03 17:42:13 -08:00
daserge a51fc4b25e CB-12159 Android: Keystore password prompt won't show up
This closes #351
2017-01-03 17:21:39 -08:00
Joe Bowser 071ddbf6eb Adding isClean to the spec, this really should have failed a few commits ago
This closes #349
2017-01-03 17:21:24 -08:00
Joe Bowser a87eb7266f Need to pass lint 2017-01-03 17:21:05 -08:00
Joe Bowser c2ddd2da7f CB-12169: Check for build directory before running a clean 2017-01-03 17:20:26 -08:00
Joe Bowser e856613787 Updating the timeout due to known travis issues 2016-11-03 12:49:40 -07:00
Jesse MacFadyen 94e9bd5e26 Do not test for non-existent build folder
This closes #348
2016-11-03 12:49:30 -07:00
Jesse MacFadyen 011b57da54 Fixed AndroidStudio tests to actually run, removed app/src/main/assets/ as a requirement and added app/src/main/res instead, added placeholder for build/ folder, Removed dupe gitignore 2016-11-03 12:49:18 -07:00
Joe Bowser 7e54af75d8 Set VERSION to 6.1.0 (via coho) 2016-11-02 16:32:15 -07:00
Joe Bowser d95df96881 Update JS snapshot to version 6.1.0 (via coho) 2016-11-02 16:32:15 -07:00
25 changed files with 228 additions and 162 deletions
+3 -3
View File
@@ -40,10 +40,9 @@ Desktop.ini
*.iml *.iml
.idea .idea
npm-debug.log npm-debug.log
/framework/build
node_modules/jshint node_modules/jshint
node_modules/promise-matchers node_modules/promise-matchers
node_modules/jasmine-node node_modules/jasmine
node_modules/rewire node_modules/rewire
node_modules/istanbul node_modules/istanbul
node_modules/.bin/cake node_modules/.bin/cake
@@ -54,7 +53,7 @@ node_modules/.bin/esparse
node_modules/.bin/esvalidate node_modules/.bin/esvalidate
node_modules/.bin/handlebars node_modules/.bin/handlebars
node_modules/.bin/istanbul node_modules/.bin/istanbul
node_modules/.bin/jasmine-node node_modules/.bin/jasmine
node_modules/.bin/js-yaml node_modules/.bin/js-yaml
node_modules/.bin/jshint node_modules/.bin/jshint
node_modules/.bin/mkdirp node_modules/.bin/mkdirp
@@ -129,5 +128,6 @@ node_modules/which/
node_modules/window-size/ node_modules/window-size/
node_modules/wordwrap/ node_modules/wordwrap/
node_modules/yargs/ node_modules/yargs/
node_modules/jasmine-core/
node_modules/fs.realpath/ node_modules/fs.realpath/
/coverage /coverage
+10
View File
@@ -20,6 +20,16 @@
--> -->
## Release Notes for Cordova (Android) ## ## Release Notes for Cordova (Android) ##
### 6.1.2 (Jan 26, 2017)
* **Security** Change to `https` by default
* [CB-12018](https://issues.apache.org/jira/browse/CB-12018): updated tests to work with jasmine (promise matcher tests commented out for now)
* created directories and corresponding images for `xxhdpi` and `xxxhdpi`, both drawables and `mipmaps`
### 6.1.1 (Jan 03, 2017)
* [CB-12159](https://issues.apache.org/jira/browse/CB-12159) **Android** Keystore password prompt won't show up
* [CB-12169](https://issues.apache.org/jira/browse/CB-12169) Check for build directory before running a clean
* Fixed `AndroidStudio` tests to actually run, removed `app/src/main/assets/` as a requirement and added `app/src/main/res` instead, added placeholder for `build/` folder, Removed dupe `gitignore`
### 6.1.0 (Nov 02, 2016) ### 6.1.0 (Nov 02, 2016)
* [CB-12108](https://issues.apache.org/jira/browse/CB-12108) Updating gradle files to work with the latest version of Android Studio * [CB-12108](https://issues.apache.org/jira/browse/CB-12108) Updating gradle files to work with the latest version of Android Studio
* [CB-12102](https://issues.apache.org/jira/browse/CB-12102) Bump travis to build to API 25 * [CB-12102](https://issues.apache.org/jira/browse/CB-12102) Bump travis to build to API 25
+1 -1
View File
@@ -1 +1 @@
6.1.0-dev 6.1.2
+6 -2
View File
@@ -72,6 +72,7 @@ function Api(platform, platformRootDir, events) {
defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'), defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
strings: path.join(self.root, 'res/values/strings.xml'), strings: path.join(self.root, 'res/values/strings.xml'),
manifest: path.join(self.root, 'AndroidManifest.xml'), manifest: path.join(self.root, 'AndroidManifest.xml'),
build: path.join(self.root, 'build'),
// NOTE: Due to platformApi spec we need to return relative paths here // NOTE: Due to platformApi spec we need to return relative paths here
cordovaJs: 'bin/templates/project/assets/www/cordova.js', cordovaJs: 'bin/templates/project/assets/www/cordova.js',
cordovaJsSrc: 'cordova-js-src' cordovaJsSrc: 'cordova-js-src'
@@ -241,11 +242,12 @@ Api.prototype.addPlugin = function (plugin, installOptions) {
// Do some basic argument parsing // Do some basic argument parsing
var opts = {}; var opts = {};
// Skip cleaning prepared files when not invoking via cordova CLI. // Skip cleaning prepared files when not invoking via cordova CLI.
opts.noPrepare = true; opts.noPrepare = true;
if(!(AndroidStudio.isAndroidStudioProject(self.root))) if(!AndroidStudio.isAndroidStudioProject(self.root) && !project.isClean()) {
return self.clean(opts); return self.clean(opts);
}
}) })
.then(function () { .then(function () {
return PluginManager.get(self.platform, self.locations, project) return PluginManager.get(self.platform, self.locations, project)
@@ -396,6 +398,8 @@ Api.prototype.clean = function(cleanOptions) {
}); });
}; };
/** /**
* Performs a requirements check for current platform. Each platform defines its * Performs a requirements check for current platform. Each platform defines its
* own set of requirements, which should be resolved before platform can be * own set of requirements, which should be resolved before platform can be
+9
View File
@@ -197,5 +197,14 @@ AndroidProject.prototype.getUninstaller = function (type) {
return pluginHandlers.getUninstaller(type); return pluginHandlers.getUninstaller(type);
}; };
/*
* This checks if an Android project is clean or has old build artifacts
*/
AndroidProject.prototype.isClean = function() {
var build_path = path.join(this.projectDir, 'build');
//If the build directory doesn't exist, it's clean
return !(fs.existsSync(build_path));
};
module.exports = AndroidProject; module.exports = AndroidProject;
+7 -1
View File
@@ -8,15 +8,20 @@
var path = require('path'); var path = require('path');
var fs = require('fs'); var fs = require('fs');
var CordovaError = require('cordova-common').CordovaError;
module.exports.isAndroidStudioProject = function isAndroidStudioProject(root) { module.exports.isAndroidStudioProject = function isAndroidStudioProject(root) {
var eclipseFiles = ['AndroidManifest.xml', 'libs', 'res', 'project.properties', 'platform_www']; var eclipseFiles = ['AndroidManifest.xml', 'libs', 'res', 'project.properties', 'platform_www'];
var androidStudioFiles = ['app', 'gradle', 'build', 'app/src/main/assets']; var androidStudioFiles = ['app', 'gradle', 'app/src/main/res'];
// assume it is an AS project and not an Eclipse project // assume it is an AS project and not an Eclipse project
var isEclipse = false; var isEclipse = false;
var isAS = true; var isAS = true;
if(!fs.existsSync(root)) {
throw new CordovaError('AndroidStudio.js:inAndroidStudioProject root does not exist: ' + root);
}
// if any of the following exists, then we are not an ASProj // if any of the following exists, then we are not an ASProj
eclipseFiles.forEach(function(file) { eclipseFiles.forEach(function(file) {
if(fs.existsSync(path.join(root, file))) { if(fs.existsSync(path.join(root, file))) {
@@ -28,6 +33,7 @@ module.exports.isAndroidStudioProject = function isAndroidStudioProject(root) {
if(!isEclipse) { if(!isEclipse) {
androidStudioFiles.forEach(function(file){ androidStudioFiles.forEach(function(file){
if(!fs.existsSync(path.join(root, file))) { if(!fs.existsSync(path.join(root, file))) {
console.log('missing file :: ' + file);
isAS = false; isAS = false;
} }
}); });
+1 -1
View File
@@ -186,7 +186,7 @@ GradleBuilder.prototype.prepEnv = function(opts) {
// For some reason, using ^ and $ don't work. This does the job, though. // For some reason, using ^ and $ don't work. This does the job, though.
var distributionUrlRegex = /distributionUrl.*zip/; var distributionUrlRegex = /distributionUrl.*zip/;
/*jshint -W069 */ /*jshint -W069 */
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.14.1-all.zip'; var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'https\\://services.gradle.org/distributions/gradle-2.14.1-all.zip';
/*jshint +W069 */ /*jshint +W069 */
var gradleWrapperPropertiesPath = path.join(self.root, 'gradle', 'wrapper', 'gradle-wrapper.properties'); var gradleWrapperPropertiesPath = path.join(self.root, 'gradle', 'wrapper', 'gradle-wrapper.properties');
shell.chmod('u+w', gradleWrapperPropertiesPath); shell.chmod('u+w', gradleWrapperPropertiesPath);
+1 -1
View File
@@ -20,7 +20,7 @@
*/ */
// Coho updates this line: // Coho updates this line:
var VERSION = "6.1.0-dev"; var VERSION = "6.1.2";
module.exports.version = VERSION; module.exports.version = VERSION;
+7 -7
View File
@@ -1,5 +1,5 @@
// Platform: android // Platform: android
// 53ea1913735222d326e65326e03391405df3cd4e // 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20
/* /*
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License. under the License.
*/ */
;(function() { ;(function() {
var PLATFORM_VERSION_BUILD_LABEL = '6.1.0-dev'; var PLATFORM_VERSION_BUILD_LABEL = '6.1.2';
// file: src/scripts/require.js // file: src/scripts/require.js
/*jshint -W079 */ /*jshint -W079 */
@@ -330,7 +330,7 @@ module.exports = cordova;
}); });
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js // file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js
define("cordova/android/nativeapiprovider", function(require, exports, module) { define("cordova/android/nativeapiprovider", function(require, exports, module) {
/** /**
@@ -353,7 +353,7 @@ module.exports = {
}); });
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js // file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js
define("cordova/android/promptbasednativeapi", function(require, exports, module) { define("cordova/android/promptbasednativeapi", function(require, exports, module) {
/** /**
@@ -886,7 +886,7 @@ module.exports = channel;
}); });
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/exec.js // file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/exec.js
define("cordova/exec", function(require, exports, module) { define("cordova/exec", function(require, exports, module) {
/** /**
@@ -1649,7 +1649,7 @@ exports.reset();
}); });
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/platform.js // file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/platform.js
define("cordova/platform", function(require, exports, module) { define("cordova/platform", function(require, exports, module) {
// The last resume event that was received that had the result of a plugin call. // The last resume event that was received that had the result of a plugin call.
@@ -1759,7 +1759,7 @@ function onMessageFromNative(msg) {
}); });
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/plugin/android/app.js // file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/plugin/android/app.js
define("cordova/plugin/android/app", function(require, exports, module) { define("cordova/plugin/android/app", function(require, exports, module) {
var exec = require('cordova/exec'); var exec = require('cordova/exec');
+1 -1
View File
@@ -264,7 +264,7 @@ def promptForReleaseKeyPassword() {
gradle.taskGraph.whenReady { taskGraph -> gradle.taskGraph.whenReady { taskGraph ->
taskGraph.getAllTasks().each() { task -> taskGraph.getAllTasks().each() { task ->
if (task.name == 'validateReleaseSigning') { if (task.name == 'validateReleaseSigning' || task.name == 'validateSigningRelease') {
promptForReleaseKeyPassword() promptForReleaseKeyPassword()
} }
} }
@@ -31,7 +31,7 @@ import android.webkit.WebChromeClient.CustomViewCallback;
* are not expected to implement it. * are not expected to implement it.
*/ */
public interface CordovaWebView { public interface CordovaWebView {
public static final String CORDOVA_VERSION = "6.1.0-dev"; public static final String CORDOVA_VERSION = "6.1.2";
void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences); void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences);
+47 -47
View File
@@ -1,49 +1,49 @@
{ {
"name": "cordova-android", "name": "cordova-android",
"version": "6.1.0", "version": "6.1.2",
"description": "cordova-android release", "description": "cordova-android release",
"bin": { "bin": {
"create": "bin/create" "create": "bin/create"
}, },
"main": "bin/templates/cordova/Api.js", "main": "bin/templates/cordova/Api.js",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://git-wip-us.apache.org/repos/asf/cordova-android.git" "url": "https://git-wip-us.apache.org/repos/asf/cordova-android.git"
}, },
"keywords": [ "keywords": [
"android", "android",
"cordova", "cordova",
"apache" "apache"
], ],
"scripts": { "scripts": {
"test": "npm run jshint && jasmine-node --color spec/unit", "test": "npm run jshint && jasmine",
"cover": "istanbul cover --root bin/templates/cordova --print detail node_modules/jasmine-node/bin/jasmine-node -- spec/unit", "cover": "istanbul cover --root bin/templates/cordova --print detail jasmine",
"test-build": "jasmine-node --captureExceptions --color spec/e2e", "test-build": "jasmine --captureExceptions --color spec/e2e/*.spec.js",
"jshint": "node node_modules/jshint/bin/jshint bin && node node_modules/jshint/bin/jshint spec" "jshint": "jshint bin && jshint spec"
}, },
"author": "Apache Software Foundation", "author": "Apache Software Foundation",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"cordova-common": "^1.5.0", "cordova-common": "^1.5.0",
"elementtree": "^0.1.6", "elementtree": "^0.1.6",
"nopt": "^3.0.1", "nopt": "^3.0.1",
"properties-parser": "^0.2.3", "properties-parser": "^0.2.3",
"q": "^1.4.1", "q": "^1.4.1",
"shelljs": "^0.5.3" "shelljs": "^0.5.3"
}, },
"bundledDependencies": [ "bundledDependencies": [
"cordova-common", "cordova-common",
"elementtree", "elementtree",
"nopt", "nopt",
"properties-parser", "properties-parser",
"q", "q",
"shelljs" "shelljs"
], ],
"devDependencies": { "devDependencies": {
"istanbul": "^0.4.2", "istanbul": "^0.4.2",
"jasmine-node": "^1.14.5", "jasmine": "^2.5.2",
"jshint": "^2.6.0", "jshint": "^2.6.0",
"promise-matchers": "~0", "promise-matchers": "~0",
"rewire": "^2.1.3" "rewire": "^2.1.3"
} }
} }
+6 -6
View File
@@ -35,42 +35,42 @@ function createAndBuild(projectname, projectid, done) {
describe('create', function() { describe('create', function() {
it('create project with ascii name, no spaces', function(done) { it('Test#001 : create project with ascii name, no spaces', function(done) {
var projectname = 'testcreate'; var projectname = 'testcreate';
var projectid = 'com.test.create.app1'; var projectid = 'com.test.create.app1';
createAndBuild(projectname, projectid, done); createAndBuild(projectname, projectid, done);
}, CREATE_TIMEOUT); }, CREATE_TIMEOUT);
it('create project with ascii name, and spaces', function(done) { it('Test#002 : create project with ascii name, and spaces', function(done) {
var projectname = 'test create'; var projectname = 'test create';
var projectid = 'com.test.create.app2'; var projectid = 'com.test.create.app2';
createAndBuild(projectname, projectid, done); createAndBuild(projectname, projectid, done);
}, CREATE_TIMEOUT); }, CREATE_TIMEOUT);
it('create project with unicode name, no spaces', function(done) { it('Test#003 : create project with unicode name, no spaces', function(done) {
var projectname = '応応応応用用用用'; var projectname = '応応応応用用用用';
var projectid = 'com.test.create.app3'; var projectid = 'com.test.create.app3';
createAndBuild(projectname, projectid, done); createAndBuild(projectname, projectid, done);
}, CREATE_TIMEOUT); }, CREATE_TIMEOUT);
it('create project with unicode name, and spaces', function(done) { it('Test#004 : create project with unicode name, and spaces', function(done) {
var projectname = '応応応応 用用用用'; var projectname = '応応応応 用用用用';
var projectid = 'com.test.create.app4'; var projectid = 'com.test.create.app4';
createAndBuild(projectname, projectid, done); createAndBuild(projectname, projectid, done);
}, CREATE_TIMEOUT); }, CREATE_TIMEOUT);
it('create project with ascii+unicode name, no spaces', function(done) { it('Test#005 : create project with ascii+unicode name, no spaces', function(done) {
var projectname = '応応応応hello用用用用'; var projectname = '応応応応hello用用用用';
var projectid = 'com.test.create.app5'; var projectid = 'com.test.create.app5';
createAndBuild(projectname, projectid, done); createAndBuild(projectname, projectid, done);
}, CREATE_TIMEOUT); }, CREATE_TIMEOUT);
it('create project with ascii+unicode name, and spaces', function(done) { it('Test#006 : create project with ascii+unicode name, and spaces', function(done) {
var projectname = '応応応応 hello 用用用用'; var projectname = '応応応応 hello 用用用用';
var projectid = 'com.test.create.app6'; var projectid = 'com.test.create.app6';
+2 -2
View File
@@ -20,11 +20,11 @@
var path = require('path'), var path = require('path'),
actions = require('./helpers/projectActions.js'); actions = require('./helpers/projectActions.js');
var PLUGIN_ADD_TIMEOUT = 60000; var PLUGIN_ADD_TIMEOUT = 90000;
describe('plugin add', function() { describe('plugin add', function() {
it('create project and add a plugin with framework', function(done) { it('Test#001 : create project and add a plugin with framework', function(done) {
var projectname = 'testpluginframework'; var projectname = 'testpluginframework';
var projectid = 'com.test.plugin.framework'; var projectid = 'com.test.plugin.framework';
var fakePluginPath = path.join(__dirname, 'fixtures/cordova-plugin-fake'); var fakePluginPath = path.join(__dirname, 'fixtures/cordova-plugin-fake');
+4 -4
View File
@@ -56,7 +56,7 @@ function testUpdate(projectname, projectid, createfrom, updatefrom, doBuild, don
describe('preparing fixtures', function () { describe('preparing fixtures', function () {
it('cloning old platform', function (done) { it('Test#001 : cloning old platform', function (done) {
var command = util.format('git clone %s --depth=1 --branch %s %s', var command = util.format('git clone %s --depth=1 --branch %s %s',
PLATFORM_GIT_URL, platformOld.version, platformOld.path); PLATFORM_GIT_URL, platformOld.version, platformOld.path);
shell.rm('-rf', platformOld.path); shell.rm('-rf', platformOld.path);
@@ -70,7 +70,7 @@ describe('preparing fixtures', function () {
describe('update', function() { describe('update', function() {
it('should update major version and build the project', function(done) { it('Test#002 : should update major version and build the project', function(done) {
var projectname = 'testupdate'; var projectname = 'testupdate';
var projectid = 'com.test.update.app1'; var projectid = 'com.test.update.app1';
@@ -78,7 +78,7 @@ describe('update', function() {
}, UPDATE_TIMEOUT); }, UPDATE_TIMEOUT);
it('should downgrade major version and build the project', function(done) { it('Test#003 : should downgrade major version and build the project', function(done) {
var projectname = 'testupdate'; var projectname = 'testupdate';
var projectid = 'com.test.update.app2'; var projectid = 'com.test.update.app2';
@@ -90,7 +90,7 @@ describe('update', function() {
describe('cleanup', function () { describe('cleanup', function () {
it('remove cloned old platform', function() { it('Test#004 : remove cloned old platform', function() {
shell.rm('-rf', platformOld.path); shell.rm('-rf', platformOld.path);
}); });
@@ -0,0 +1 @@
Tests require that this folder exists.
+8
View File
@@ -0,0 +1,8 @@
{
"spec_dir": "spec",
"spec_files": [
"unit/**/*[sS]pec.js"
],
"stopSpecOnExpectationFailure": false,
"random": false
}
+1 -1
View File
@@ -23,7 +23,7 @@ var android_project = path.join(__dirname, '../fixtures/android_project');
describe('AndroidProject class', function() { describe('AndroidProject class', function() {
describe('getPackageName method', function() { describe('getPackageName method', function() {
it('should return an android project\'s proper package name', function() { it('Test#001 : should return an android project\'s proper package name', function() {
expect(AndroidProject.getProjectFile(android_project).getPackageName()) expect(AndroidProject.getProjectFile(android_project).getPackageName())
.toEqual('com.alunny.childapp'); .toEqual('com.alunny.childapp');
}); });
-14
View File
@@ -1,14 +0,0 @@
var AndroidStudio = require('../../bin/templates/cordova/lib/AndroidStudio');
describe('AndroidStudio module', function () {
it('should detect Android Studio project', function() {
var root = './fixtures/android_studio_project';
spyOn(AndroidStudio, 'isAndroidStudioProject').andReturn(true);
AndroidStudio.isAndroidStudioProject(root);
});
it('should detect non Android Studio project', function() {
var root = './fixtures/android_project';
spyOn(AndroidStudio, 'isAndroidStudioProject').andReturn(false);
AndroidStudio.isAndroidStudioProject(root);
});
});
+17
View File
@@ -0,0 +1,17 @@
var path = require('path');
var AndroidStudio = require('../../bin/templates/cordova/lib/AndroidStudio');
describe('AndroidStudio module', function () {
it('should return true for Android Studio project', function() {
var root = path.join(__dirname,'../fixtures/android_studio_project/');
var isAndStud = AndroidStudio.isAndroidStudioProject(root);
expect(isAndStud).toBe(true);
});
it('should return false non Android Studio project', function() {
var root = path.join(__dirname,'../fixtures/android_project/');
var isAndStud = AndroidStudio.isAndroidStudioProject(root);
expect(isAndStud).toBe(false);
});
});
+7 -7
View File
@@ -39,11 +39,11 @@ describe('addPlugin method', function () {
beforeEach(function() { beforeEach(function() {
var pluginManager = jasmine.createSpyObj('pluginManager', ['addPlugin']); var pluginManager = jasmine.createSpyObj('pluginManager', ['addPlugin']);
pluginManager.addPlugin.andReturn(Q()); pluginManager.addPlugin.and.returnValue(Q());
spyOn(common.PluginManager, 'get').andReturn(pluginManager); spyOn(common.PluginManager, 'get').and.returnValue(pluginManager);
var projectSpy = jasmine.createSpyObj('AndroidProject', ['getPackageName', 'write']); var projectSpy = jasmine.createSpyObj('AndroidProject', ['getPackageName', 'write', 'isClean']);
spyOn(AndroidProject, 'getProjectFile').andReturn(projectSpy); spyOn(AndroidProject, 'getProjectFile').and.returnValue(projectSpy);
oldClean = Api.__get__('Api.prototype.clean'); oldClean = Api.__get__('Api.prototype.clean');
Api.__set__('Api.prototype.clean', Q); Api.__set__('Api.prototype.clean', Q);
@@ -51,14 +51,14 @@ describe('addPlugin method', function () {
fail = jasmine.createSpy('fail'); fail = jasmine.createSpy('fail');
gradleBuilder = jasmine.createSpyObj('gradleBuilder', ['prepBuildFiles']); gradleBuilder = jasmine.createSpyObj('gradleBuilder', ['prepBuildFiles']);
spyOn(builders, 'getBuilder').andReturn(gradleBuilder); spyOn(builders, 'getBuilder').and.returnValue(gradleBuilder);
}); });
afterEach(function () { afterEach(function () {
Api.__set__('Api.prototype.clean', oldClean); Api.__set__('Api.prototype.clean', oldClean);
}); });
it('should call gradleBuilder.prepBuildFiles for every plugin with frameworks', function(done) { it('Test#001 : should call gradleBuilder.prepBuildFiles for every plugin with frameworks', function(done) {
api.addPlugin(new PluginInfo(path.join(FIXTURES, 'cordova-plugin-fake'))) api.addPlugin(new PluginInfo(path.join(FIXTURES, 'cordova-plugin-fake')))
.catch(fail) .catch(fail)
.fin(function () { .fin(function () {
@@ -68,7 +68,7 @@ describe('addPlugin method', function () {
}); });
}); });
it('shouldn\'t trigger gradleBuilder.prepBuildFiles for plugins without android frameworks', function(done) { it('Test#002 : shouldn\'t trigger gradleBuilder.prepBuildFiles for plugins without android frameworks', function(done) {
api.addPlugin(new PluginInfo(path.join(FIXTURES, 'cordova-plugin-fake-ios-frameworks'))) api.addPlugin(new PluginInfo(path.join(FIXTURES, 'cordova-plugin-fake-ios-frameworks')))
.catch(fail) .catch(fail)
.fin(function () { .fin(function () {
+35 -10
View File
@@ -18,8 +18,6 @@
*/ */
/* jshint laxcomma:true */ /* jshint laxcomma:true */
require("promise-matchers");
var create = require("../../bin/lib/create"); var create = require("../../bin/lib/create");
describe("create", function () { describe("create", function () {
@@ -48,14 +46,27 @@ describe("create", function () {
]; ];
valid.forEach(function(package_name) { valid.forEach(function(package_name) {
it("should accept " + package_name, function(done) { it("Test#001 : should accept " + package_name, function(done) {
expect(create.validatePackageName(package_name)).toHaveBeenResolved(done); return create.validatePackageName(package_name)
.then(function() {
//resolved
done();
}).fail(function(err) {
expect(err).toBeUndefined();
});
}); });
}); });
invalid.forEach(function(package_name) { invalid.forEach(function(package_name) {
it("should reject " + package_name, function(done) { it("Test#002 : should reject " + package_name, function(done) {
expect(create.validatePackageName(package_name)).toHaveBeenRejected(done); return create.validatePackageName(package_name)
.then(function() {
//shouldn't be here
expect(true).toBe(false);
}).fail(function(err) {
expect(err).toBeDefined();
done();
});
}); });
}); });
}); });
@@ -73,15 +84,29 @@ describe("create", function () {
]; ];
valid.forEach(function(project_name) { valid.forEach(function(project_name) {
it("should accept " + project_name, function(done) { it("Test#003 : should accept " + project_name, function(done) {
expect(create.validateProjectName(project_name)).toHaveBeenResolved(done); return create.validateProjectName(project_name)
.then(function() {
//resolved
done();
}).fail(function(err) {
expect(err).toBeUndefined();
});
}); });
}); });
invalid.forEach(function(project_name) { invalid.forEach(function(project_name) {
it("should reject " + project_name, function(done) { it("Test#004 : should reject " + project_name, function(done) {
expect(create.validateProjectName(project_name)).toHaveBeenRejected(done); return create.validateProjectName(project_name)
.then(function() {
//shouldn't be here
expect(true).toBe(false);
}).fail(function(err) {
expect(err).toBeDefined();
done();
});
}); });
}); });
}); });
}); });
+14 -14
View File
@@ -38,13 +38,13 @@ var copyNewFile = common.__get__('copyNewFile');
describe('common platform handler', function() { describe('common platform handler', function() {
describe('copyFile', function() { describe('copyFile', function() {
it('should throw if source path not found', function(){ it('Test#001 : should throw if source path not found', function(){
shell.rm('-rf', src); shell.rm('-rf', src);
expect(function(){copyFile(test_dir, src, project_dir, dest);}) expect(function(){copyFile(test_dir, src, project_dir, dest);})
.toThrow(new Error('"' + src + '" not found!')); .toThrow(new Error('"' + src + '" not found!'));
}); });
it('should throw if src not in plugin directory', function(){ it('Test#002 : should throw if src not in plugin directory', function(){
shell.mkdir('-p', project_dir); shell.mkdir('-p', project_dir);
fs.writeFileSync(non_plugin_file, 'contents', 'utf-8'); fs.writeFileSync(non_plugin_file, 'contents', 'utf-8');
var outside_file = '../non_plugin_file'; var outside_file = '../non_plugin_file';
@@ -53,7 +53,7 @@ describe('common platform handler', function() {
shell.rm('-rf', test_dir); shell.rm('-rf', test_dir);
}); });
it('should allow symlink src, if inside plugin', function(){ it('Test#003 : should allow symlink src, if inside plugin', function(){
shell.mkdir('-p', java_dir); shell.mkdir('-p', java_dir);
fs.writeFileSync(java_file, 'contents', 'utf-8'); fs.writeFileSync(java_file, 'contents', 'utf-8');
@@ -66,7 +66,7 @@ describe('common platform handler', function() {
shell.rm('-rf', project_dir); shell.rm('-rf', project_dir);
}); });
it('should throw if symlink is linked to a file outside the plugin', function(){ it('Test#004 : should throw if symlink is linked to a file outside the plugin', function(){
shell.mkdir('-p', java_dir); shell.mkdir('-p', java_dir);
fs.writeFileSync(non_plugin_file, 'contents', 'utf-8'); fs.writeFileSync(non_plugin_file, 'contents', 'utf-8');
@@ -80,7 +80,7 @@ describe('common platform handler', function() {
shell.rm('-rf', project_dir); shell.rm('-rf', project_dir);
}); });
it('should throw if dest is outside the project directory', function(){ it('Test#005 : should throw if dest is outside the project directory', function(){
shell.mkdir('-p', java_dir); shell.mkdir('-p', java_dir);
fs.writeFileSync(java_file, 'contents', 'utf-8'); fs.writeFileSync(java_file, 'contents', 'utf-8');
expect(function(){copyFile(test_dir, java_file, project_dir, non_plugin_file);}). expect(function(){copyFile(test_dir, java_file, project_dir, non_plugin_file);}).
@@ -88,11 +88,11 @@ describe('common platform handler', function() {
shell.rm('-rf', project_dir); shell.rm('-rf', project_dir);
}); });
it('should call mkdir -p on target path', function(){ it('Test#006 : should call mkdir -p on target path', function(){
shell.mkdir('-p', java_dir); shell.mkdir('-p', java_dir);
fs.writeFileSync(java_file, 'contents', 'utf-8'); fs.writeFileSync(java_file, 'contents', 'utf-8');
var s = spyOn(shell, 'mkdir').andCallThrough(); var s = spyOn(shell, 'mkdir').and.callThrough();
var resolvedDest = path.resolve(project_dir, dest); var resolvedDest = path.resolve(project_dir, dest);
copyFile(test_dir, java_file, project_dir, dest); copyFile(test_dir, java_file, project_dir, dest);
@@ -102,11 +102,11 @@ describe('common platform handler', function() {
shell.rm('-rf', project_dir); shell.rm('-rf', project_dir);
}); });
it('should call cp source/dest paths', function(){ it('Test#007 : should call cp source/dest paths', function(){
shell.mkdir('-p', java_dir); shell.mkdir('-p', java_dir);
fs.writeFileSync(java_file, 'contents', 'utf-8'); fs.writeFileSync(java_file, 'contents', 'utf-8');
var s = spyOn(shell, 'cp').andCallThrough(); var s = spyOn(shell, 'cp').and.callThrough();
var resolvedDest = path.resolve(project_dir, dest); var resolvedDest = path.resolve(project_dir, dest);
copyFile(test_dir, java_file, project_dir, dest); copyFile(test_dir, java_file, project_dir, dest);
@@ -119,7 +119,7 @@ describe('common platform handler', function() {
}); });
describe('copyNewFile', function () { describe('copyNewFile', function () {
it('should throw if target path exists', function(){ it('Test#008 : should throw if target path exists', function(){
shell.mkdir('-p', dest); shell.mkdir('-p', dest);
expect(function(){copyNewFile(test_dir, src, project_dir, dest);}). expect(function(){copyNewFile(test_dir, src, project_dir, dest);}).
toThrow(new Error('"' + dest + '" already exists!')); toThrow(new Error('"' + dest + '" already exists!'));
@@ -137,21 +137,21 @@ describe('common platform handler', function() {
shell.rm('-rf', java_dir); shell.rm('-rf', java_dir);
}); });
it('should call fs.unlinkSync on the provided paths', function(){ it('Test#009 : should call fs.unlinkSync on the provided paths', function(){
var s = spyOn(fs, 'unlinkSync').andCallThrough(); var s = spyOn(fs, 'unlinkSync').and.callThrough();
deleteJava(project_dir, java_file); deleteJava(project_dir, java_file);
expect(s).toHaveBeenCalled(); expect(s).toHaveBeenCalled();
expect(s).toHaveBeenCalledWith(path.resolve(project_dir, java_file)); expect(s).toHaveBeenCalledWith(path.resolve(project_dir, java_file));
}); });
it('should delete empty directories after removing source code in a java src path hierarchy', function(){ it('Test#010 : should delete empty directories after removing source code in a java src path hierarchy', function(){
deleteJava(project_dir, java_file); deleteJava(project_dir, java_file);
expect(fs.existsSync(java_file)).not.toBe(true); expect(fs.existsSync(java_file)).not.toBe(true);
expect(fs.existsSync(java_dir)).not.toBe(true); expect(fs.existsSync(java_dir)).not.toBe(true);
expect(fs.existsSync(path.join(src,'one'))).not.toBe(true); expect(fs.existsSync(path.join(src,'one'))).not.toBe(true);
}); });
it('should never delete the top-level src directory, even if all plugins added were removed', function(){ it('Test#011 : should never delete the top-level src directory, even if all plugins added were removed', function(){
deleteJava(project_dir, java_file); deleteJava(project_dir, java_file);
expect(fs.existsSync(src)).toBe(true); expect(fs.existsSync(src)).toBe(true);
}); });
+38 -38
View File
@@ -50,7 +50,7 @@ describe('android project handler', function() {
beforeEach(function() { beforeEach(function() {
shell.mkdir('-p', temp); shell.mkdir('-p', temp);
dummyProject = AndroidProject.getProjectFile(temp); dummyProject = AndroidProject.getProjectFile(temp);
copyFileSpy.reset(); copyFileSpy.calls.reset();
common.__set__('copyFile', copyFileSpy); common.__set__('copyFile', copyFileSpy);
}); });
@@ -60,18 +60,18 @@ describe('android project handler', function() {
}); });
describe('of <lib-file> elements', function() { describe('of <lib-file> elements', function() {
it('should copy files', function () { it('Test#001 : should copy files', function () {
android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject); android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject);
expect(copyFileSpy).toHaveBeenCalledWith(dummyplugin, 'src/android/TestLib.jar', temp, path.join('libs', 'TestLib.jar'), false); expect(copyFileSpy).toHaveBeenCalledWith(dummyplugin, 'src/android/TestLib.jar', temp, path.join('libs', 'TestLib.jar'), false);
}); });
it('should copy files for Android Studio projects', function () { it('Test#002 : should copy files for Android Studio projects', function () {
android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject, {android_studio: true}); android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject, {android_studio: true});
expect(copyFileSpy).toHaveBeenCalledWith(dummyplugin, 'src/android/TestLib.jar', temp, path.join('app', 'libs', 'TestLib.jar'), false); expect(copyFileSpy).toHaveBeenCalledWith(dummyplugin, 'src/android/TestLib.jar', temp, path.join('app', 'libs', 'TestLib.jar'), false);
}); });
}); });
describe('of <resource-file> elements', function() { describe('of <resource-file> elements', function() {
it('should copy files', function () { it('Test#003 : should copy files', function () {
android['resource-file'].install(valid_resources[0], dummyPluginInfo, dummyProject); android['resource-file'].install(valid_resources[0], dummyPluginInfo, dummyProject);
expect(copyFileSpy).toHaveBeenCalledWith(dummyplugin, 'android-resource.xml', temp, path.join('res', 'xml', 'dummy.xml'), false); expect(copyFileSpy).toHaveBeenCalledWith(dummyplugin, 'android-resource.xml', temp, path.join('res', 'xml', 'dummy.xml'), false);
}); });
@@ -82,26 +82,26 @@ describe('android project handler', function() {
shell.cp('-rf', android_project, temp); shell.cp('-rf', android_project, temp);
}); });
it('should copy stuff from one location to another by calling common.copyFile', function() { it('Test#004 : should copy stuff from one location to another by calling common.copyFile', function() {
android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject); android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject);
expect(copyFileSpy) expect(copyFileSpy)
.toHaveBeenCalledWith(dummyplugin, 'src/android/DummyPlugin.java', temp, path.join('src/com/phonegap/plugins/dummyplugin/DummyPlugin.java'), false); .toHaveBeenCalledWith(dummyplugin, 'src/android/DummyPlugin.java', temp, path.join('src/com/phonegap/plugins/dummyplugin/DummyPlugin.java'), false);
}); });
it('should install source files to the right location for Android Studio projects', function() { it('Test#005 : should install source files to the right location for Android Studio projects', function() {
android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject, {android_studio: true}); android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject, {android_studio: true});
expect(copyFileSpy) expect(copyFileSpy)
.toHaveBeenCalledWith(dummyplugin, 'src/android/DummyPlugin.java', temp, path.join('app/src/main/java/com/phonegap/plugins/dummyplugin/DummyPlugin.java'), false); .toHaveBeenCalledWith(dummyplugin, 'src/android/DummyPlugin.java', temp, path.join('app/src/main/java/com/phonegap/plugins/dummyplugin/DummyPlugin.java'), false);
}); });
it('should throw if source file cannot be found', function() { it('Test#006 : should throw if source file cannot be found', function() {
common.__set__('copyFile', copyFileOrig); common.__set__('copyFile', copyFileOrig);
expect(function() { expect(function() {
android['source-file'].install(invalid_source[0], faultyPluginInfo, dummyProject); android['source-file'].install(invalid_source[0], faultyPluginInfo, dummyProject);
}).toThrow('"' + path.resolve(faultyplugin, 'src/android/NotHere.java') + '" not found!'); }).toThrow(new Error('"' + path.resolve(faultyplugin, 'src/android/NotHere.java') + '" not found!'));
}); });
it('should throw if target file already exists', function() { it('Test#007 : should throw if target file already exists', function() {
// write out a file // write out a file
var target = path.resolve(temp, 'src/com/phonegap/plugins/dummyplugin'); var target = path.resolve(temp, 'src/com/phonegap/plugins/dummyplugin');
shell.mkdir('-p', target); shell.mkdir('-p', target);
@@ -110,7 +110,7 @@ describe('android project handler', function() {
expect(function() { expect(function() {
android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject); android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject);
}).toThrow('"' + target + '" already exists!'); }).toThrow(new Error ('"' + target + '" already exists!'));
}); });
}); });
@@ -134,23 +134,23 @@ describe('android project handler', function() {
common.__set__('copyNewFile', copyNewFileOrig); common.__set__('copyNewFile', copyNewFileOrig);
}); });
it('should throw if framework doesn\'t have "src" attribute', function() { it('Test#008 : should throw if framework doesn\'t have "src" attribute', function() {
expect(function() { android.framework.install({}, dummyPluginInfo, dummyProject); }).toThrow(); expect(function() { android.framework.install({}, dummyPluginInfo, dummyProject); }).toThrow();
}); });
it('should install framework without "parent" attribute into project root', function() { it('Test#009 : should install framework without "parent" attribute into project root', function() {
var framework = {src: 'plugin-lib'}; var framework = {src: 'plugin-lib'};
android.framework.install(framework, dummyPluginInfo, dummyProject); android.framework.install(framework, dummyPluginInfo, dummyProject);
expect(dummyProject.addSystemLibrary).toHaveBeenCalledWith(dummyProject.projectDir, someString); expect(dummyProject.addSystemLibrary).toHaveBeenCalledWith(dummyProject.projectDir, someString);
}); });
it('should install framework with "parent" attribute into parent framework dir', function() { it('Test#010 : should install framework with "parent" attribute into parent framework dir', function() {
var childFramework = {src: 'plugin-lib2', parent: 'plugin-lib'}; var childFramework = {src: 'plugin-lib2', parent: 'plugin-lib'};
android.framework.install(childFramework, dummyPluginInfo, dummyProject); android.framework.install(childFramework, dummyPluginInfo, dummyProject);
expect(dummyProject.addSystemLibrary).toHaveBeenCalledWith(path.resolve(dummyProject.projectDir, childFramework.parent), someString); expect(dummyProject.addSystemLibrary).toHaveBeenCalledWith(path.resolve(dummyProject.projectDir, childFramework.parent), someString);
}); });
it('should not copy anything if "custom" attribute is not set', function() { it('Test#011 : should not copy anything if "custom" attribute is not set', function() {
var framework = {src: 'plugin-lib'}; var framework = {src: 'plugin-lib'};
var cpSpy = spyOn(shell, 'cp'); var cpSpy = spyOn(shell, 'cp');
android.framework.install(framework, dummyPluginInfo, dummyProject); android.framework.install(framework, dummyPluginInfo, dummyProject);
@@ -158,14 +158,14 @@ describe('android project handler', function() {
expect(cpSpy).not.toHaveBeenCalled(); expect(cpSpy).not.toHaveBeenCalled();
}); });
it('should copy framework sources if "custom" attribute is set', function() { it('Test#012 : should copy framework sources if "custom" attribute is set', function() {
var framework = {src: 'plugin-lib', custom: true}; var framework = {src: 'plugin-lib', custom: true};
android.framework.install(framework, dummyPluginInfo, dummyProject); android.framework.install(framework, dummyPluginInfo, dummyProject);
expect(dummyProject.addSubProject).toHaveBeenCalledWith(dummyProject.projectDir, someString); expect(dummyProject.addSubProject).toHaveBeenCalledWith(dummyProject.projectDir, someString);
expect(copyNewFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, framework.src, dummyProject.projectDir, someString, false); expect(copyNewFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, framework.src, dummyProject.projectDir, someString, false);
}); });
it('should install gradleReference using project.addGradleReference', function() { it('Test#013 : should install gradleReference using project.addGradleReference', function() {
var framework = {src: 'plugin-lib', custom: true, type: 'gradleReference'}; var framework = {src: 'plugin-lib', custom: true, type: 'gradleReference'};
android.framework.install(framework, dummyPluginInfo, dummyProject); android.framework.install(framework, dummyPluginInfo, dummyProject);
expect(copyNewFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, framework.src, dummyProject.projectDir, someString, false); expect(copyNewFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, framework.src, dummyProject.projectDir, someString, false);
@@ -183,13 +183,13 @@ describe('android project handler', function() {
platformWwwDest = path.resolve(dummyProject.platformWww, 'plugins', dummyPluginInfo.id, jsModule.src); platformWwwDest = path.resolve(dummyProject.platformWww, 'plugins', dummyPluginInfo.id, jsModule.src);
}); });
it('should put module to both www and platform_www when options.usePlatformWww flag is specified', function () { it('Test#014 : should put module to both www and platform_www when options.usePlatformWww flag is specified', function () {
android['js-module'].install(jsModule, dummyPluginInfo, dummyProject, {usePlatformWww: true}); android['js-module'].install(jsModule, dummyPluginInfo, dummyProject, {usePlatformWww: true});
expect(fs.writeFileSync).toHaveBeenCalledWith(wwwDest, jasmine.any(String), 'utf-8'); expect(fs.writeFileSync).toHaveBeenCalledWith(wwwDest, jasmine.any(String), 'utf-8');
expect(fs.writeFileSync).toHaveBeenCalledWith(platformWwwDest, jasmine.any(String), 'utf-8'); expect(fs.writeFileSync).toHaveBeenCalledWith(platformWwwDest, jasmine.any(String), 'utf-8');
}); });
it('should put module to www only when options.usePlatformWww flag is not specified', function () { it('Test#015 : should put module to www only when options.usePlatformWww flag is not specified', function () {
android['js-module'].install(jsModule, dummyPluginInfo, dummyProject); android['js-module'].install(jsModule, dummyPluginInfo, dummyProject);
expect(fs.writeFileSync).toHaveBeenCalledWith(wwwDest, jasmine.any(String), 'utf-8'); expect(fs.writeFileSync).toHaveBeenCalledWith(wwwDest, jasmine.any(String), 'utf-8');
expect(fs.writeFileSync).not.toHaveBeenCalledWith(platformWwwDest, jasmine.any(String), 'utf-8'); expect(fs.writeFileSync).not.toHaveBeenCalledWith(platformWwwDest, jasmine.any(String), 'utf-8');
@@ -205,13 +205,13 @@ describe('android project handler', function() {
platformWwwDest = path.resolve(dummyProject.platformWww, asset.target); platformWwwDest = path.resolve(dummyProject.platformWww, asset.target);
}); });
it('should put asset to both www and platform_www when options.usePlatformWww flag is specified', function () { it('Test#016 : should put asset to both www and platform_www when options.usePlatformWww flag is specified', function () {
android.asset.install(asset, dummyPluginInfo, dummyProject, {usePlatformWww: true}); android.asset.install(asset, dummyPluginInfo, dummyProject, {usePlatformWww: true});
expect(copyFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.www, asset.target); expect(copyFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.www, asset.target);
expect(copyFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.platformWww, asset.target); expect(copyFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.platformWww, asset.target);
}); });
it('should put asset to www only when options.usePlatformWww flag is not specified', function () { it('Test#017 : should put asset to www only when options.usePlatformWww flag is not specified', function () {
android.asset.install(asset, dummyPluginInfo, dummyProject); android.asset.install(asset, dummyPluginInfo, dummyProject);
expect(copyFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.www, asset.target); expect(copyFileSpy).toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.www, asset.target);
expect(copyFileSpy).not.toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.platformWww, asset.target); expect(copyFileSpy).not.toHaveBeenCalledWith(dummyPluginInfo.dir, asset.src, dummyProject.platformWww, asset.target);
@@ -244,21 +244,21 @@ describe('android project handler', function() {
common.__set__('deleteJava', deleteJavaOrig); common.__set__('deleteJava', deleteJavaOrig);
}); });
describe('of <lib-file> elements', function(done) { describe('of <lib-file> elements', function() {
it('should remove jar files', function () { it('Test#018 : should remove jar files', function () {
android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject); android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject);
android['lib-file'].uninstall(valid_libs[0], dummyPluginInfo, dummyProject); android['lib-file'].uninstall(valid_libs[0], dummyPluginInfo, dummyProject);
expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('libs/TestLib.jar')); expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('libs/TestLib.jar'));
}); });
it('should remove jar files for Android Studio projects', function () { it('Test#019 : should remove jar files for Android Studio projects', function () {
android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject, {android_studio:true}); android['lib-file'].install(valid_libs[0], dummyPluginInfo, dummyProject, {android_studio:true});
android['lib-file'].uninstall(valid_libs[0], dummyPluginInfo, dummyProject, {android_studio:true}); android['lib-file'].uninstall(valid_libs[0], dummyPluginInfo, dummyProject, {android_studio:true});
expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('app/libs/TestLib.jar')); expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('app/libs/TestLib.jar'));
}); });
}); });
describe('of <resource-file> elements', function(done) { describe('of <resource-file> elements', function() {
it('should remove files', function () { it('Test#020 : should remove files', function () {
android['resource-file'].install(valid_resources[0], dummyPluginInfo, dummyProject); android['resource-file'].install(valid_resources[0], dummyPluginInfo, dummyProject);
android['resource-file'].uninstall(valid_resources[0], dummyPluginInfo, dummyProject); android['resource-file'].uninstall(valid_resources[0], dummyPluginInfo, dummyProject);
expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('res/xml/dummy.xml')); expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('res/xml/dummy.xml'));
@@ -266,12 +266,12 @@ describe('android project handler', function() {
}); });
describe('of <source-file> elements', function() { describe('of <source-file> elements', function() {
it('should remove stuff by calling common.deleteJava', function() { it('Test#021 : should remove stuff by calling common.deleteJava', function() {
android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject); android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject);
android['source-file'].uninstall(valid_source[0], dummyPluginInfo, dummyProject); android['source-file'].uninstall(valid_source[0], dummyPluginInfo, dummyProject);
expect(deleteJavaSpy).toHaveBeenCalledWith(temp, path.join('src/com/phonegap/plugins/dummyplugin/DummyPlugin.java')); expect(deleteJavaSpy).toHaveBeenCalledWith(temp, path.join('src/com/phonegap/plugins/dummyplugin/DummyPlugin.java'));
}); });
it('should remove stuff by calling common.deleteJava for Android Studio projects', function() { it('Test#022 : should remove stuff by calling common.deleteJava for Android Studio projects', function() {
android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject, {android_studio:true}); android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject, {android_studio:true});
android['source-file'].uninstall(valid_source[0], dummyPluginInfo, dummyProject, {android_studio:true}); android['source-file'].uninstall(valid_source[0], dummyPluginInfo, dummyProject, {android_studio:true});
expect(deleteJavaSpy).toHaveBeenCalledWith(temp, path.join('app/src/main/java/com/phonegap/plugins/dummyplugin/DummyPlugin.java')); expect(deleteJavaSpy).toHaveBeenCalledWith(temp, path.join('app/src/main/java/com/phonegap/plugins/dummyplugin/DummyPlugin.java'));
@@ -290,30 +290,30 @@ describe('android project handler', function() {
spyOn(dummyProject, 'removeGradleReference'); spyOn(dummyProject, 'removeGradleReference');
}); });
it('should throw if framework doesn\'t have "src" attribute', function() { it('Test#023 : should throw if framework doesn\'t have "src" attribute', function() {
expect(function() { android.framework.uninstall({}, dummyPluginInfo, dummyProject); }).toThrow(); expect(function() { android.framework.uninstall({}, dummyPluginInfo, dummyProject); }).toThrow();
}); });
it('should uninstall framework without "parent" attribute into project root', function() { it('Test#024 : should uninstall framework without "parent" attribute into project root', function() {
var framework = {src: 'plugin-lib'}; var framework = {src: 'plugin-lib'};
android.framework.uninstall(framework, dummyPluginInfo, dummyProject); android.framework.uninstall(framework, dummyPluginInfo, dummyProject);
expect(dummyProject.removeSystemLibrary).toHaveBeenCalledWith(dummyProject.projectDir, someString); expect(dummyProject.removeSystemLibrary).toHaveBeenCalledWith(dummyProject.projectDir, someString);
}); });
it('should uninstall framework with "parent" attribute into parent framework dir', function() { it('Test#025 : should uninstall framework with "parent" attribute into parent framework dir', function() {
var childFramework = {src: 'plugin-lib2', parent: 'plugin-lib'}; var childFramework = {src: 'plugin-lib2', parent: 'plugin-lib'};
android.framework.uninstall(childFramework, dummyPluginInfo, dummyProject); android.framework.uninstall(childFramework, dummyPluginInfo, dummyProject);
expect(dummyProject.removeSystemLibrary).toHaveBeenCalledWith(path.resolve(dummyProject.projectDir, childFramework.parent), someString); expect(dummyProject.removeSystemLibrary).toHaveBeenCalledWith(path.resolve(dummyProject.projectDir, childFramework.parent), someString);
}); });
it('should remove framework sources if "custom" attribute is set', function() { it('Test#026 : should remove framework sources if "custom" attribute is set', function() {
var framework = {src: 'plugin-lib', custom: true}; var framework = {src: 'plugin-lib', custom: true};
android.framework.uninstall(framework, dummyPluginInfo, dummyProject); android.framework.uninstall(framework, dummyPluginInfo, dummyProject);
expect(dummyProject.removeSubProject).toHaveBeenCalledWith(dummyProject.projectDir, someString); expect(dummyProject.removeSubProject).toHaveBeenCalledWith(dummyProject.projectDir, someString);
expect(removeFileSpy).toHaveBeenCalledWith(dummyProject.projectDir, someString); expect(removeFileSpy).toHaveBeenCalledWith(dummyProject.projectDir, someString);
}); });
it('should install gradleReference using project.removeGradleReference', function() { it('Test#27 : should install gradleReference using project.removeGradleReference', function() {
var framework = {src: 'plugin-lib', custom: true, type: 'gradleReference'}; var framework = {src: 'plugin-lib', custom: true, type: 'gradleReference'};
android.framework.uninstall(framework, dummyPluginInfo, dummyProject); android.framework.uninstall(framework, dummyPluginInfo, dummyProject);
expect(removeFileSpy).toHaveBeenCalledWith(dummyProject.projectDir, someString); expect(removeFileSpy).toHaveBeenCalledWith(dummyProject.projectDir, someString);
@@ -333,19 +333,19 @@ describe('android project handler', function() {
spyOn(shell, 'rm'); spyOn(shell, 'rm');
var existsSyncOrig = fs.existsSync; var existsSyncOrig = fs.existsSync;
spyOn(fs, 'existsSync').andCallFake(function (file) { spyOn(fs, 'existsSync').and.callFake(function (file) {
if ([wwwDest, platformWwwDest].indexOf(file) >= 0 ) return true; if ([wwwDest, platformWwwDest].indexOf(file) >= 0 ) return true;
return existsSyncOrig.call(fs, file); return existsSyncOrig.call(fs, file);
}); });
}); });
it('should put module to both www and platform_www when options.usePlatformWww flag is specified', function () { it('Test#028 : should put module to both www and platform_www when options.usePlatformWww flag is specified', function () {
android['js-module'].uninstall(jsModule, dummyPluginInfo, dummyProject, {usePlatformWww: true}); android['js-module'].uninstall(jsModule, dummyPluginInfo, dummyProject, {usePlatformWww: true});
expect(shell.rm).toHaveBeenCalledWith('-Rf', wwwDest); expect(shell.rm).toHaveBeenCalledWith('-Rf', wwwDest);
expect(shell.rm).toHaveBeenCalledWith('-Rf', platformWwwDest); expect(shell.rm).toHaveBeenCalledWith('-Rf', platformWwwDest);
}); });
it('should put module to www only when options.usePlatformWww flag is not specified', function () { it('Test#29 : should put module to www only when options.usePlatformWww flag is not specified', function () {
android['js-module'].uninstall(jsModule, dummyPluginInfo, dummyProject); android['js-module'].uninstall(jsModule, dummyPluginInfo, dummyProject);
expect(shell.rm).toHaveBeenCalledWith('-Rf', wwwDest); expect(shell.rm).toHaveBeenCalledWith('-Rf', wwwDest);
expect(shell.rm).not.toHaveBeenCalledWith('-Rf', platformWwwDest); expect(shell.rm).not.toHaveBeenCalledWith('-Rf', platformWwwDest);
@@ -363,19 +363,19 @@ describe('android project handler', function() {
spyOn(shell, 'rm'); spyOn(shell, 'rm');
var existsSyncOrig = fs.existsSync; var existsSyncOrig = fs.existsSync;
spyOn(fs, 'existsSync').andCallFake(function (file) { spyOn(fs, 'existsSync').and.callFake(function (file) {
if ([wwwDest, platformWwwDest].indexOf(file) >= 0 ) return true; if ([wwwDest, platformWwwDest].indexOf(file) >= 0 ) return true;
return existsSyncOrig.call(fs, file); return existsSyncOrig.call(fs, file);
}); });
}); });
it('should put module to both www and platform_www when options.usePlatformWww flag is specified', function () { it('Test#030 : should put module to both www and platform_www when options.usePlatformWww flag is specified', function () {
android.asset.uninstall(asset, dummyPluginInfo, dummyProject, {usePlatformWww: true}); android.asset.uninstall(asset, dummyPluginInfo, dummyProject, {usePlatformWww: true});
expect(shell.rm).toHaveBeenCalledWith(jasmine.any(String), wwwDest); expect(shell.rm).toHaveBeenCalledWith(jasmine.any(String), wwwDest);
expect(shell.rm).toHaveBeenCalledWith(jasmine.any(String), platformWwwDest); expect(shell.rm).toHaveBeenCalledWith(jasmine.any(String), platformWwwDest);
}); });
it('should put module to www only when options.usePlatformWww flag is not specified', function () { it('Test#31 : should put module to www only when options.usePlatformWww flag is not specified', function () {
android.asset.uninstall(asset, dummyPluginInfo, dummyProject); android.asset.uninstall(asset, dummyPluginInfo, dummyProject);
expect(shell.rm).toHaveBeenCalledWith(jasmine.any(String), wwwDest); expect(shell.rm).toHaveBeenCalledWith(jasmine.any(String), wwwDest);
expect(shell.rm).not.toHaveBeenCalledWith(jasmine.any(String), platformWwwDest); expect(shell.rm).not.toHaveBeenCalledWith(jasmine.any(String), platformWwwDest);
+1 -1
View File
@@ -28,7 +28,7 @@ describe("run", function () {
var emulatorOpts = { emulator: true }; var emulatorOpts = { emulator: true };
var emptyOpts = {}; var emptyOpts = {};
it("should select correct target based on the run opts", function() { it("Test#001 : should select correct target based on the run opts", function() {
expect(getInstallTarget(targetOpts)).toBe("emu"); expect(getInstallTarget(targetOpts)).toBe("emu");
expect(getInstallTarget(deviceOpts)).toBe("--device"); expect(getInstallTarget(deviceOpts)).toBe("--device");
expect(getInstallTarget(emulatorOpts)).toBe("--emulator"); expect(getInstallTarget(emulatorOpts)).toBe("--emulator");