1 package freemarker.eclipse.test; 2 3 import java.lang.reflect.Proxy ; 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 25 public abstract class AbstractScannerTestCase extends TestCase { 26 27 protected TokenList tokens; 28 protected String text; 29 protected ITokenScanner scanner; 30 protected ITokenManager manager; 31 32 public AbstractScannerTestCase(String name) { 33 super(name); 34 manager = new MockTokenManager(); 35 } 36 37 public void assertFit( 38 String 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 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 [] { IDocument.class }, 84 new MockDocument()); 85 } 86 87 } 88 | Popular Tags |