From da51ebfecc4a1a210d5d764893e37712fe2d8062 Mon Sep 17 00:00:00 2001 From: srfrnk Date: Fri, 23 Feb 2018 09:18:52 +0200 Subject: [PATCH] fix: #5 --- .vscode/launch.json | 17 +++++++++++++++++ gulpfile.js | 6 +++--- package-lock.json | 18 ++++++++++++++++++ re-tree.js | 16 ++++++++++++++++ test/server.js | 19 +++++++++++++++++++ 5 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..f445d37 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Gulp test-server", + "program": "${workspaceRoot}/node_modules/gulp/bin/gulp.js", + "args": ["test-server"], + "outputCapture": "std", + "runtimeExecutable": "/home/shahar/.nvm/versions/node/v6.9.1/bin/node" + } + ] +} diff --git a/gulpfile.js b/gulpfile.js index ece228b..110ab0c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -16,16 +16,16 @@ gulp.task('minify', function () { /** * Run test once and exit */ -gulp.task('test', ['test client', 'test server']); +gulp.task('test', ['test-client', 'test-server']); -gulp.task('test client', function (done) { +gulp.task('test-client', function (done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, done); }); -gulp.task('test server', function () { +gulp.task('test-server', function () { return gulp.src('test/server.js') .pipe(jasmine()); }); diff --git a/package-lock.json b/package-lock.json index 90397ca..80bcc0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -522,6 +522,16 @@ "null-check": "1.0.0" } }, + "fsevents": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-0.3.8.tgz", + "integrity": "sha1-mZLxAyySXIKVVNDVmAHcoDE6U1Y=", + "dev": true, + "optional": true, + "requires": { + "nan": "2.9.2" + } + }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -4347,6 +4357,7 @@ "anymatch": "1.3.0", "arrify": "1.0.0", "async-each": "0.1.6", + "fsevents": "0.3.8", "glob-parent": "1.2.0", "is-binary-path": "1.0.0", "is-glob": "1.1.3", @@ -6816,6 +6827,13 @@ "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", "dev": true }, + "nan": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", + "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==", + "dev": true, + "optional": true + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", diff --git a/re-tree.js b/re-tree.js index 28e9ea3..41bcf43 100644 --- a/re-tree.js +++ b/re-tree.js @@ -44,6 +44,22 @@ return (!!res) ? res : exec(string, item); }, null); } + else if (regex && Array.isArray(regex.and)) { + if(test(string,regex)) + { + return exec(string,regex.and); + } + else + { + return null; + } + } + else if (regex && Array.isArray(regex.or)) { + return exec(string,regex.or); + } + else if (regex && regex.not) { + return !exec(string, regex.not)?[]:null; + } else { return null; } diff --git a/test/server.js b/test/server.js index 920beb7..89b5a17 100644 --- a/test/server.js +++ b/test/server.js @@ -196,6 +196,25 @@ var re = { expect(reTree.exec("1234d5678",[/^\d+([a-z]+)\d+$/,/^\d+a([a-z]+)\d+$/])).toEqual(/^\d+([a-z]+)\d+$/.exec("1234d5678")); expect(reTree.exec("1234d5678",[/^\d+([a-z]+)\d+$/,/^\d+a([a-z]+)\d+$/])).not.toEqual(/^\d+(a[a-z]+)\d+$/.exec("1234d5678")); }); + + // Issue #5 + it('should handle AND expressions',function(){ + expect(reTree.exec("1234d5678",{and:[/2(.)/,/3/]})).toEqual(/2(.)/.exec("1234d5678")); + expect(reTree.exec("1234d5678",{and:[/2(.)/,/9/]})).toEqual(null); + }); + it('should handle OR expressions',function(){ + expect(reTree.exec("1234d5678",{or:[/2(.)/,/3/]})).toEqual(/2(.)/.exec("1234d5678")); + expect(reTree.exec("1234d5678",{or:[/9(.)/,/3(.)/]})).toEqual(/3(.)/.exec("1234d5678")); + expect(reTree.exec("1234d5678",{or:[/9(.)/,/10/]})).toEqual(null); + }); + it('should handle NOT expressions',function(){ + expect(reTree.exec("1234d5678",{not:/9/})).toEqual([]); + expect(reTree.exec("1234d5678",{not:/8/})).toEqual(null); + }); + it('should handle complex expressions',function(){ + expect(reTree.exec("1234d5678",{and:[{or:[/2(.)/,/3/]},{not:/9/}]})).toEqual(/2(.)/.exec("1234d5678")); + expect(reTree.exec("1234d5678",{and:[{or:[/2(.)/,/3/]},/9/]})).toEqual(null); + }); }); }); })();