Improve --help message and Fix -e/--eval switch
authorSteve Engledow <steve.engledow@proxama.com>
Tue, 5 Jul 2011 11:07:08 +0000 (12:07 +0100)
committerkoichik <koichik@improvement.jp>
Sat, 16 Jul 2011 06:24:36 +0000 (15:24 +0900)
--help should at least give some hint that node takes the -e switch

Update help message to include -e and swap eval block with module load block so argv works correctly

[steve@sane node](master)$ ./node -e 'process.argv' foo bar
[ '/home/steve/code/node/node', 'foo', 'bar' ]

:)

Add simple test for -e option.

Fixes #1311.

src/node.cc
src/node.js
test/simple/test-eval.js [new file with mode: 0644]

index 78ac8a8..aca5f6a 100644 (file)
@@ -2241,11 +2241,12 @@ static void ParseDebugOpt(const char* arg) {
 }
 
 static void PrintHelp() {
-  printf("Usage: node [options] script.js [arguments] \n"
-         "       node debug script.js [arguments] \n"
+  printf("Usage: node [options] [ -e script | script.js ] [arguments] \n"
+         "       node debug [ -e script | script.js ] [arguments] \n"
          "\n"
          "Options:\n"
          "  -v, --version        print node's version\n"
+         "  -e, --eval script    evaluate script\n"
          "  --v8-options         print v8 command line options\n"
          "  --vars               print various compiled-in variables\n"
          "  --max-stack-size=val set max v8 stack size (bytes)\n"
index 8be8594..e4a9de4 100644 (file)
       var d = NativeModule.require('_debugger');
       d.start();
 
+    } else if (process._eval != null) {
+      // User passed '-e' or '--eval' arguments to Node.
+      var Module = NativeModule.require('module');
+      var path = NativeModule.require('path');
+      var cwd = process.cwd();
+
+      var module = new Module('eval');
+      module.filename = path.join(cwd, 'eval');
+      module.paths = Module._nodeModulePaths(cwd);
+      var rv = module._compile('return eval(process._eval)', 'eval');
+      console.log(rv);
+
     } else if (process.argv[1]) {
       // make process.argv[1] into a full path
       if (!(/^http:\/\//).exec(process.argv[1])) {
       // Main entry point into most programs:
       process.nextTick(Module.runMain);
 
-    } else if (process._eval != null) {
-      // User passed '-e' or '--eval' arguments to Node.
-      var Module = NativeModule.require('module');
-      var path = NativeModule.require('path');
-      var cwd = process.cwd();
-
-      var module = new Module('eval');
-      module.filename = path.join(cwd, 'eval');
-      module.paths = Module._nodeModulePaths(cwd);
-      var rv = module._compile('return eval(process._eval)', 'eval');
-      console.log(rv);
-
     } else {
       var binding = process.binding('stdio');
       var fd = binding.openStdin();
diff --git a/test/simple/test-eval.js b/test/simple/test-eval.js
new file mode 100644 (file)
index 0000000..c80ad8d
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+require('../common');
+var assert = require('assert');
+var exec = require('child_process').exec;
+
+var success_count = 0;
+var error_count = 0;
+
+var cmd = [process.execPath, '-e', '"process.argv"', 'foo', 'bar'].join(' ');
+var expected = "[ '" + process.execPath + "',\n  'foo',\n  'bar' ]\n";
+var child = exec(cmd, function(err, stdout, stderr) {
+  if (err) {
+    console.log(err.toString());
+    ++error_count;
+    return;
+  }
+  assert.equal(stdout, expected);
+  ++success_count;
+});
+
+process.addListener('exit', function() {
+  assert.equal(1, success_count);
+  assert.equal(0, error_count);
+});
+