001: /*
002: * FindBugs - Find Bugs in Java programs
003: * Copyright (C) 2003-2007 University of Maryland
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019:
020: package edu.umd.cs.findbugs.jaif;
021:
022: import java.io.StringReader;
023:
024: import junit.framework.TestCase;
025:
026: public class JAIFScannerTest extends TestCase {
027:
028: private JAIFScanner getScanner(String text) {
029: return new JAIFScanner(new StringReader(text));
030: }
031:
032: private void checkToken(JAIFScanner scanner, String lexeme,
033: JAIFTokenKind kind) throws Exception {
034: JAIFToken t = scanner.nextToken();
035:
036: assertEquals(lexeme, t.lexeme);
037: assertEquals(kind, t.kind);
038: }
039:
040: public void testScanColon() throws Exception {
041: JAIFScanner scanner = getScanner(":");
042: checkToken(scanner, ":", JAIFTokenKind.COLON);
043: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
044: }
045:
046: public void testScanParens() throws Exception {
047: JAIFScanner scanner = getScanner("()");
048:
049: checkToken(scanner, "(", JAIFTokenKind.LPAREN);
050: checkToken(scanner, ")", JAIFTokenKind.RPAREN);
051: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
052: }
053:
054: public void testScanComma() throws Exception {
055: JAIFScanner scanner = getScanner(",");
056:
057: checkToken(scanner, ",", JAIFTokenKind.COMMA);
058: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
059: }
060:
061: public void testScanEquals() throws Exception {
062: JAIFScanner scanner = getScanner("=");
063:
064: checkToken(scanner, "=", JAIFTokenKind.EQUALS);
065: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
066: }
067:
068: public void testScanIdentifier() throws Exception {
069: JAIFScanner scanner = getScanner(" \t \t\t@foobar Baz123 ( Boing Boing) @Yum@Yum __123 $plotz");
070:
071: checkToken(scanner, "@foobar",
072: JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
073: checkToken(scanner, "Baz123",
074: JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
075: checkToken(scanner, "(", JAIFTokenKind.LPAREN);
076: checkToken(scanner, "Boing",
077: JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
078: checkToken(scanner, "Boing",
079: JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
080: checkToken(scanner, ")", JAIFTokenKind.RPAREN);
081: checkToken(scanner, "@Yum", JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
082: checkToken(scanner, "@Yum", JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
083: checkToken(scanner, "__123",
084: JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
085: checkToken(scanner, "$plotz",
086: JAIFTokenKind.IDENTIFIER_OR_KEYWORD);
087: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
088: }
089:
090: public void testScanFloatingPointLiteral() throws Exception {
091: JAIFScanner scanner = getScanner("1e1f 2.f .3f 0f 3.14f 6.022137e+23f");
092:
093: checkToken(scanner, "1e1f",
094: JAIFTokenKind.FLOATING_POINT_LITERAL);
095: checkToken(scanner, "2.f", JAIFTokenKind.FLOATING_POINT_LITERAL);
096: checkToken(scanner, ".3f", JAIFTokenKind.FLOATING_POINT_LITERAL);
097: checkToken(scanner, "0f", JAIFTokenKind.FLOATING_POINT_LITERAL);
098: checkToken(scanner, "3.14f",
099: JAIFTokenKind.FLOATING_POINT_LITERAL);
100: checkToken(scanner, "6.022137e+23f",
101: JAIFTokenKind.FLOATING_POINT_LITERAL);
102: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
103: }
104:
105: public void testScanFloatingPointLiteral2() throws Exception {
106: JAIFScanner scanner = getScanner("1e1 2. .3 0.0 3.14 1e-9d 1e137");
107:
108: checkToken(scanner, "1e1", JAIFTokenKind.FLOATING_POINT_LITERAL);
109: checkToken(scanner, "2.", JAIFTokenKind.FLOATING_POINT_LITERAL);
110: checkToken(scanner, ".3", JAIFTokenKind.FLOATING_POINT_LITERAL);
111: checkToken(scanner, "0.0", JAIFTokenKind.FLOATING_POINT_LITERAL);
112: checkToken(scanner, "3.14",
113: JAIFTokenKind.FLOATING_POINT_LITERAL);
114: checkToken(scanner, "1e-9d",
115: JAIFTokenKind.FLOATING_POINT_LITERAL);
116: checkToken(scanner, "1e137",
117: JAIFTokenKind.FLOATING_POINT_LITERAL);
118: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
119: }
120:
121: public void testScanOctalLiteral() throws Exception {
122: JAIFScanner scanner = getScanner("0237 01575L 027365l");
123:
124: checkToken(scanner, "0237", JAIFTokenKind.OCTAL_LITERAL);
125: checkToken(scanner, "01575L", JAIFTokenKind.OCTAL_LITERAL);
126: checkToken(scanner, "027365l", JAIFTokenKind.OCTAL_LITERAL);
127: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
128: }
129:
130: public void testScanHexLiteral() throws Exception {
131: JAIFScanner scanner = getScanner("0xDEADbeef 0xcafeBabeL 0X123EEfl");
132:
133: checkToken(scanner, "0xDEADbeef", JAIFTokenKind.HEX_LITERAL);
134: checkToken(scanner, "0xcafeBabeL", JAIFTokenKind.HEX_LITERAL);
135: checkToken(scanner, "0X123EEfl", JAIFTokenKind.HEX_LITERAL);
136: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
137: }
138:
139: public void testScanDecimalLiteral() throws Exception {
140: JAIFScanner scanner = getScanner("1234 5678L 91919191l");
141:
142: checkToken(scanner, "1234", JAIFTokenKind.DECIMAL_LITERAL);
143: checkToken(scanner, "5678L", JAIFTokenKind.DECIMAL_LITERAL);
144: checkToken(scanner, "91919191l", JAIFTokenKind.DECIMAL_LITERAL);
145: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
146: }
147:
148: public void testScanStringLiteral() throws Exception {
149: JAIFScanner scanner = getScanner("\"hello\" \"foobie bletch\" \"\\\"\" \"\\\\\\6\\45\\037\" \"\\b\\t\\f\\n\" ");
150:
151: checkToken(scanner, "\"hello\"", JAIFTokenKind.STRING_LITERAL);
152: checkToken(scanner, "\"foobie bletch\"",
153: JAIFTokenKind.STRING_LITERAL);
154: checkToken(scanner, "\"\\\"\"", JAIFTokenKind.STRING_LITERAL);
155: checkToken(scanner, "\"\\\\\\6\\45\\037\"",
156: JAIFTokenKind.STRING_LITERAL);
157: checkToken(scanner, "\"\\b\\t\\f\\n\"",
158: JAIFTokenKind.STRING_LITERAL);
159: checkToken(scanner, "\n", JAIFTokenKind.NEWLINE);
160: }
161: }
|