KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > freemarker > eclipse > test > AbstractScannerTestCase


1 package freemarker.eclipse.test;
2
3 import java.lang.reflect.Proxy JavaDoc;
4
5 import junit.framework.TestCase;
6
7 import org.eclipse.jface.text.IDocument;
8 import org.eclipse.jface.text.rules.IToken;
9 import org.eclipse.jface.text.rules.ITokenScanner;
10 import org.eclipse.jface.text.rules.Token;
11
12 import freemarker.eclipse.editors.ITokenManager;
13 import freemarker.eclipse.test.util.MockDocument;
14 import freemarker.eclipse.test.util.MockTokenManager;
15 import freemarker.eclipse.test.util.TokenList;
16
17 /**
18  * Superclass for all scanner tests. A subclass should provide a piece of code
19  * and a TokenList which holds the sequence of tokens which should be returned
20  * by the scanner under test.
21  *
22  * @author <a HREF="mailto:stephan&#64;chaquotay.net">Stephan Mueller</a>
23  * @version $Id: AbstractScannerTestCase.java,v 1.2 2004/03/03 21:16:02 stephanmueller Exp $
24  */

25 public abstract class AbstractScannerTestCase extends TestCase {
26
27     protected TokenList tokens;
28     protected String JavaDoc text;
29     protected ITokenScanner scanner;
30     protected ITokenManager manager;
31
32     public AbstractScannerTestCase(String JavaDoc name) {
33         super(name);
34         manager = new MockTokenManager();
35     }
36
37     public void assertFit(
38         String JavaDoc message,
39         ITokenScanner scanner,
40         TokenList tl) {
41         IToken token = scanner.nextToken();
42         int t = 0;
43         while (!token.isEOF()) {
44             if (token.equals(Token.WHITESPACE)) {
45                 token = manager.getWhitespaceToken();
46             }
47             for (int i = 0; i < scanner.getTokenLength(); i++) {
48                 String JavaDoc msg = "Character " + t + ", expected: " +
49                        tl.getToken(t).getData()+ ", found: " + token.getData();
50                 assertTrue(msg, equal(token, tl.getToken(t)));
51                 t++;
52             }
53             token = scanner.nextToken();
54         }
55     }
56
57     public void assertFit(ITokenScanner scanner, TokenList tl) {
58         assertFit(null, scanner, tl);
59     }
60
61     private boolean equal(IToken t1, IToken t2) {
62         return (
63             (t1.isWhitespace() && t2.isWhitespace())
64                 || (t1.isUndefined() && t2.isUndefined())
65                 || (t1.isEOF() && t2.isEOF())
66                 || (t1.equals(t2))
67                 || (t2.getData()==null && t1.getData()==null)
68                 || (t2.getData().equals(t1.getData()))
69                 );
70     }
71
72     public void runTest() {
73         IDocument document = makeMockDocument();
74         document.set(text);
75         ITokenScanner xs = scanner;
76         xs.setRange(document, 0, text.length());
77         assertFit(scanner, tokens);
78     }
79
80     public static IDocument makeMockDocument() {
81         return (IDocument) Proxy.newProxyInstance(
82             IDocument.class.getClassLoader(),
83             new Class JavaDoc[] { IDocument.class },
84             new MockDocument());
85     }
86
87 }
88
Popular Tags