diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-11-16 20:06:07 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-11-16 20:06:07 +0000 |
| commit | 24d872da7e3c919441f1a6dfe5b7dc121a580f50 (patch) | |
| tree | 7f8b12125df4bfce02d0e3dc825819395b28e872 /test/styles/parser | |
| parent | 3ee8d5cbad3f7ff191f8e9bafc962cf41f8238bf (diff) | |
Add tests for tokeniser
Diffstat (limited to 'test/styles/parser')
| -rw-r--r-- | test/styles/parser/tokeniser.tests.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/test/styles/parser/tokeniser.tests.js b/test/styles/parser/tokeniser.tests.js new file mode 100644 index 0000000..2faa312 --- /dev/null +++ b/test/styles/parser/tokeniser.tests.js @@ -0,0 +1,91 @@ +var hamjest = require("hamjest"); +var assertThat = hamjest.assertThat; +var contains = hamjest.contains; +var hasProperties = hamjest.hasProperties; + +var tokenise = require("../../../lib/styles/parser/tokeniser").tokenise; +var test = require("../../test")(module); + +test("empty string is tokenised to end of file token", function() { + assertTokens("", []); +}); + +test("whitespace is tokenised", function() { + assertTokens(" \t\t ", [isToken("whitespace")]); +}); + +test("identifiers are tokenised", function() { + assertTokens("Overture", [isToken("identifier", "Overture")]); +}); + +test("integers are tokenised", function() { + assertTokens("123", [isToken("integer", "123")]); +}); + +test("strings are tokenised", function() { + assertTokens("'Tristan'", [isToken("string", "Tristan")]); +}); + +test("arrows are tokenised", function() { + assertTokens("=>", [isToken("arrow")]); +}); + +test("classes are tokenised", function() { + assertTokens(".overture", [isToken("cssClassName", ".overture")]); +}); + +test("colons are tokenised", function() { + assertTokens("::", [isToken("colon"), isToken("colon")]); +}); + +test("greater thans are tokenised", function() { + assertTokens(">>", [isToken("gt"), isToken("gt")]); +}); + +test("equals are tokenised", function() { + assertTokens("==", [isToken("equals"), isToken("equals")]); +}); + +test("open parens are tokenised", function() { + assertTokens("((", [isToken("open-paren"), isToken("open-paren")]); +}); + +test("close parens are tokenised", function() { + assertTokens("))", [isToken("close-paren"), isToken("close-paren")]); +}); + +test("open square brackets are tokenised", function() { + assertTokens("[[", [isToken("open-square-bracket"), isToken("open-square-bracket")]); +}); + +test("close square brackets are tokenised", function() { + assertTokens("]]", [isToken("close-square-bracket"), isToken("close-square-bracket")]); +}); + +test("choices are tokenised", function() { + assertTokens("||", [isToken("choice"), isToken("choice")]); +}); + +test("can tokenise multiple tokens", function() { + assertTokens("The Magic Position", [ + isToken("identifier", "The"), + isToken("whitespace"), + isToken("identifier", "Magic"), + isToken("whitespace"), + isToken("identifier", "Position") + ]); +}); + +function assertTokens(input, expectedTokens) { + assertThat( + tokenise(input), + contains.apply(null, expectedTokens.concat([isToken("end", null)])) + ); +} + +function isToken(tokenType, value) { + return hasProperties({ + name: tokenType, + value: value + }); +} |
