From 8ef5b3bedd3059675af407260a4add53c4875d1b Mon Sep 17 00:00:00 2001 From: slavaGanzin Date: Thu, 4 May 2017 19:41:44 +0300 Subject: [PATCH 1/4] cli: inline evaluate --- bin/cli.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index ba9951ba6..e67c901c9 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -22,6 +22,7 @@ * * Example usage: * mathjs Open a command prompt + * mathjs 1+2 Evaluate expression * mathjs script.txt Run a script file * mathjs script1.txt script2.txt Run two script files * mathjs script.txt > results.txt Run a script file, output to file @@ -420,9 +421,14 @@ else if (scripts.length === 0) { runStream(process.stdin, process.stdout, mode, parenthesis); } else { - //work through the queue of scripts - scripts.forEach(function (arg) { - // run a script file - runStream(fs.createReadStream(arg), process.stdout, mode, parenthesis); - }); + fs.stat(scripts[0], (e, f) => { + if (e) + return console.log(getMath().eval(scripts.join(' '))) + + //work through the queue of scripts + scripts.forEach(function (arg) { + // run a script file + runStream(fs.createReadStream(arg), process.stdout, mode, parenthesis); + }); + }) } From 074dbcda9df03198dbf393cbe2e02f288941b462 Mon Sep 17 00:00:00 2001 From: slavaGanzin Date: Thu, 4 May 2017 22:15:46 +0300 Subject: [PATCH 2/4] cli: stringify inline evaluation --- bin/cli.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index e67c901c9..a2077f5ae 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -423,8 +423,8 @@ else if (scripts.length === 0) { else { fs.stat(scripts[0], (e, f) => { if (e) - return console.log(getMath().eval(scripts.join(' '))) - + return console.log(getMath().eval(scripts.join(' ')).toString()) + //work through the queue of scripts scripts.forEach(function (arg) { // run a script file From 61db2e889cf18cbe4f3ae3d1667c40905a1e1821 Mon Sep 17 00:00:00 2001 From: slavaGanzin Date: Thu, 4 May 2017 22:21:39 +0300 Subject: [PATCH 3/4] cli: fix evaluate help message --- bin/cli.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/cli.js b/bin/cli.js index a2077f5ae..d7842d93a 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -337,7 +337,7 @@ function outputHelp() { console.log('functions, and a flexible expression parser.'); console.log(); console.log('Usage:'); - console.log(' mathjs [scriptfile(s)] {OPTIONS}'); + console.log(' mathjs [scriptfile(s)|expression] {OPTIONS}'); console.log(); console.log('Options:'); console.log(' --version, -v Show application version'); @@ -349,6 +349,7 @@ function outputHelp() { console.log(); console.log('Example usage:'); console.log(' mathjs Open a command prompt'); + console.log(' mathjs 1+2 Evaluate expression'); console.log(' mathjs script.txt Run a script file'); console.log(' mathjs script.txt script2.txt Run two script files'); console.log(' mathjs script.txt > results.txt Run a script file, output to file'); From fa3aa92156de7fd288c63f55d2b630ed2cba5f4d Mon Sep 17 00:00:00 2001 From: slavaGanzin Date: Mon, 8 May 2017 15:15:20 +0300 Subject: [PATCH 4/4] add tests --- bin/cli.js | 17 +++++++++-------- test/cli/cli.js | 40 ++++++++++++++++++++++++++++++++++++++++ test/cli/script1 | 1 + test/cli/script2 | 1 + 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 test/cli/cli.js create mode 100644 test/cli/script1 create mode 100644 test/cli/script2 diff --git a/bin/cli.js b/bin/cli.js index d7842d93a..653489b6e 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -422,14 +422,15 @@ else if (scripts.length === 0) { runStream(process.stdin, process.stdout, mode, parenthesis); } else { - fs.stat(scripts[0], (e, f) => { - if (e) - return console.log(getMath().eval(scripts.join(' ')).toString()) - + fs.stat(scripts[0], function(e, f) { + if (e) { + console.log(getMath().eval(scripts.join(' ')).toString()) + } else { //work through the queue of scripts - scripts.forEach(function (arg) { - // run a script file - runStream(fs.createReadStream(arg), process.stdout, mode, parenthesis); - }); + scripts.forEach(function (arg) { + // run a script file + runStream(fs.createReadStream(arg), process.stdout, mode, parenthesis); + }); + } }) } diff --git a/test/cli/cli.js b/test/cli/cli.js new file mode 100644 index 000000000..56e8428d5 --- /dev/null +++ b/test/cli/cli.js @@ -0,0 +1,40 @@ +var assert = require('assert') +var cp = require('child_process') + +function run(args, done) { + cp.exec('bin/cli.js "' + args +'"', function(e,r) { + done(e, r.replace(/\n$/g, '')) + }) +} +describe('evaluate expression', function() { + it('should sum numbers', function(done) { + run('1+1', function(e, result) { + assert.equal(result, 2) + done() + }) + }) + + it('should multiply matrices', function(done) { + run('[1,2] * [3,4]', function(e, result) { + assert.equal(result, 11) + done() + }) + }) + + it('should thow error', function(done) { + run('y=x', function(e, result) { + assert.equal(/^Error/g.test(e.toString()),true) + done() + }) + }) + + it('should interpret scripts', function(done) { + run('test/cli/script1" "test/cli/script2', function(e, result){ + result = result.split('\n') + assert.equal(result[0], 2) + assert.equal(result[1], 8) + done() + }) + }) + +}) diff --git a/test/cli/script1 b/test/cli/script1 new file mode 100644 index 000000000..c040fa67d --- /dev/null +++ b/test/cli/script1 @@ -0,0 +1 @@ +1+1 diff --git a/test/cli/script2 b/test/cli/script2 new file mode 100644 index 000000000..63c10fdf2 --- /dev/null +++ b/test/cli/script2 @@ -0,0 +1 @@ +2*4