/* * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.lang.java.lexer; import com.intellij.lang.java.JavaParserDefinition; import com.intellij.lexer.Lexer; import com.intellij.pom.java.LanguageLevel; import com.intellij.testFramework.LexerTestCase; public class JavaLexerTest extends LexerTestCase { public void testClassicNumericLiterals() { doTest("0 1234 01234 0x1234", "INTEGER_LITERAL ('0')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('1234')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('01234')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0x1234')"); doTest("0L 1234l 01234L 0x1234l", "LONG_LITERAL ('0L')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('1234l')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('01234L')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('0x1234l')"); doTest("0f 1e1f 2.f .3f 0f 3.14f 6.022137e+23f", "FLOAT_LITERAL ('0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('1e1f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('2.f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('.3f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('3.14f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('6.022137e+23f')"); doTest("0d 1e1 2. .3 0.0 3.14 1e-9d 1e137", "DOUBLE_LITERAL ('0d')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1e1')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('2.')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('.3')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0.0')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('3.14')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1e-9d')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1e137')"); doTest(". e0 x1 ax .e .p 08 .0e .0f", "DOT ('.')\nWHITE_SPACE (' ')\n" + "IDENTIFIER ('e0')\nWHITE_SPACE (' ')\n" + "IDENTIFIER ('x1')\nWHITE_SPACE (' ')\n" + "IDENTIFIER ('ax')\nWHITE_SPACE (' ')\n" + "DOT ('.')\nIDENTIFIER ('e')\nWHITE_SPACE (' ')\n" + "DOT ('.')\nIDENTIFIER ('p')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('08')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('.0e')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('.0f')"); } public void testTigerNumericLiterals() { doTest("0xap0f 0xab.p0F 0x.abcP0f 0xabc.defP0F", "FLOAT_LITERAL ('0xap0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0xab.p0F')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0x.abcP0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0xabc.defP0F')"); doTest("0xap1 0xab.P12 0x.abcP123d 0xabc.defP1234D", "DOUBLE_LITERAL ('0xap1')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0xab.P12')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0x.abcP123d')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0xabc.defP1234D')"); doTest("p0", "IDENTIFIER ('p0')"); } public void testCoinNumericLiterals() { doTest("1_2 0_1 012__34 0x1_2_3_4 0B0 0b0001_0010_0100_1000", "INTEGER_LITERAL ('1_2')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0_1')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('012__34')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0x1_2_3_4')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0B0')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0b0001_0010_0100_1000')"); doTest("1_2L 0_7l 012__34l 0x1_2_3_4L 0B0L 0b0001_0010_0100_1000l", "LONG_LITERAL ('1_2L')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('0_7l')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('012__34l')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('0x1_2_3_4L')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('0B0L')\nWHITE_SPACE (' ')\n" + "LONG_LITERAL ('0b0001_0010_0100_1000l')"); doTest("1_0f 1e1_2f 2_2.f .3_3f 3.14_16f 6.022___137e+2_3f", "FLOAT_LITERAL ('1_0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('1e1_2f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('2_2.f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('.3_3f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('3.14_16f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('6.022___137e+2_3f')"); doTest("0_0d 1e1_1 2_2. .3_3 3.141_592 1e-9_9d 1e1__3_7", "DOUBLE_LITERAL ('0_0d')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1e1_1')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('2_2.')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('.3_3')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('3.141_592')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1e-9_9d')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1e1__3_7')"); doTest("0xa_ap1_0f 0xa_b.p22F 0x.ab__cP0f 0xa_bc.d_efP0F", "FLOAT_LITERAL ('0xa_ap1_0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0xa_b.p22F')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0x.ab__cP0f')\nWHITE_SPACE (' ')\n" + "FLOAT_LITERAL ('0xa_bc.d_efP0F')"); doTest("0xa_ap1 0xa_b.P1_2 0x.a_bcP1___23d 0xa_bc.de_fP1_234D", "DOUBLE_LITERAL ('0xa_ap1')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0xa_b.P1_2')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0x.a_bcP1___23d')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0xa_bc.de_fP1_234D')"); } public void testMalformedCoinLiterals() { doTest("_1 _b ._ 0_ 0_8 0x_f 0b_1 0B2 0x1.0_p-1 1.0e_1022 0._1", "IDENTIFIER ('_1')\nWHITE_SPACE (' ')\n" + "IDENTIFIER ('_b')\nWHITE_SPACE (' ')\n" + "DOT ('.')\nIDENTIFIER ('_')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0_')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0_8')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0x_f')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0b_1')\nWHITE_SPACE (' ')\n" + "INTEGER_LITERAL ('0B2')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0x1.0_p-1')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('1.0e_1022')\nWHITE_SPACE (' ')\n" + "DOUBLE_LITERAL ('0._1')"); } public void testMalformedOperators() { doTest("(i > = 0)", "LPARENTH ('(')\nIDENTIFIER ('i')\nWHITE_SPACE (' ')\n" + "GT ('>')\nWHITE_SPACE (' ')\nEQ ('=')\n" + "WHITE_SPACE (' ')\nINTEGER_LITERAL ('0')\nRPARENTH (')')\n"); } public void testJava8Tokens() { doTest("none :: ->", "IDENTIFIER ('none')\nWHITE_SPACE (' ')\nDOUBLE_COLON ('::')\nWHITE_SPACE (' ')\nARROW ('->')"); } public void testUnicodeLiterals() { doTest("Ɐ Σx dΦ", "IDENTIFIER ('Ɐ')\nWHITE_SPACE (' ')\nIDENTIFIER ('Σx')\nWHITE_SPACE (' ')\nIDENTIFIER ('dΦ')"); } @Override protected Lexer createLexer() { return JavaParserDefinition.createLexer(LanguageLevel.HIGHEST); } @Override protected String getDirPath() { return ""; } }