changeset 39:69b940398d7b

- Added unittest to test correct parsing of operator tokens.
author aziz
date Tue, 26 Jun 2007 10:06:01 +0000
parents 640c45aaaaee
children 9d5ceb0f8be9
files trunk/src/Lexer.d trunk/src/Token.d trunk/src/main.d
diffstat 3 files changed, 42 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Tue Jun 26 08:58:02 2007 +0000
+++ b/trunk/src/Lexer.d	Tue Jun 26 10:06:01 2007 +0000
@@ -170,8 +170,11 @@
     this.fileName = fileName;
 
     this.text = text;
-    this.text.length = this.text.length + 1;
-    this.text[$-1] = 0;
+    if (text[$-1] != 0)
+    {
+      this.text.length = this.text.length + 1;
+      this.text[$-1] = 0;
+    }
 
     this.p = this.text.ptr;
     this.end = this.p + this.text.length;
@@ -939,3 +942,23 @@
     return tokens;
   }
 }
+
+unittest
+{
+  string[] ops = [">", ">=", ">>", ">>=", ">>>", ">>>=", "<", "<=", "<>", "<>=", "<<", "<<=", "!", "!<", "!>", "!<=", "!>=", "!<>", "!<>=", ".", "..", "...", "&", "&&", "&=", "+", "++", "+=", "-", "--", "-=", "=", "==", "~", "~=", "*", "*=", "^", "^=", "%", "%="];
+
+  char[] src;
+
+  foreach (op; ops)
+    src ~= op ~ " ";
+
+  auto lx = new Lexer(src, "");
+  auto tokens = lx.getTokens();
+
+  tokens = tokens[0..$-1]; // exclude TOK.EOF
+
+  assert(tokens.length == 41 );
+
+  foreach (i, t; tokens)
+    assert(t.span == ops[i], std.string.format("Lexed '%s' but expected '%s'", t.span, ops[i]));
+}
\ No newline at end of file
--- a/trunk/src/Token.d	Tue Jun 26 08:58:02 2007 +0000
+++ b/trunk/src/Token.d	Tue Jun 26 10:06:01 2007 +0000
@@ -54,8 +54,8 @@
   ModAssign, Mod,
   XorAssign, Xor,
   CatAssign, Catenate,
+  Tilde,
 
-  Tilde,
   Colon,
   Semicolon,
   Question,
--- a/trunk/src/main.d	Tue Jun 26 08:58:02 2007 +0000
+++ b/trunk/src/main.d	Tue Jun 26 10:06:01 2007 +0000
@@ -53,6 +53,10 @@
         writef("<cl>%s</cl>", span);
       break;
       case TOK.Assign, TOK.Equal, TOK.Not,
+        TOK.Less, TOK.Greater,
+        TOK.LShiftAssign, TOK.LShift,
+        TOK.RShiftAssign, TOK.RShift,
+        TOK.URShiftAssign, TOK.URShift,
         TOK.OrAssign, TOK.OrBinary,
         TOK.AndAssign, TOK.AndBinary,
         TOK.PlusAssign, TOK.PlusPlus, TOK.Plus,
@@ -62,14 +66,25 @@
         TOK.ModAssign, TOK.Mod,
         TOK.XorAssign, TOK.Xor,
         TOK.CatAssign, TOK.Catenate,
+        TOK.Tilde,
         TOK.Unordered,
         TOK.UorE,
         TOK.UorG,
         TOK.UorGorE,
         TOK.UorL,
-        TOK.UorLorE:
+        TOK.UorLorE,
+        TOK.LorEorG:
         writef("<op>%s</op>", span);
       break;
+      case TOK.LorG:
+        writef("<op>≶</op>");
+      break;
+      case TOK.LessEqual:
+        writef("<op>≤</op>");
+      break;
+      case TOK.GreaterEqual:
+        writef("<op>≥</op>");
+      break;
       case TOK.AndLogical:
         writef("<op>∧</op>");
       break;