mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-31 17:32:51 +08:00
CB-9831 CB-9835 CB-9932 Added e2e tests
This commit is contained in:
parent
ff1c58def4
commit
32edaee3a2
@ -1,10 +1,8 @@
|
|||||||
language: android
|
language: android
|
||||||
sudo: false
|
sudo: false
|
||||||
install:
|
install:
|
||||||
- "(pushd .. && git clone https://github.com/apache/cordova-lib.git && popd)"
|
|
||||||
- npm link ../cordova-lib/cordova-common
|
|
||||||
- npm install
|
- npm install
|
||||||
- echo y | android update sdk -u --filter android-23
|
- echo y | android update sdk -u --filter android-22,android-23
|
||||||
script:
|
script:
|
||||||
- npm test
|
- npm test
|
||||||
- npm run test-build
|
- npm run test-build
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
"apache"
|
"apache"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "npm run jshint && jasmine-node --color spec",
|
"test": "npm run jshint && jasmine-node --color spec/create",
|
||||||
"test-build": "rm -rf \"test create\" && node ./bin/create \"test create\" com.test.app 応用 && \"./test create/cordova/build\" && rm -rf \"test create\"",
|
"test-build": "jasmine-node --captureExceptions --color spec/e2e",
|
||||||
"jshint": "node node_modules/jshint/bin/jshint bin && node node_modules/jshint/bin/jshint spec"
|
"jshint": "node node_modules/jshint/bin/jshint bin && node node_modules/jshint/bin/jshint spec"
|
||||||
},
|
},
|
||||||
"author": "Apache Software Foundation",
|
"author": "Apache Software Foundation",
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
require("promise-matchers");
|
require("promise-matchers");
|
||||||
|
|
||||||
var create = require("../bin/lib/create");
|
var create = require("../../bin/lib/create");
|
||||||
|
|
||||||
describe("create", function () {
|
describe("create", function () {
|
||||||
describe("validatePackageName", function() {
|
describe("validatePackageName", function() {
|
80
spec/e2e/create.spec.js
Normal file
80
spec/e2e/create.spec.js
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
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 actions = require('./helpers/projectActions.js');
|
||||||
|
|
||||||
|
var CREATE_TIMEOUT = 60000;
|
||||||
|
|
||||||
|
function createAndBuild(projectname, projectid, done) {
|
||||||
|
actions.createProject(projectname, projectid, function (error) {
|
||||||
|
expect(error).toBe(null);
|
||||||
|
actions.buildProject(projectid, function (error) {
|
||||||
|
expect(error).toBe(null);
|
||||||
|
actions.removeProject(projectid);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
describe('create', function() {
|
||||||
|
|
||||||
|
it('create project with ascii name, no spaces', function(done) {
|
||||||
|
var projectname = 'testcreate';
|
||||||
|
var projectid = 'com.test.create.app1';
|
||||||
|
|
||||||
|
createAndBuild(projectname, projectid, done);
|
||||||
|
}, CREATE_TIMEOUT);
|
||||||
|
|
||||||
|
it('create project with ascii name, and spaces', function(done) {
|
||||||
|
var projectname = 'test create';
|
||||||
|
var projectid = 'com.test.create.app2';
|
||||||
|
|
||||||
|
createAndBuild(projectname, projectid, done);
|
||||||
|
}, CREATE_TIMEOUT);
|
||||||
|
|
||||||
|
it('create project with unicode name, no spaces', function(done) {
|
||||||
|
var projectname = '応応応応用用用用';
|
||||||
|
var projectid = 'com.test.create.app3';
|
||||||
|
|
||||||
|
createAndBuild(projectname, projectid, done);
|
||||||
|
}, CREATE_TIMEOUT);
|
||||||
|
|
||||||
|
it('create project with unicode name, and spaces', function(done) {
|
||||||
|
var projectname = '応応応応 用用用用';
|
||||||
|
var projectid = 'com.test.create.app4';
|
||||||
|
|
||||||
|
createAndBuild(projectname, projectid, done);
|
||||||
|
}, CREATE_TIMEOUT);
|
||||||
|
|
||||||
|
it('create project with ascii+unicode name, no spaces', function(done) {
|
||||||
|
var projectname = '応応応応hello用用用用';
|
||||||
|
var projectid = 'com.test.create.app5';
|
||||||
|
|
||||||
|
createAndBuild(projectname, projectid, done);
|
||||||
|
}, CREATE_TIMEOUT);
|
||||||
|
|
||||||
|
it('create project with ascii+unicode name, and spaces', function(done) {
|
||||||
|
var projectname = '応応応応 hello 用用用用';
|
||||||
|
var projectid = 'com.test.create.app6';
|
||||||
|
|
||||||
|
createAndBuild(projectname, projectid, done);
|
||||||
|
}, CREATE_TIMEOUT);
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,15 @@
|
|||||||
|
# This file is automatically generated by Android Tools.
|
||||||
|
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||||
|
#
|
||||||
|
# This file must be checked in Version Control Systems.
|
||||||
|
#
|
||||||
|
# To customize properties used by the Ant build system edit
|
||||||
|
# "ant.properties", and override values to adapt the script to your
|
||||||
|
# project structure.
|
||||||
|
#
|
||||||
|
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
||||||
|
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
||||||
|
|
||||||
|
android.library=true
|
||||||
|
# Project target.
|
||||||
|
target=android-9
|
44
spec/e2e/fixtures/cordova-plugin-fake/plugin.xml
Normal file
44
spec/e2e/fixtures/cordova-plugin-fake/plugin.xml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
id="cordova-plugin-fake"
|
||||||
|
version="1.0.0">
|
||||||
|
|
||||||
|
<name>Fake</name>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
Fake plugin to test plugin installation and properties parsing on Android.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<license>Apache 2.0</license>
|
||||||
|
|
||||||
|
<engines>
|
||||||
|
<!-- Requires > 3.5.0 because of the custom framework tag for Android [CB-6698] -->
|
||||||
|
<engine name="cordova" version=">=3.5.0" />
|
||||||
|
</engines>
|
||||||
|
|
||||||
|
<!-- android -->
|
||||||
|
<platform name="android">
|
||||||
|
|
||||||
|
<framework src="platforms/android/FakeLib" custom="true" />
|
||||||
|
|
||||||
|
</platform>
|
||||||
|
</plugin>
|
151
spec/e2e/helpers/projectActions.js
Normal file
151
spec/e2e/helpers/projectActions.js
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
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 PluginInfoProvider = require('cordova-common').PluginInfoProvider,
|
||||||
|
shell = require('shelljs'),
|
||||||
|
cp = require('child_process'),
|
||||||
|
path = require('path'),
|
||||||
|
util = require('util');
|
||||||
|
|
||||||
|
var cordova_bin = path.join(__dirname, '../../../bin');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a project using platform create script with given parameters
|
||||||
|
* @param {string} projectname - name of the project
|
||||||
|
* @param {string} projectid - id of the project
|
||||||
|
* @param {string} platformpath - path to the platform
|
||||||
|
* @param {function} callback - function which is called (without arguments) when the project is created or (with error object) when error occurs
|
||||||
|
*/
|
||||||
|
module.exports.createProject = function (projectname, projectid, platformpath, callback) {
|
||||||
|
// platformpath is optional
|
||||||
|
if (!callback && typeof platformpath === 'function') {
|
||||||
|
callback = platformpath;
|
||||||
|
platformpath = null;
|
||||||
|
}
|
||||||
|
var projectDirName = getDirName(projectid);
|
||||||
|
var createScriptPath = platformpath ? path.join(platformpath, 'bin/create') : path.join(cordova_bin, 'create');
|
||||||
|
|
||||||
|
// remove existing folder
|
||||||
|
module.exports.removeProject(projectid);
|
||||||
|
|
||||||
|
// create the project
|
||||||
|
var command = util.format('%s %s %s "%s"', createScriptPath, projectDirName, projectid, projectname);
|
||||||
|
cp.exec(command, function (error, stdout, stderr) {
|
||||||
|
if (error) {
|
||||||
|
console.log(stdout);
|
||||||
|
console.error(stderr);
|
||||||
|
}
|
||||||
|
callback(error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a project using platform update script with given parameters
|
||||||
|
* @param {string} projectid - id of the project
|
||||||
|
* @param {string} platformpath - path to the platform
|
||||||
|
* @param {function} callback - function which is called (without arguments) when the project is updated or (with error object) when error occurs
|
||||||
|
*/
|
||||||
|
module.exports.updateProject = function (projectid, platformpath, callback) {
|
||||||
|
// platformpath is optional
|
||||||
|
if (!callback && typeof platformpath === 'function') {
|
||||||
|
callback = platformpath;
|
||||||
|
platformpath = null;
|
||||||
|
}
|
||||||
|
var projectDirName = getDirName(projectid);
|
||||||
|
var updateScriptPath = platformpath ? path.join(platformpath, 'bin/update') : path.join(cordova_bin, 'update');
|
||||||
|
var command = util.format('%s %s', updateScriptPath, projectDirName);
|
||||||
|
|
||||||
|
cp.exec(command, function (error, stdout, stderr) {
|
||||||
|
if (error) {
|
||||||
|
console.log(stdout);
|
||||||
|
console.error(stderr);
|
||||||
|
}
|
||||||
|
callback(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a project using platform build script with given parameters
|
||||||
|
* @param {string} projectid - id of the project
|
||||||
|
* @param {function} callback - function which is called (without arguments) when the project is built or (with error object) when error occurs
|
||||||
|
*/
|
||||||
|
module.exports.buildProject = function (projectid, callback) {
|
||||||
|
var projectDirName = getDirName(projectid);
|
||||||
|
var command = path.join(projectDirName, 'cordova/build');
|
||||||
|
|
||||||
|
cp.exec(command, function (error, stdout, stderr) {
|
||||||
|
if (error) {
|
||||||
|
console.log(stdout);
|
||||||
|
console.error(stderr);
|
||||||
|
}
|
||||||
|
callback(error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a project
|
||||||
|
* @param {string} projectid - id of the project
|
||||||
|
*/
|
||||||
|
module.exports.removeProject = function (projectid) {
|
||||||
|
var projectDirName = getDirName(projectid);
|
||||||
|
shell.rm('-rf', projectDirName);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a plugin to a project using platform api
|
||||||
|
* @param {string} projectid - id of the project
|
||||||
|
* @param {string} plugindir - path to a plugin
|
||||||
|
* @param {function} callback - function which is called (without arguments) when the plugin is added or (with error object) when error occurs
|
||||||
|
*/
|
||||||
|
module.exports.addPlugin = function (projectid, plugindir, callback) {
|
||||||
|
var projectDirName = getDirName(projectid);
|
||||||
|
var pip = new PluginInfoProvider();
|
||||||
|
var pluginInfo = pip.get(plugindir);
|
||||||
|
var Api = require(path.join(__dirname, '../../..', projectDirName, 'cordova', 'Api.js'));
|
||||||
|
var api = new Api('android', projectDirName);
|
||||||
|
|
||||||
|
api.addPlugin(pluginInfo).then(function () {
|
||||||
|
callback(null);
|
||||||
|
}, function (error) {
|
||||||
|
console.error(error);
|
||||||
|
callback(error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a version number from project using platform script
|
||||||
|
* @param {string} projectid - id of the project
|
||||||
|
* @param {function} callback - function which is called with platform version as an argument
|
||||||
|
*/
|
||||||
|
module.exports.getPlatformVersion = function (projectid, callback) {
|
||||||
|
var command = path.join(getDirName(projectid), 'cordova/version');
|
||||||
|
|
||||||
|
cp.exec(command, function (error, stdout, stderr) {
|
||||||
|
if (error) {
|
||||||
|
console.log(stdout);
|
||||||
|
console.error(stderr);
|
||||||
|
}
|
||||||
|
callback(stdout.trim());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function getDirName(projectid) {
|
||||||
|
return 'test-' + projectid;
|
||||||
|
}
|
44
spec/e2e/plugin.spec.js
Normal file
44
spec/e2e/plugin.spec.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
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 path = require('path'),
|
||||||
|
actions = require('./helpers/projectActions.js');
|
||||||
|
|
||||||
|
var PLUGIN_ADD_TIMEOUT = 60000;
|
||||||
|
|
||||||
|
describe('plugin add', function() {
|
||||||
|
|
||||||
|
it('create project and add a plugin with framework', function(done) {
|
||||||
|
var projectname = 'testpluginframework';
|
||||||
|
var projectid = 'com.test.plugin.framework';
|
||||||
|
var fakePluginPath = path.join(__dirname, 'fixtures/cordova-plugin-fake');
|
||||||
|
|
||||||
|
actions.createProject(projectname, projectid, function () {
|
||||||
|
actions.addPlugin(projectid, fakePluginPath, function (error) {
|
||||||
|
actions.removeProject(projectid);
|
||||||
|
if (error) {
|
||||||
|
console.error(error.stack);
|
||||||
|
}
|
||||||
|
expect(error).toBe(null);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, PLUGIN_ADD_TIMEOUT);
|
||||||
|
|
||||||
|
});
|
97
spec/e2e/update.spec.js
Normal file
97
spec/e2e/update.spec.js
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
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 actions = require('./helpers/projectActions.js'),
|
||||||
|
shell = require('shelljs'),
|
||||||
|
fs = require('fs'),
|
||||||
|
util = require('util'),
|
||||||
|
platformOld = { version: '4.0.0', path: 'cordova-android-old' },
|
||||||
|
platformEdge = { version: getCurrentVersion(), path: '.' };
|
||||||
|
|
||||||
|
var DOWNLOAD_TIMEOUT = 2 * 60 * 1000,
|
||||||
|
UPDATE_TIMEOUT = 60 * 1000,
|
||||||
|
PLATFORM_GIT_URL = 'https://github.com/apache/cordova-android';
|
||||||
|
|
||||||
|
function getCurrentVersion() {
|
||||||
|
return fs.readFileSync('VERSION').toString().trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testUpdate(projectname, projectid, createfrom, updatefrom, doBuild, done) {
|
||||||
|
actions.createProject(projectname, projectid, createfrom.path, function (error) {
|
||||||
|
expect(error).toBe(null);
|
||||||
|
actions.updateProject(projectid, updatefrom.path, function (error) {
|
||||||
|
expect(error).toBe(null);
|
||||||
|
actions.getPlatformVersion(projectid, function (v) {
|
||||||
|
expect(v).toEqual(updatefrom.version);
|
||||||
|
if (doBuild) {
|
||||||
|
actions.buildProject(projectid, function (error) {
|
||||||
|
expect(error).toBe(null);
|
||||||
|
actions.removeProject(projectid);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
actions.removeProject(projectid);
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('preparing fixtures', function () {
|
||||||
|
|
||||||
|
it('cloning old platform', function (done) {
|
||||||
|
var command = util.format('git clone %s --depth=1 --branch %s %s',
|
||||||
|
PLATFORM_GIT_URL, platformOld.version, platformOld.path);
|
||||||
|
shell.rm('-rf', platformOld.path);
|
||||||
|
shell.exec(command, { silent: true }, function (err) {
|
||||||
|
expect(err).toBe(0);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}, DOWNLOAD_TIMEOUT);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('update', function() {
|
||||||
|
|
||||||
|
it('should update major version and build the project', function(done) {
|
||||||
|
var projectname = 'testupdate';
|
||||||
|
var projectid = 'com.test.update.app1';
|
||||||
|
|
||||||
|
testUpdate(projectname, projectid, platformOld, platformEdge, true, done);
|
||||||
|
|
||||||
|
}, UPDATE_TIMEOUT);
|
||||||
|
|
||||||
|
it('should downgrade major version and build the project', function(done) {
|
||||||
|
var projectname = 'testupdate';
|
||||||
|
var projectid = 'com.test.update.app2';
|
||||||
|
|
||||||
|
testUpdate(projectname, projectid, platformEdge, platformOld, true, done);
|
||||||
|
}, UPDATE_TIMEOUT);
|
||||||
|
|
||||||
|
// TODO: After next Android release, add tests for minor/patch version update
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('cleanup', function () {
|
||||||
|
|
||||||
|
it('remove cloned old platform', function() {
|
||||||
|
shell.rm('-rf', platformOld.path);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user