diff options
Diffstat (limited to 'platform/platform-tests/testSrc/com/intellij/lang/PsiBuilderQuickTest.java')
-rw-r--r-- | platform/platform-tests/testSrc/com/intellij/lang/PsiBuilderQuickTest.java | 211 |
1 files changed, 65 insertions, 146 deletions
diff --git a/platform/platform-tests/testSrc/com/intellij/lang/PsiBuilderQuickTest.java b/platform/platform-tests/testSrc/com/intellij/lang/PsiBuilderQuickTest.java index 5a47fdf4c5f3..db833c2d8f3e 100644 --- a/platform/platform-tests/testSrc/com/intellij/lang/PsiBuilderQuickTest.java +++ b/platform/platform-tests/testSrc/com/intellij/lang/PsiBuilderQuickTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -18,16 +18,14 @@ package com.intellij.lang; import com.intellij.lang.impl.PsiBuilderImpl; import com.intellij.lexer.Lexer; import com.intellij.lexer.LexerBase; +import com.intellij.openapi.fileTypes.PlainTextParserDefinition; import com.intellij.openapi.project.Project; -import com.intellij.psi.FileViewProvider; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; import com.intellij.psi.TokenType; import com.intellij.psi.impl.DebugUtil; import com.intellij.psi.impl.source.tree.ASTStructure; import com.intellij.psi.tree.*; -import com.intellij.testFramework.LightPlatformTestCase; -import com.intellij.testFramework.PlatformTestCase; +import com.intellij.testFramework.LightPlatformLangTestCase; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.ThreeState; import com.intellij.util.diff.DiffTree; import com.intellij.util.diff.DiffTreeChangeBuilder; @@ -36,12 +34,9 @@ import com.intellij.util.diff.ShallowNodeComparator; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; import java.util.List; -public class PsiBuilderQuickTest extends LightPlatformTestCase { +public class PsiBuilderQuickTest extends LightPlatformLangTestCase { private static final IFileElementType ROOT = new IFileElementType("ROOT", Language.ANY); private static final IElementType LETTER = new IElementType("LETTER", Language.ANY); @@ -57,11 +52,6 @@ public class PsiBuilderQuickTest extends LightPlatformTestCase { private static final TokenSet WHITESPACE_SET = TokenSet.create(TokenType.WHITE_SPACE); private static final TokenSet COMMENT_SET = TokenSet.create(COMMENT); - @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors") - public PsiBuilderQuickTest() { - PlatformTestCase.initPlatformLangPrefix(); - } - public void testPlain() { doTest("a<<b", new Parser() { @@ -428,15 +418,8 @@ public class PsiBuilderQuickTest extends LightPlatformTestCase { " PsiElement(OTHER)('}')\n"); } - private abstract static class MyLazyElementType extends ILazyParseableElementType implements ILightLazyParseableElementType { - protected MyLazyElementType(@NonNls String debugName) { - super(debugName, Language.ANY); - } - } - public void testLightChameleon() { final IElementType CHAMELEON_2 = new MyChameleon2Type(); - final IElementType CHAMELEON_1 = new MyChameleon1Type(CHAMELEON_2); doTest("ab{12[.?]}cd{x}", @@ -478,60 +461,26 @@ public class PsiBuilderQuickTest extends LightPlatformTestCase { " PsiElement(OTHER)('}')\n"); } - @SuppressWarnings("ConstantConditions") - private static PsiBuilderImpl createBuilder(CharSequence text) { - ParserDefinition parserDefinition = new ParserDefinition() { - @NotNull - @Override - public Lexer createLexer(Project project) { - return new MyTestLexer(); - } - - @Override - public PsiParser createParser(Project project) { - return null; - } - - @Override - public IFileElementType getFileNodeType() { - return null; - } - - @NotNull - @Override - public TokenSet getWhitespaceTokens() { - return WHITESPACE_SET; - } - - @NotNull - @Override - public TokenSet getCommentTokens() { - return COMMENT_SET; - } - - @NotNull - @Override - public TokenSet getStringLiteralElements() { - return null; - } - - @NotNull - @Override - public PsiElement createElement(ASTNode node) { - return null; - } - - @Override - public PsiFile createFile(FileViewProvider viewProvider) { - return null; - } - - @Override - public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode left, ASTNode right) { - return null; - } - }; - return new PsiBuilderImpl(getProject(), null, parserDefinition, parserDefinition.createLexer(getProject()), null, text, null, null); + public void testEndMarkersOverlapping() { + doTest("a ", + new Parser() { + @Override + public void parse(PsiBuilder builder) { + PsiBuilder.Marker e1 = builder.mark(); + PsiBuilder.Marker e2 = builder.mark(); + builder.advanceLexer(); + e2.done(OTHER); + e2.setCustomEdgeTokenBinders(null, WhitespacesBinders.GREEDY_RIGHT_BINDER); + e1.done(OTHER); + e1.setCustomEdgeTokenBinders(null, WhitespacesBinders.DEFAULT_RIGHT_BINDER); + assertTrue(builder.eof()); + } + }, + "Element(ROOT)\n" + + " Element(OTHER)\n" + + " Element(OTHER)\n" + + " PsiElement(LETTER)('a')\n" + + " PsiWhiteSpace(' ')\n"); } private interface Parser { @@ -594,75 +543,44 @@ public class PsiBuilderQuickTest extends LightPlatformTestCase { } private static void doFailTest(@NonNls final String text, final Parser parser, @NonNls final String expected) { - final PrintStream std = System.err; - //noinspection IOResourceOpenedButNotSafelyClosed - System.setErr(new PrintStream(new NullStream())); - try { - try { - ParserDefinition parserDefinition = new ParserDefinition() { - @NotNull - @Override - public Lexer createLexer(Project project) { - return null; - } - - @Override - public PsiParser createParser(Project project) { - return null; - } - - @Override - public IFileElementType getFileNodeType() { - return null; - } - - @NotNull - @Override - public TokenSet getWhitespaceTokens() { - return TokenSet.EMPTY; - } - - @NotNull - @Override - public TokenSet getCommentTokens() { - return TokenSet.EMPTY; - } - - @NotNull - @Override - public TokenSet getStringLiteralElements() { - return null; - } - - @NotNull - @Override - public PsiElement createElement(ASTNode node) { - return null; - } - - @Override - public PsiFile createFile(FileViewProvider viewProvider) { - return null; - } - - @Override - public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode left, ASTNode right) { - return null; - } - }; - final PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(parserDefinition, new MyTestLexer(),text); - builder.setDebugMode(true); - parser.parse(builder); - builder.getLightTree(); - fail("should fail"); + PlatformTestUtil.withStdErrSuppressed(new Runnable() { + @Override + public void run() { + try { + PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(new PlainTextParserDefinition(), new MyTestLexer(), text); + builder.setDebugMode(true); + parser.parse(builder); + builder.getLightTree(); + fail("should fail"); + } + catch (AssertionError e) { + assertEquals(expected, e.getMessage()); + } + } + }); + } + + private static PsiBuilderImpl createBuilder(CharSequence text) { + ParserDefinition parserDefinition = new PlainTextParserDefinition() { + @NotNull + @Override + public Lexer createLexer(Project project) { + return new MyTestLexer(); } - catch (AssertionError e) { - assertEquals(expected, e.getMessage()); + + @NotNull + @Override + public TokenSet getWhitespaceTokens() { + return WHITESPACE_SET; } - } - finally { - System.setErr(std); - } + + @NotNull + @Override + public TokenSet getCommentTokens() { + return COMMENT_SET; + } + }; + return new PsiBuilderImpl(getProject(), null, parserDefinition, parserDefinition.createLexer(getProject()), null, text, null, null); } private static class MyTestLexer extends LexerBase { @@ -719,9 +637,10 @@ public class PsiBuilderQuickTest extends LightPlatformTestCase { } } - private static class NullStream extends OutputStream { - @Override - public void write(final int b) throws IOException { } + private abstract static class MyLazyElementType extends ILazyParseableElementType implements ILightLazyParseableElementType { + protected MyLazyElementType(@NonNls String debugName) { + super(debugName, Language.ANY); + } } private static class MyChameleon1Type extends MyLazyElementType { |