stringtokenizer
Advanced tools
| module.exports = { | ||
| setUp: function(callback) { | ||
| this.tokenizer = require('../lib/tokenizer.js').getInstance(); | ||
| callback(); | ||
| }, | ||
| "Test tokenization without any variables": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('hello world'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('hello world', tokenized.template); | ||
| test.equals('/^hello world$/', tokenized.matcher.toString()); | ||
| test.equals(0, tokenized.tokens.length); | ||
| test.done(); | ||
| }, | ||
| "Test tokenization with a single simple variable": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId}'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('/user/{userId}', tokenized.template); | ||
| test.equals('/^/user/([\\w\\d]+)$/', tokenized.matcher.toString()); | ||
| test.equals(1, tokenized.tokens.length); | ||
| test.equals('userId', tokenized.tokens[0]); | ||
| test.done(); | ||
| }, | ||
| "Test tokenization with multiple variables": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/one/{two}/three/{four}'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('/one/{two}/three/{four}', tokenized.template); | ||
| test.equals('/^/one/([\\w\\d]+)/three/([\\w\\d]+)$/', tokenized.matcher.toString()); | ||
| test.equals(2, tokenized.tokens.length); | ||
| test.equals('two', tokenized.tokens[0]); | ||
| test.done(); | ||
| }, | ||
| "Test tokenization with custom matcher": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId:[0-9]{4}}'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('/user/{userId:[0-9]{4}}', tokenized.template); | ||
| test.equals('/^/user/([0-9]{4})$/', tokenized.matcher.toString()); | ||
| test.equals(1, tokenized.tokens.length); | ||
| test.equals('userId', tokenized.tokens[0]); | ||
| test.done(); | ||
| }, | ||
| "Test parsing with tokenized object - no match": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('hello world'); | ||
| var parsed = this.tokenizer.parse('hello worldd', tokenized); | ||
| test.ok(!parsed); | ||
| test.done(); | ||
| }, | ||
| "Test parsing with tokenized object containing a single variable": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId}'); | ||
| var parsed = this.tokenizer.parse('/user/1234', tokenized); | ||
| test.ok(parsed); | ||
| test.ok(parsed.userId); | ||
| test.equals('1234', parsed.userId); | ||
| var parsed = this.tokenizer.parse('/user/bcarr', tokenized); | ||
| test.ok(parsed); | ||
| test.equals('bcarr', parsed.userId); | ||
| test.done(); | ||
| }, | ||
| "Test parsing with tokenized object containing single variable with custom matcher": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId:[0-9]{4}}'); | ||
| var parsed = this.tokenizer.parse('/user/123', tokenized); | ||
| test.ok(!parsed); // no match - null parsed object | ||
| var parsed = this.tokenizer.parse('/user/12345', tokenized); | ||
| test.ok(!parsed) // no match - null parsed object | ||
| var parsed = this.tokenizer.parse('/user/asdf', tokenized); | ||
| test.ok(!parsed); // no match - null parsed object | ||
| var parsed = this.tokenizer.parse('/user/1234', tokenized); | ||
| test.ok(parsed) // good match! | ||
| test.ok(parsed.userId); | ||
| test.equals('1234', parsed.userId); | ||
| test.done(); | ||
| } | ||
| }; |
+2
-2
@@ -5,3 +5,3 @@ { | ||
| "description": "JavaScript string parsing micro-module for Nodejs.", | ||
| "version": "0.0.2", | ||
| "version": "0.0.3", | ||
| "repository": { | ||
@@ -19,3 +19,3 @@ "type": "git", | ||
| "scripts": { | ||
| "test": "nodeunit tests/" | ||
| "test": "nodeunit test/" | ||
| }, | ||
@@ -22,0 +22,0 @@ "keywords": [ |
+33
-2
@@ -11,4 +11,35 @@ Nodejs StringTokenizer | ||
| Install: `npm install` | ||
| Installation | ||
| --------------- | ||
| npm install stringtokenizer | ||
| Test: `npm test` | ||
| Use | ||
| --------------- | ||
| var tokenizer = require('stringtokenizer').getInstance(); | ||
| var tokenized = tokenizer.tokenize("/user/{id}"); | ||
| var parsed = tokenizer.parse("/user/1234", tokenized); | ||
| Testing | ||
| --------------- | ||
| npm test | ||
| License | ||
| ------- | ||
| The MIT License | ||
| Copyright (c) 2013 Brian Carr | ||
| 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 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. |
| module.exports = { | ||
| setUp: function(callback) { | ||
| this.tokenizer = require('../lib/tokenizer.js').getInstance(); | ||
| callback(); | ||
| }, | ||
| "Test tokenization without any variables": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('hello world'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('hello world', tokenized.template); | ||
| test.equals('/^hello world$/', tokenized.matcher.toString()); | ||
| test.equals(0, tokenized.tokens.length); | ||
| test.done(); | ||
| }, | ||
| "Test tokenization with a single simple variable": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId}'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('/user/{userId}', tokenized.template); | ||
| test.equals('/^/user/([\\w\\d]+)$/', tokenized.matcher.toString()); | ||
| test.equals(1, tokenized.tokens.length); | ||
| test.equals('userId', tokenized.tokens[0]); | ||
| test.done(); | ||
| }, | ||
| "Test tokenization with multiple variables": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/one/{two}/three/{four}'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('/one/{two}/three/{four}', tokenized.template); | ||
| test.equals('/^/one/([\\w\\d]+)/three/([\\w\\d]+)$/', tokenized.matcher.toString()); | ||
| test.equals(2, tokenized.tokens.length); | ||
| test.equals('two', tokenized.tokens[0]); | ||
| test.done(); | ||
| }, | ||
| "Test tokenization with custom matcher": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId:[0-9]{4}}'); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized); | ||
| test.ok(tokenized.template); | ||
| test.ok(tokenized.matcher); | ||
| test.ok(tokenized.tokens); | ||
| test.equals('/user/{userId:[0-9]{4}}', tokenized.template); | ||
| test.equals('/^/user/([0-9]{4})$/', tokenized.matcher.toString()); | ||
| test.equals(1, tokenized.tokens.length); | ||
| test.equals('userId', tokenized.tokens[0]); | ||
| test.done(); | ||
| }, | ||
| "Test parsing with tokenized object - no match": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('hello world'); | ||
| var parsed = this.tokenizer.parse('hello worldd', tokenized); | ||
| test.ok(!parsed); | ||
| test.done(); | ||
| }, | ||
| "Test parsing with tokenized object containing a single variable": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId}'); | ||
| var parsed = this.tokenizer.parse('/user/1234', tokenized); | ||
| test.ok(parsed); | ||
| test.ok(parsed.userId); | ||
| test.equals('1234', parsed.userId); | ||
| var parsed = this.tokenizer.parse('/user/bcarr', tokenized); | ||
| test.ok(parsed); | ||
| test.equals('bcarr', parsed.userId); | ||
| test.done(); | ||
| }, | ||
| "Test parsing with tokenized object containing single variable with custom matcher": function(test) { | ||
| var tokenized = this.tokenizer.tokenize('/user/{userId:[0-9]{4}}'); | ||
| var parsed = this.tokenizer.parse('/user/123', tokenized); | ||
| test.ok(!parsed); // no match - null parsed object | ||
| var parsed = this.tokenizer.parse('/user/12345', tokenized); | ||
| test.ok(!parsed) // no match - null parsed object | ||
| var parsed = this.tokenizer.parse('/user/asdf', tokenized); | ||
| test.ok(!parsed); // no match - null parsed object | ||
| var parsed = this.tokenizer.parse('/user/1234', tokenized); | ||
| test.ok(parsed) // good match! | ||
| test.ok(parsed.userId); | ||
| test.equals('1234', parsed.userId); | ||
| test.done(); | ||
| } | ||
| }; |
8259
17.25%44
238.46%