diff --git a/lib/bundler.js b/lib/bundler.js index e278488b95..8a1c90d9a4 100644 --- a/lib/bundler.js +++ b/lib/bundler.js @@ -397,9 +397,10 @@ _.extend(Bundle.prototype, { pkg.on_use_handler(inst.api, where); }, - includeTests: function (packageName) { + includeTests: function (packageOrPackageName) { var self = this; - var pkg = packages.get(self.releaseManifest, packageName); + // 'packages.get' is a noop if 'packageOrPackageName' is a Package object. + var pkg = packages.get(self.releaseManifest, packageOrPackageName); if (self.tests_included[pkg.id]) return; self.tests_included[pkg.id] = true; @@ -766,8 +767,8 @@ _.extend(Bundle.prototype, { * 'symlink' : symlink from a prebuild local installation. used * by `meteor run` * - * - testPackages : array of package names whose tests should be included - * in this bundle + * - testPackages : array of package objects or package names whose + * tests should be included in this bundle * * - versionOverride : (for tests) a meteor release version to use * instead of reading from .meteor/version @@ -793,8 +794,8 @@ exports.bundle = function (app_dir, output_path, options) { // Include tests if requested if (options.testPackages) { - _.each(options.testPackages, function(packageName) { - bundle.includeTests(packageName); + _.each(options.testPackages, function(packageOrPackageName) { + bundle.includeTests(packageOrPackageName); }); } diff --git a/lib/meteor.js b/lib/meteor.js index c2819b1853..b1574183e2 100644 --- a/lib/meteor.js +++ b/lib/meteor.js @@ -153,13 +153,21 @@ Fiber(function () { var opt = require('optimist') .alias('port', 'p').default('port', 3000) .describe('port', 'Port to listen on. NOTE: Also uses port N+1 and N+2.') - .describe('release', 'Meteor release version to test.') - .describe('deploy', 'Optionally, specify a domain to deploy to instead of running locally.') + .describe('deploy', 'Optionally, specify a domain to deploy to, rather than running locally.') .boolean('once') // See #Once .usage( - "Usage: meteor test-packages [options] [comma delimited packages]\n" + + "Usage: \n" + "\n" + - "Run unit tests for packages. Point your browser to localhost:3000 to see results."); + "meteor test-packages [--release=x.y.z] --package-dir= [options]\n" + + " Runs unit tests on one package located on disk.\n" + + "\n" + + "meteor test-packages [--release=x.y.z] [comma delimited package names] [options]\n" + + " Runs unit tests for a set of packages.\n" + + "\n" + + "You must either pass the --release option, or be in a git checkout of Meteor,\n" + + "in which cases local packages are loaded.\n" + + "\n" + + "Point your browser to localhost:3000 to run tests and see results.\n"); var new_argv = opt.argv; @@ -172,14 +180,26 @@ Fiber(function () { var releaseVersion = new_argv['release']; var testPackages; - if (new_argv._[1]) { - testPackages = new_argv._[1].split(','); + if (new_argv["package-dir"]) { + var packageDir = path.resolve(new_argv["package-dir"], "."); // strips trailing path.sep + // was important to strip trailing path.sep, otherwise we'd get a package named "foo/" + var packageName = path.basename(packageDir); + testPackages = [packages.loadFromDir(packageName, packageDir)]; } else { - if (releaseVersion) { - var releaseManifest = warehouse.releaseManifestByVersion(releaseVersion); - testPackages = _.keys(packages.list(releaseManifest)); + if (new_argv._[1]) { + testPackages = new_argv._[1].split(','); } else { - testPackages = _.keys(packages.list()); + if (releaseVersion) { + var releaseManifest = warehouse.releaseManifestByVersion(releaseVersion); + testPackages = _.keys(packages.list(releaseManifest)); + } else { + if (files.in_checkout()) { + testPackages = _.keys(packages.list()); + } else { + process.stdout.write("Please specify a release version."); + process.exit(1); + } + } } } diff --git a/tools/cli-test.sh b/tools/cli-test.sh index 1345b4b3bb..155b135cd7 100755 --- a/tools/cli-test.sh +++ b/tools/cli-test.sh @@ -142,10 +142,30 @@ sleep 2 # need to make sure these kills take effect echo "... test-packages" -if [ ! "$TEST_INSTALLED_METEOR" ]; then - $METEOR test-packages -p $PORT >> $OUTPUT 2>&1 & +mkdir -p "$TMPDIR/local-packages/die-now/" +cat > "$TMPDIR/local-packages/die-now/package.js" <> $OUTPUT 2>&1 else + $METEOR test-packages -p $PORT --package-dir="$TMPDIR/local-packages/die-now/" | grep Dying >> $OUTPUT 2>&1 +fi +# since the server process was killed via 'process.exit', mongo is still running. +ps ax | grep -e "$MONGOMARK" | grep -v grep | awk '{print $1}' | xargs kill || true +sleep 2 # make sure mongo is dead + + +if [ "$TEST_INSTALLED_METEOR" ]; then + ( ! $METEOR test-packages -p $PORT ) | grep "Please specify a release version" >> $OUTPUT 2>&1 $METEOR test-packages --release=0.0.1 -p $PORT >> $OUTPUT 2>&1 & +else + $METEOR test-packages -p $PORT >> $OUTPUT 2>&1 & fi METEOR_PID=$! diff --git a/tools/run-all-tests.sh b/tools/run-all-tests.sh index 04f4766a64..faab261a91 100755 --- a/tools/run-all-tests.sh +++ b/tools/run-all-tests.sh @@ -21,7 +21,8 @@ TARGET_DIR=$ENGINE_DIR admin/build-engine-tree.sh export TEST_INSTALLED_METEOR=1 # to use the --release option on `meteor test-packages` export TEST_WAREHOUSE_DIR=$(make_temp_dir meteor-installed-cli-tests-warehouse) # run with empty warehouse METEOR_DIR=$ENGINE_DIR/bin ./cli-test.sh - +unset TEST_INSTALLED_METEOR +unset TEST_WAREHOUSE_DIR ## Run bundler unit tests ./bundler-test.sh