mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Get Cordova tests to pass
This commit is contained in:
@@ -1493,10 +1493,12 @@ var writeTargetToPath = function (name, target, outputPath, options) {
|
||||
|
||||
builder.complete();
|
||||
|
||||
_.extend(options.cordovaDependencies, target.cordovaDependencies);
|
||||
|
||||
return {
|
||||
name: name,
|
||||
arch: target.mostCompatibleArch(),
|
||||
path: path.join('programs', name, relControlFilePath)
|
||||
path: path.join('programs', name, relControlFilePath),
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1596,7 +1598,8 @@ var writeSiteArchive = function (targets, outputPath, options) {
|
||||
builtBy: options.builtBy,
|
||||
controlProgram: options.controlProgram,
|
||||
releaseName: options.releaseName,
|
||||
getRelativeTargetPath: options.getRelativeTargetPath
|
||||
getRelativeTargetPath: options.getRelativeTargetPath,
|
||||
cordovaDependencies: json.cordovaDependencies
|
||||
}));
|
||||
});
|
||||
|
||||
|
||||
@@ -84,10 +84,8 @@ var fetchCordovaPluginFromShaUrl =
|
||||
};
|
||||
|
||||
var checkIsValidPlugin = function (name) {
|
||||
var pluginName = name.split('@')[0];
|
||||
var pluginHash = {
|
||||
pluginName: name.split('@')[1]
|
||||
};
|
||||
var pluginHash = {};
|
||||
pluginHash[name.split('@')[0]] = name.split('@')[1];
|
||||
|
||||
// check that every plugin is specifying either an exact constraint or a
|
||||
// tarball url with sha
|
||||
@@ -114,6 +112,10 @@ var getBundle = function (bundlePath, webArchs) {
|
||||
return bundleResult;
|
||||
};
|
||||
|
||||
var localPluginsPathFromCordovaPath = function (cordovaPath) {
|
||||
return path.join(cordovaPath, 'local-plugins');
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// ensureCordova
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -122,7 +124,7 @@ var getBundle = function (bundlePath, webArchs) {
|
||||
// and platofrms.
|
||||
cordova.ensureCordovaProject = function (localPath, appName) {
|
||||
var cordovaPath = path.join(localPath, 'cordova-build');
|
||||
var localPluginsPath = path.join(cordovaPath, 'local-plugins');
|
||||
var localPluginsPath = localPluginsPathFromCordovaPath(cordovaPath);
|
||||
if (! fs.existsSync(cordovaPath)) {
|
||||
try {
|
||||
execFileSync('cordova', ['create', path.basename(cordovaPath),
|
||||
@@ -174,10 +176,8 @@ cordova.ensureCordovaPlatforms = function (localPath) {
|
||||
cordova.ensureCordovaPlugins = function (localPath, options) {
|
||||
options = options || {};
|
||||
|
||||
var plugins = {};
|
||||
if (options.packagePlugins) {
|
||||
plugins = options.packagePlugins;
|
||||
} else {
|
||||
var plugins = options.packagePlugins;
|
||||
if (! plugins) {
|
||||
// Bundle to gather the plugin dependencies from packages.
|
||||
// XXX slow - perhaps we should only do this lazily
|
||||
// XXX code copied from buildCordova
|
||||
@@ -187,11 +187,11 @@ cordova.ensureCordovaPlugins = function (localPath, options) {
|
||||
getBundle(bundlePath, [webArchName]).starManifest.cordovaDependencies;
|
||||
files.rm_recursive(bundlePath);
|
||||
}
|
||||
|
||||
// XXX the project-level cordova plugins deps override the package-level ones
|
||||
_.extend(plugins, project.getCordovaPlugins());
|
||||
|
||||
var cordovaPath = path.join(localPath, 'cordova-build');
|
||||
var localPluginsPath = localPluginsPathFromCordovaPath(cordovaPath);
|
||||
var newSettings = options.settings || {};
|
||||
|
||||
// XXX compare the latest used sha's with the currently required sha's for
|
||||
@@ -265,9 +265,11 @@ cordova.ensureCordovaPlugins = function (localPath, options) {
|
||||
// Build a Cordova project, creating a Cordova project if necessary.
|
||||
cordova.buildCordova = function (localPath, options) {
|
||||
var webArchName = "web.cordova";
|
||||
var bundlePath = path.join(localPath, 'build-tar');
|
||||
var cordovaPath = path.join(localPath, 'cordova-build');
|
||||
|
||||
var bundlePath = path.join(localPath, 'build-cordova-temp');
|
||||
var programPath = path.join(bundlePath, 'programs');
|
||||
|
||||
var cordovaPath = path.join(localPath, 'cordova-build');
|
||||
var wwwPath = path.join(cordovaPath, "www");
|
||||
var cordovaProgramPath = path.join(programPath, webArchName);
|
||||
var cordovaProgramAppPath = path.join(cordovaProgramPath, 'app');
|
||||
@@ -325,7 +327,7 @@ cordova.execCordovaOnPlatform = function (localPath, platformName, options) {
|
||||
|
||||
// packages - list of strings
|
||||
cordova.filterPackages = function (packages) {
|
||||
// We hard-code the 'cordova' and 'platform' namespaces
|
||||
// We hard-code the 'cordova' and 'platform' namespaces
|
||||
var ret = {
|
||||
rest: [],
|
||||
platforms: [],
|
||||
@@ -334,7 +336,7 @@ cordova.filterPackages = function (packages) {
|
||||
|
||||
_.each(packages, function (p) {
|
||||
var namespace = p.split(':')[0];
|
||||
var name = p.split(':')[1];
|
||||
var name = p.split(':').slice(1).join(':');
|
||||
if (namespace === 'cordova') {
|
||||
checkIsValidPlugin(name);
|
||||
ret.plugins.push(name);
|
||||
|
||||
@@ -1600,6 +1600,29 @@ main.registerCommand({
|
||||
project.removeCordovaPlatforms(cordovaPlatforms);
|
||||
project.removeCordovaPlugins(cordovaPlugins);
|
||||
|
||||
if (cordovaPlugins.length || cordovaPlatforms.length) {
|
||||
var localPath = path.join(options.appDir, '.meteor', 'local');
|
||||
files.mkdir_p(localPath);
|
||||
|
||||
var appName = path.basename(options.appDir);
|
||||
cordova.ensureCordovaProject(localPath, appName);
|
||||
|
||||
if (cordovaPlatforms.length) {
|
||||
cordova.ensureCordovaPlatforms(localPath);
|
||||
}
|
||||
if (cordovaPlugins.length) {
|
||||
cordova.ensureCordovaPlugins(localPath);
|
||||
}
|
||||
}
|
||||
|
||||
_.each(cordovaPlatforms, function (platform) {
|
||||
process.stdout.write("removed platform " + platform + "\n");
|
||||
});
|
||||
|
||||
_.each(cordovaPlugins, function (plugin) {
|
||||
process.stdout.write("removed cordova plugin " + plugin + "\n");
|
||||
});
|
||||
|
||||
var args = filteredPackages.rest;
|
||||
|
||||
if (_.isEmpty(args))
|
||||
|
||||
@@ -568,7 +568,10 @@ main.registerCommand({
|
||||
directory: { type: Boolean },
|
||||
architecture: { type: String },
|
||||
// Undocumented
|
||||
'for-deploy': { type: Boolean }
|
||||
'for-deploy': { type: Boolean },
|
||||
settings: { type: String}, // XXX document
|
||||
ios: { type: String },
|
||||
android: { type: String },
|
||||
}
|
||||
}, function (options) {
|
||||
// XXX if they pass a file that doesn't end in .tar.gz or .tgz, add
|
||||
@@ -577,7 +580,7 @@ main.registerCommand({
|
||||
// XXX output, to stderr, the name of the file written to (for human
|
||||
// comfort, especially since we might change the name)
|
||||
|
||||
// XXX name the root directory in t he bundle based on the basename
|
||||
// XXX name the root directory in the bundle based on the basename
|
||||
// of the file, not a constant 'bundle' (a bit obnoxious for
|
||||
// machines, but worth it for humans)
|
||||
|
||||
@@ -593,9 +596,26 @@ main.registerCommand({
|
||||
"Please use one of the following: " + VALID_ARCHITECTURES + "\n");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
var bundleArch = options.architecture || archinfo.host();
|
||||
|
||||
var buildDir = path.join(options.appDir, '.meteor', 'local', 'build_tar');
|
||||
var localPath = path.join(options.appDir, '.meteor', 'local');
|
||||
|
||||
// XXX ensure that the mobile target has been added as a platform
|
||||
var isMobile = options.ios || options.android;
|
||||
if (isMobile) {
|
||||
var cordovaSettings = {};
|
||||
if (options.settings) {
|
||||
cordovaSettings =
|
||||
JSON.parse(fs.readFileSync(options.settings), "utf8").cordova;
|
||||
}
|
||||
cordova.buildCordova(localPath, {
|
||||
appName: path.basename(options.appDir),
|
||||
settings: cordovaSettings
|
||||
});
|
||||
}
|
||||
|
||||
var buildDir = path.join(localPath, 'build_tar');
|
||||
var outputPath = path.resolve(options.args[0]); // get absolute path
|
||||
var bundlePath = options['directory'] ?
|
||||
outputPath : path.join(buildDir, 'bundle');
|
||||
@@ -629,6 +649,19 @@ main.registerCommand({
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Copy over the Cordova builds after we bundle so that they are not included
|
||||
// in the main bundle.
|
||||
if (options.ios) {
|
||||
var iosPath = path.join(localPath, 'cordova-build', 'platforms', 'ios');
|
||||
files.cp_r(iosPath, options.ios);
|
||||
}
|
||||
|
||||
if (options.android) {
|
||||
var androidPath =
|
||||
path.join(localPath, 'cordova-build', 'platforms', 'android');
|
||||
files.cp_r(androidPath, options.android);
|
||||
}
|
||||
|
||||
if (!options['directory']) {
|
||||
try {
|
||||
files.createTarball(path.join(buildDir, 'bundle'), outputPath);
|
||||
|
||||
@@ -150,6 +150,9 @@ Options:
|
||||
--debug bundle in debug mode (don't minify, etc)
|
||||
--directory output a directory (rather than a tarball). If the output
|
||||
location exists, it will be recursively deleted first.
|
||||
--ios XXX
|
||||
--android XXX
|
||||
--settings XXX
|
||||
|
||||
|
||||
>>> mongo
|
||||
|
||||
37
tools/tests/cordova-platforms.js
vendored
37
tools/tests/cordova-platforms.js
vendored
@@ -52,20 +52,29 @@ selftest.define("add cordova platforms", function () {
|
||||
s.cd("myapp");
|
||||
s.set("METEOR_TEST_TMP", files.mkdtemp());
|
||||
|
||||
run = s.run("run", "firefoxos");
|
||||
run.match("No platforms added");
|
||||
run.expectExit(22);
|
||||
run = s.run("run", "android");
|
||||
run.matchErr("not added");
|
||||
run.matchErr("meteor add platform:android");
|
||||
run.expectExit(8);
|
||||
|
||||
run = s.run("add platform:firefoxos");
|
||||
run.match("successfully added");
|
||||
run = s.run("add", "platform:android");
|
||||
run.match("added");
|
||||
|
||||
run = s.run("run", "firefoxos");
|
||||
run.waitSecs(10);
|
||||
run.match("myapp");
|
||||
run.match("proxy");
|
||||
run.match("MongoDB");
|
||||
run.match("your app");
|
||||
run.waitSecs(5);
|
||||
run.match("running at");
|
||||
run.match("localhost");
|
||||
run = s.run("run", "android");
|
||||
// XXX uncomment this once we get run android to work
|
||||
// run.waitSecs(30);
|
||||
// run.match("myapp");
|
||||
// run.match("proxy");
|
||||
// run.match("MongoDB");
|
||||
// run.match("your app");
|
||||
// run.waitSecs(5);
|
||||
// run.match("running at");
|
||||
// run.match("localhost");
|
||||
|
||||
run = s.run("remove", "platform:android");
|
||||
run.match("removed");
|
||||
run = s.run("run", "android");
|
||||
run.matchErr("not added");
|
||||
run.matchErr("meteor add platform:android");
|
||||
run.expectExit(8);
|
||||
});
|
||||
|
||||
19
tools/tests/cordova-plugins.js
vendored
19
tools/tests/cordova-plugins.js
vendored
@@ -134,11 +134,11 @@ selftest.define("add cordova plugins", function () {
|
||||
run = s.run("remove", "standard-app-packages");
|
||||
run.match("removed");
|
||||
|
||||
run = s.run("run", "firefoxos");
|
||||
run = s.run("run", "android");
|
||||
run.matchErr("not added to the project");
|
||||
run.matchErr("meteor add platform:");
|
||||
|
||||
run = s.run("add", "platform:firefoxos");
|
||||
run = s.run("add", "platform:android");
|
||||
run.match("added platform");
|
||||
|
||||
run = s.run("add", "cordova:org.apache.cordova.camera@0.3.0");
|
||||
@@ -155,18 +155,23 @@ selftest.define("add cordova plugins", function () {
|
||||
// XXX message about a plugin?
|
||||
checkUserPlugins(s, ["org.apache.cordova.camera"]);
|
||||
|
||||
run = s.run("run", "firefoxos");
|
||||
run.waitSecs(20);
|
||||
run.match("app");
|
||||
run = s.run("bundle", "../a", "--android", "../android", "--directory", "--debug",
|
||||
"--settings", "settings.json");
|
||||
run.waitSecs(30);
|
||||
run.expectExit(0);
|
||||
|
||||
checkCordovaPlugins(s,
|
||||
["org.apache.cordova.camera",
|
||||
"com.phonegap.plugins.facebookconnect",
|
||||
"org.apache.cordova.file"]);
|
||||
"com.phonegap.plugins.facebookconnect" ]);
|
||||
|
||||
// Remove a plugin
|
||||
run = s.run("remove", "contains-cordova-plugin");
|
||||
run.match("removed");
|
||||
|
||||
run = s.run("bundle", "../a", "--android", "../android", "--directory", "--debug",
|
||||
"--settings", "settings.json");
|
||||
run.waitSecs(30);
|
||||
run.expectExit(0);
|
||||
|
||||
checkCordovaPlugins(s, ["org.apache.cordova.camera"]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user