KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > tests > jfun > parsec > SimpleInterpolationTestCase


1 package tests.jfun.parsec;
2
3 import jfun.parsec.Lexers;
4 import jfun.parsec.Map;
5 import jfun.parsec.Maps;
6 import jfun.parsec.Parser;
7 import jfun.parsec.Parsers;
8 import jfun.parsec.Scanners;
9 import jfun.parsec.Tok;
10 import jfun.parsec.Tokenizer;
11 import jfun.parsec._;
12 import jfun.parsec.pattern.Patterns;
13 import jfun.parsec.tokens.Tokenizers;
14 import junit.framework.TestCase;
15
16 public class SimpleInterpolationTestCase extends TestCase {
17   private static class Var{
18     private final String JavaDoc name;
19
20     public Var(String JavaDoc name) {
21       this.name = name;
22     }
23
24     public String JavaDoc getName() {
25       return name;
26     }
27
28     @Override JavaDoc
29     public String JavaDoc toString() {
30       return name;
31     }
32
33     @Override JavaDoc
34     public boolean equals(Object JavaDoc obj) {
35       if(obj instanceof Var){
36         return name.equals(((Var)obj).name);
37       }
38       else return false;
39     }
40     
41   }
42   private static Parser<Object JavaDoc[]> getParser(){
43     final Parser<_> fragment = Scanners.isPattern(Patterns.notString("${").many1(), "literal");
44     final Parser<Object JavaDoc> literal = Lexers.lexer(fragment, Tokenizers.forString()).map(Maps.toToken());
45     final Parser<Object JavaDoc> word = Lexers.lexer(
46         Scanners.isPattern(Patterns.isWord(), "variable"),
47         new Tokenizer(){
48           public Object JavaDoc toToken(CharSequence JavaDoc cs, int from, int len) {
49             return new Var(cs.subSequence(from, from+len).toString().trim());
50           }
51         }
52     ).map(Maps.toToken());
53     final Parser<Object JavaDoc> var = Parsers.between(Scanners.isString("${"), Scanners.isChar('}'), word);
54     final Parser<Object JavaDoc> element = Parsers.plus(literal, var);
55     return element.many(Object JavaDoc.class);
56   }
57   public void testSimpleString(){
58     verifyResult("abc", "abc");
59   }
60   public void testEmptyString(){
61     verifyResult("");
62   }
63   public void testOneVariable(){
64     verifyResult("${var1}", new Var("var1"));
65   }
66   public void testTwoVariables(){
67     verifyResult("hello ${name}, today is ${today}.", "hello ", new Var("name"), ", today is ", new Var("today"), ".");
68   }
69   private static void verifyResult(String JavaDoc src, Object JavaDoc... expected){
70     Object JavaDoc[] result = getParser().parse(src);
71     assertEquals(expected.length, result.length);
72     for(int i=0; i<expected.length; i++){
73       assertEquals(expected[i], result[i]);
74     }
75   }
76 }
77
Popular Tags