aboutsummaryrefslogtreecommitdiff
path: root/test/styles/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-16 20:06:07 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-16 20:06:07 +0000
commit24d872da7e3c919441f1a6dfe5b7dc121a580f50 (patch)
tree7f8b12125df4bfce02d0e3dc825819395b28e872 /test/styles/parser
parent3ee8d5cbad3f7ff191f8e9bafc962cf41f8238bf (diff)
Add tests for tokeniser
Diffstat (limited to 'test/styles/parser')
-rw-r--r--test/styles/parser/tokeniser.tests.js91
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
+ });
+}