From 35a824d2fec7b94a090b52e6181eac6f9c3e53f4 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 15 Dec 2010 16:31:15 +0300 Subject: [PATCH] More tests for imports --- idea/src/org/jetbrains/jet/JetNodeTypes.java | 1 + .../jet/lang/parsing/JetParsing.java | 16 +- idea/testData/psi/ImportSoftKW.jet | 1 + idea/testData/psi/ImportSoftKW.txt | 16 ++ idea/testData/psi/Imports_ERR.txt | 155 ++++++++++++++++++ .../jetbrains/jet/parsing/JetParsingTest.java | 1 + 6 files changed, 182 insertions(+), 8 deletions(-) create mode 100644 idea/testData/psi/ImportSoftKW.jet create mode 100644 idea/testData/psi/ImportSoftKW.txt create mode 100644 idea/testData/psi/Imports_ERR.txt diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java index 8a96a91eb0a..3bc2a83bca6 100644 --- a/idea/src/org/jetbrains/jet/JetNodeTypes.java +++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java @@ -29,6 +29,7 @@ public interface JetNodeTypes { JetNodeType NAMED_ARGUMENT = new JetNodeType("NAMED_ARGUMENT"); JetNodeType CLASS_BODY = new JetNodeType("CLASS_BODY"); JetNodeType IMPORT_DIRECTIVE = new JetNodeType("IMPORT_DIRECTIVE"); + JetNodeType IMPORTED = new JetNodeType("IMPORTED"); IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME"); } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index ee0ee0df42a..823ad21baae 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -124,14 +124,14 @@ public class JetParsing { errorWithRecovery("Qualified name must be a '.'-separated identifier list", TokenSet.create(AS_KEYWORD, DOT, MAP, SEMICOLON)); } } - if (at(MAP)) { - advance(); - handleUselessRename(); - } - else if (at(AS_KEYWORD)) { - advance(); - expect(IDENTIFIER, "Expecting identifier", TokenSet.create(SEMICOLON)); - } + if (at(MAP)) { + advance(); + handleUselessRename(); + } + else if (at(AS_KEYWORD)) { + advance(); + expect(IDENTIFIER, "Expecting identifier", TokenSet.create(SEMICOLON)); + } cosumeIf(SEMICOLON); importDirective.done(IMPORT_DIRECTIVE); } diff --git a/idea/testData/psi/ImportSoftKW.jet b/idea/testData/psi/ImportSoftKW.jet new file mode 100644 index 00000000000..610ff84e3be --- /dev/null +++ b/idea/testData/psi/ImportSoftKW.jet @@ -0,0 +1 @@ +import import.import.import.import as import \ No newline at end of file diff --git a/idea/testData/psi/ImportSoftKW.txt b/idea/testData/psi/ImportSoftKW.txt new file mode 100644 index 00000000000..3e034b9fc07 --- /dev/null +++ b/idea/testData/psi/ImportSoftKW.txt @@ -0,0 +1,16 @@ +JetFile: ImportSoftKW.jet + NAMESPACE + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('import') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('import') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('import') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace(' ') + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('import') \ No newline at end of file diff --git a/idea/testData/psi/Imports_ERR.txt b/idea/testData/psi/Imports_ERR.txt new file mode 100644 index 00000000000..752c3b29d0d --- /dev/null +++ b/idea/testData/psi/Imports_ERR.txt @@ -0,0 +1,155 @@ +JetFile: Imports_ERR.jet + NAMESPACE + PsiElement(NAMESPACE_KEYWORD)('namespace') + PsiWhiteSpace(' ') + NAMESPACE_NAME + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('goo') + PsiWhiteSpace('\n\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace('\n') + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(IDENTIFIER)('foo') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(DOT)('.') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(DOT)('.') + PsiWhiteSpace('\n') + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(IDENTIFIER)('foo') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(DOT)('.') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(IDENTIFIER)('bar') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(MAP)('.*') + PsiWhiteSpace(' ') + PsiErrorElement:Cannot rename a all imported items to one identifier + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('bar') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(MAP)('.*') + PsiWhiteSpace(' ') + PsiErrorElement:Cannot rename a all imported items to one identifier + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace('\n\n') + PsiElement(IDENTIFIER)('import') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiErrorElement:Expecting namespace or top level declaration + PsiElement(SEMICOLON)(';') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiErrorElement:Qualified name must be a '.'-separated identifier list + + PsiWhiteSpace(' ') + PsiElement(SEMICOLON)(';') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(DOT)('.') + PsiErrorElement:Qualified name must be a '.'-separated identifier list + + PsiWhiteSpace(' ') + PsiElement(SEMICOLON)(';') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiErrorElement:Qualified name must be a '.'-separated identifier list + + PsiWhiteSpace(' ') + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('bar') + PsiWhiteSpace(' ') + PsiElement(SEMICOLON)(';') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(MAP)('.*') + PsiWhiteSpace(' ') + PsiErrorElement:Cannot rename a all imported items to one identifier + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('bar') + PsiWhiteSpace(' ') + PsiElement(SEMICOLON)(';') + PsiWhiteSpace('\n') + IMPORT_DIRECTIVE + PsiElement(import)('import') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('bar') + PsiElement(MAP)('.*') + PsiWhiteSpace(' ') + PsiErrorElement:Cannot rename a all imported items to one identifier + PsiElement(AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PsiElement(SEMICOLON)(';') + PsiWhiteSpace('\n\n') + CLASS + PsiElement(CLASS_KEYWORD)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('Foo') + PsiWhiteSpace(' ') + TYPE_PARAMETER_LIST + + CLASS_BODY + PsiElement(LBRACE)('{') + PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java index 995d767fdce..9be65f01fd5 100644 --- a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java +++ b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java @@ -31,4 +31,5 @@ public class JetParsingTest extends ParsingTestCase { public void testBabySteps() throws Exception {doTest(true);} public void testImports() throws Exception {doTest(true);} public void testImports_ERR() throws Exception {doTest(true);} + public void testImportSoftKW() throws Exception {doTest(true);} }