diff --git a/java/java-tests/testSrc/com/intellij/lang/psi/PsiBuilderTest.java b/java/java-tests/testSrc/com/intellij/lang/psi/PsiBuilderTest.java new file mode 100644 index 000000000000..5dc954bf59ee --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/lang/psi/PsiBuilderTest.java @@ -0,0 +1,232 @@ +package com.intellij.lang.psi; + +import com.intellij.lang.*; +import com.intellij.lang.impl.PsiBuilderImpl; +import com.intellij.lexer.JavaLexer; +import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.JavaTokenType; +import com.intellij.psi.PsiFile; +import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; +import com.intellij.psi.impl.source.DummyHolder; +import com.intellij.psi.impl.source.tree.JavaElementType; +import com.intellij.psi.impl.source.tree.SharedImplUtil; +import com.intellij.psi.impl.source.tree.TreeElement; +import com.intellij.psi.text.BlockSupport; +import com.intellij.testFramework.LightIdeaTestCase; +import junit.framework.AssertionFailedError; + +/** + * Date: Jan 21, 2005 + * @author max + */ +public class PsiBuilderTest extends LightIdeaTestCase { + private PsiBuilderImpl myBuilder; + + public void testEmptyProgram() throws Exception { + myBuilder = createBuilder(""); + final PsiBuilder.Marker fileMarker = myBuilder.mark(); + fileMarker.done(JavaStubElementTypes.JAVA_FILE); + ASTNode fileNode = myBuilder.getTreeBuilt(); + assertNotNull(fileNode); + assertEquals("", fileNode.getText()); + } + + public void testProgramWithSingleKeyword() throws Exception { + myBuilder = createBuilder("package"); + + final PsiBuilder.Marker fileMarker = myBuilder.mark(); + assertEquals("package", myBuilder.getTokenText()); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, myBuilder.getTokenType()); + final PsiBuilder.Marker packageStatementMarker = myBuilder.mark(); + myBuilder.advanceLexer(); + assertTrue(myBuilder.eof()); + packageStatementMarker.done(JavaElementType.PACKAGE_STATEMENT); + fileMarker.done(JavaStubElementTypes.JAVA_FILE); + + ASTNode fileNode = myBuilder.getTreeBuilt(); + assertNotNull(fileNode); + assertEquals("package", fileNode.getText()); + assertSame(fileNode.getFirstChildNode(), fileNode.getLastChildNode()); + ASTNode packageNode = fileNode.getFirstChildNode(); + assertNotNull(packageNode); + assertEquals("package", packageNode.getText()); + assertEquals(JavaElementType.PACKAGE_STATEMENT, packageNode.getElementType()); + + ASTNode leaf = packageNode.getFirstChildNode(); + assertNotNull(leaf); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, leaf.getElementType()); + } + + private static PsiBuilderImpl createBuilder(final String text) { + return createBuilder(text,null); + } + private static PsiBuilderImpl createBuilder(final String text, ASTNode originalTree) { + final Language lang = StdFileTypes.JAVA.getLanguage(); + final ParserDefinition parserDefinition = LanguageParserDefinitions.INSTANCE.forLanguage(lang); + assertNotNull(parserDefinition); + PsiFile psiFile = createFile("x.java", text); + return new PsiBuilderImpl(getProject(), psiFile, parserDefinition, new JavaLexer(LanguageLevel.JDK_1_5), + SharedImplUtil.findCharTableByTree(psiFile.getNode()), text, originalTree, null); + } + + public void testTrailingWhitespaces() throws Exception { + myBuilder = createBuilder("foo\n\nx"); + final PsiBuilder.Marker marker = myBuilder.mark(); + while (!myBuilder.eof()) { + myBuilder.advanceLexer(); + } + marker.done(JavaStubElementTypes.JAVA_FILE); + assertEquals("foo\n\nx", myBuilder.getTreeBuilt().getText()); + } + + public void testRollback() throws Exception { + myBuilder = createBuilder("package"); + + PsiBuilder.Marker fileMarker = myBuilder.mark(); + assertEquals("package", myBuilder.getTokenText()); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, myBuilder.getTokenType()); + PsiBuilder.Marker packageStatementMarker = myBuilder.mark(); + myBuilder.advanceLexer(); + assertTrue(myBuilder.eof()); + packageStatementMarker.done(JavaElementType.PACKAGE_STATEMENT); + + fileMarker.rollbackTo(); + + fileMarker = myBuilder.mark(); + assertEquals("package", myBuilder.getTokenText()); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, myBuilder.getTokenType()); + packageStatementMarker = myBuilder.mark(); + myBuilder.advanceLexer(); + assertTrue(myBuilder.eof()); + packageStatementMarker.done(JavaElementType.PACKAGE_STATEMENT); + fileMarker.done(JavaStubElementTypes.JAVA_FILE); + + ASTNode fileNode = myBuilder.getTreeBuilt(); + assertNotNull(fileNode); + assertEquals("package", fileNode.getText()); + assertSame(fileNode.getFirstChildNode(), fileNode.getLastChildNode()); + ASTNode packageNode = fileNode.getFirstChildNode(); + assertNotNull(packageNode); + assertEquals("package", packageNode.getText()); + assertEquals(JavaElementType.PACKAGE_STATEMENT, packageNode.getElementType()); + + ASTNode leaf = packageNode.getFirstChildNode(); + assertNotNull(leaf); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, leaf.getElementType()); + } + + public void testDrop() throws Exception { + myBuilder = createBuilder("package"); + + final PsiBuilder.Marker fileMarker = myBuilder.mark(); + assertEquals("package", myBuilder.getTokenText()); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, myBuilder.getTokenType()); + final PsiBuilder.Marker packageStatementMarker = myBuilder.mark(); + myBuilder.advanceLexer(); + assertTrue(myBuilder.eof()); + packageStatementMarker.drop(); + fileMarker.done(JavaStubElementTypes.JAVA_FILE); + + ASTNode fileNode = myBuilder.getTreeBuilt(); + assertNotNull(fileNode); + assertEquals("package", fileNode.getText()); + assertSame(fileNode.getFirstChildNode(), fileNode.getLastChildNode()); + + ASTNode leaf = fileNode.getFirstChildNode(); + assertNotNull(leaf); + assertEquals(JavaTokenType.PACKAGE_KEYWORD, leaf.getElementType()); + assertEquals("package", leaf.getText()); + assertNull(leaf.getFirstChildNode()); + } + + public void testAdvanceBeyondEof() { + myBuilder = createBuilder("package"); + for(int i=0; i<20; i++) { + myBuilder.eof(); + myBuilder.advanceLexer(); + } + assertTrue(myBuilder.eof()); + } + + public void testAssertionFailureOnUnbalancedMarkers() { + myBuilder = createBuilder("foo"); + myBuilder.setDebugMode(true); + final PsiBuilder.Marker m = myBuilder.mark(); + final PsiBuilder.Marker m1 = myBuilder.mark(); + myBuilder.getTokenType(); + myBuilder.advanceLexer(); + try { + m.done(JavaTokenType.PACKAGE_KEYWORD); + fail("Assertion must fire"); + } + catch (AssertionFailedError e) { + throw e; + } + catch (Throwable e) { + if (!e.getMessage().startsWith("Another not done marker")) { + fail("Wrong assertion message"); + } + } + } + + public void testNotAllTokensProcessed() { + myBuilder = createBuilder("foo"); + myBuilder.setDebugMode(true); + final PsiBuilder.Marker m = myBuilder.mark(); + m.done(JavaTokenType.PACKAGE_KEYWORD); + try { + myBuilder.getTreeBuilt(); + fail("Assertion must fire"); + } + catch (AssertionFailedError e) { + throw e; + } + catch (Throwable e) { + if (!e.getMessage().startsWith("Tokens [IDENTIFIER] were not inserted into the tree")) { + fail("Wrong assertion message"); + } + } + } + + public void testMergeWhenEmptyElementAfterWhitespaceIsLastChild() throws Throwable { + myBuilder = createBuilder(" foo bar"); + parseWhenEmptyElementAfterWhitespaceIsLastChild(); + final ASTNode tree = myBuilder.getTreeBuilt(); + new DummyHolder(getPsiManager(), (TreeElement)tree, null); + + myBuilder = createBuilder(" bar", tree); + parseWhenEmptyElementAfterWhitespaceIsLastChild(); + try { + myBuilder.getTreeBuilt(); + fail(); + } + catch (BlockSupport.ReparsedSuccessfullyException e) { + e.getDiffLog().performActualPsiChange(tree.getPsi().getContainingFile()); + } + + assertEquals(" bar", tree.getText()); + } + + private void parseWhenEmptyElementAfterWhitespaceIsLastChild() { + final PsiBuilder.Marker root = myBuilder.mark(); + + final PsiBuilder.Marker composite = myBuilder.mark(); + final PsiBuilder.Marker backup = myBuilder.mark(); + if ("foo".equals(myBuilder.getTokenText())) { + myBuilder.advanceLexer(); + myBuilder.getTokenType(); + myBuilder.mark().done(JavaStubElementTypes.TYPE_PARAMETER_LIST); + backup.done(JavaStubElementTypes.ANNOTATION_METHOD); + } else { + backup.rollbackTo(); + } + composite.done(JavaStubElementTypes.ANONYMOUS_CLASS); + + myBuilder.getTokenType(); + myBuilder.advanceLexer(); + root.done(JavaStubElementTypes.ENUM_CONSTANT_INITIALIZER); + } + + +} diff --git a/java/java-tests/testSrc/com/intellij/psi/util/PropertyUtilTest.java b/java/java-tests/testSrc/com/intellij/psi/util/PropertyUtilTest.java new file mode 100644 index 000000000000..cf556cf65abd --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/psi/util/PropertyUtilTest.java @@ -0,0 +1,75 @@ +/* + * Created by IntelliJ IDEA. + * User: mike + * Date: Jun 14, 2002 + * Time: 8:05:58 PM + * To change template for new class use + * Code Style | Class Templates options (Tools | IDE Options). + */ +package com.intellij.psi.util; + +import com.intellij.psi.*; +import com.intellij.testFramework.LightCodeInsightTestCase; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NonNls; + +public class PropertyUtilTest extends LightCodeInsightTestCase { + public void testSuggestGetterName() throws Exception { + assertEquals("isValid", PropertyUtil.suggestGetterName("valid", getType("boolean"))); + assertEquals("getValid", PropertyUtil.suggestGetterName("valid", getType("Object"))); + assertEquals("isValid", PropertyUtil.suggestGetterName(ourProject, createField("valid", "boolean"))); + assertEquals("getValid", PropertyUtil.suggestGetterName(ourProject, createField("valid", "Object"))); + + assertEquals("getURL", PropertyUtil.suggestGetterName("URL", getType("Object"))); + assertEquals("getURL", PropertyUtil.suggestGetterName(ourProject, createField("URL", "Object"))); + + assertEquals("isaURL", PropertyUtil.suggestGetterName(ourProject, createField("aURL", "boolean"))); + assertEquals("getaURL", PropertyUtil.suggestGetterName(ourProject, createField("aURL", "Object"))); + assertEquals("getBool", PropertyUtil.suggestGetterName(ourProject, createField("bool", "java.lang.Boolean"))); + } + + public void testSuggestSetterName() throws Exception { + assertEquals("setValid", PropertyUtil.suggestSetterName("valid")); + assertEquals("setValid", PropertyUtil.suggestSetterName(ourProject, createField("valid", "Object"))); + + assertEquals("setURL", PropertyUtil.suggestSetterName("URL")); + assertEquals("setURL", PropertyUtil.suggestSetterName(ourProject, createField("URL", "Object"))); + + assertEquals("setaURL", PropertyUtil.suggestSetterName("aURL")); + assertEquals("setaURL", PropertyUtil.suggestSetterName(ourProject, createField("aURL", "Object"))); + assertEquals("setBool", PropertyUtil.suggestSetterName(ourProject, createField("bool", "java.lang.Boolean"))); + } + + public void testSuggestPropertyName() throws Exception { + assertEquals("valid", PropertyUtil.getPropertyName("isValid")); + assertEquals("valid", PropertyUtil.getPropertyName("getValid")); + assertEquals("valid", PropertyUtil.getPropertyName("setValid")); + + assertEquals("URL", PropertyUtil.getPropertyName("isURL")); + assertEquals("URL", PropertyUtil.getPropertyName("getURL")); + assertEquals("URL", PropertyUtil.getPropertyName("setURL")); + + assertEquals("aURL", PropertyUtil.getPropertyName("isaURL")); + assertEquals("aURL", PropertyUtil.getPropertyName("getaURL")); + assertEquals("aURL", PropertyUtil.getPropertyName("setaURL")); + } + + public void testBooleanPropertyGetters() { + assertTrue(PropertyUtil.hasGetterName(createMethod("isOk", "boolean"))); + assertFalse(PropertyUtil.hasGetterName(createMethod("isOk", CommonClassNames.JAVA_LANG_BOOLEAN))); + assertTrue(PropertyUtil.hasGetterName(createMethod("getOk", CommonClassNames.JAVA_LANG_BOOLEAN))); + assertFalse(PropertyUtil.hasGetterName(createMethod("isOk", "int"))); + } + + private static PsiType getType(@NonNls String type) throws IncorrectOperationException { + return PsiElementFactory.SERVICE.getInstance(ourProject).createTypeFromText(type, null); + } + + private static PsiField createField(@NonNls String name, @NonNls String type) throws IncorrectOperationException { + return PsiElementFactory.SERVICE.getInstance(ourProject).createField(name, getType(type)); + } + + private static PsiMethod createMethod(@NonNls String name, String type) throws IncorrectOperationException { + return PsiElementFactory.SERVICE.getInstance(ourProject).createMethod(name, getType(type)); + } +} diff --git a/platform/platform-tests/testSrc/com/intellij/application/options/ReplacePathToMacroMapTest.java b/platform/platform-tests/testSrc/com/intellij/application/options/ReplacePathToMacroMapTest.java new file mode 100644 index 000000000000..12b034db6080 --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/application/options/ReplacePathToMacroMapTest.java @@ -0,0 +1,91 @@ +package com.intellij.application.options; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * @author mike + */ +public class ReplacePathToMacroMapTest { + private ReplacePathToMacroMap myMap; + + @Before + public final void setupMap() { + myMap = new ReplacePathToMacroMap(); + + myMap.put("file:///tmp/foo", "file://$MODULE_DIR$"); + myMap.put("file://tmp/foo", "file:/$MODULE_DIR$"); + myMap.put("file:/tmp/foo", "file:$MODULE_DIR$"); + myMap.put("jar:///tmp/foo", "jar://$MODULE_DIR$"); + myMap.put("jar://tmp/foo", "jar:/$MODULE_DIR$"); + myMap.put("jar:/tmp/foo", "jar:$MODULE_DIR$"); + myMap.put("/tmp/foo", "$MODULE_DIR$"); + } + + @Test + public void testSubstitute_NoSubstitute() throws Exception { + assertEquals("/foo/bar", substitute("/foo/bar")); + } + + @Test + public void testSubstitute_CompleteMatch() throws Exception { + assertEquals("$MODULE_DIR$", substitute("/tmp/foo")); + assertEquals("jar:$MODULE_DIR$", substitute("jar:/tmp/foo")); + assertEquals("jar:/$MODULE_DIR$", substitute("jar://tmp/foo")); + assertEquals("jar://$MODULE_DIR$", substitute("jar:///tmp/foo")); + assertEquals("file:$MODULE_DIR$", substitute("file:/tmp/foo")); + assertEquals("file:/$MODULE_DIR$", substitute("file://tmp/foo")); + assertEquals("file://$MODULE_DIR$", substitute("file:///tmp/foo")); + } + + @Test + public void testSubstitute_PrefixMatch() throws Exception { + assertEquals("$MODULE_DIR$/bar", substitute("/tmp/foo/bar")); + assertEquals("jar:$MODULE_DIR$/bar", substitute("jar:/tmp/foo/bar")); + assertEquals("jar:/$MODULE_DIR$/bar", substitute("jar://tmp/foo/bar")); + assertEquals("jar://$MODULE_DIR$/bar", substitute("jar:///tmp/foo/bar")); + assertEquals("file:$MODULE_DIR$/bar", substitute("file:/tmp/foo/bar")); + assertEquals("file:/$MODULE_DIR$/bar", substitute("file://tmp/foo/bar")); + assertEquals("file://$MODULE_DIR$/bar", substitute("file:///tmp/foo/bar")); + } + + @Test + public void testSubstitute_JarPrefixMatch() throws Exception { + assertEquals("$MODULE_DIR$!/bar", substitute("/tmp/foo!/bar")); + assertEquals("jar:$MODULE_DIR$!/bar", substitute("jar:/tmp/foo!/bar")); + assertEquals("jar:/$MODULE_DIR$!/bar", substitute("jar://tmp/foo!/bar")); + assertEquals("jar://$MODULE_DIR$!/bar", substitute("jar:///tmp/foo!/bar")); + assertEquals("file:$MODULE_DIR$!/bar", substitute("file:/tmp/foo!/bar")); + assertEquals("file:/$MODULE_DIR$!/bar", substitute("file://tmp/foo!/bar")); + assertEquals("file://$MODULE_DIR$!/bar", substitute("file:///tmp/foo!/bar")); + } + + @Test + public void testSubstitute_WindowsRootSubstitution() throws Exception { + myMap.put("C:/", "../$MODULE_DIR$/"); + + assertEquals("../$MODULE_DIR$/", substitute("C:/")); + assertEquals("../$MODULE_DIR$/foo", substitute("C:/foo")); + } + + @Test + public void testSubstitute_NoSubstituteInTheMiddleOccurs() throws Exception { + assertEquals("/bar/tmp/foo/bar", substitute("/bar/tmp/foo/bar")); + } + + @Test + public void testSubstitute_NoDoubleSubstitution() throws Exception { + assertEquals("$MODULE_DIR$/bar/tmp/foo", substitute("/tmp/foo/bar/tmp/foo")); + } + + @Test + public void testSubstitute_NoPartialSubstituteIsPerformed() throws Exception { + assertEquals("/tmp/foobar", substitute("/tmp/foobar")); + } + + private String substitute(final String s) { + return myMap.substitute(s, true); + } +} diff --git a/platform/platform-tests/testSrc/com/intellij/ide/search/PorterStemmerTest.java b/platform/platform-tests/testSrc/com/intellij/ide/search/PorterStemmerTest.java new file mode 100644 index 000000000000..d45d435682d3 --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/ide/search/PorterStemmerTest.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved. + */ + +package com.intellij.ide.search; + +import com.intellij.ide.ui.search.PorterStemmerUtil; +import junit.framework.TestCase; + +/** + * User: anna + * Date: 15-Feb-2006 + */ +public class PorterStemmerTest extends TestCase { + public void test() throws Exception { + assertEquals("name", PorterStemmerUtil.stem("names")); + assertEquals("j2ee", PorterStemmerUtil.stem("j2ee")); + assertEquals("keyword1", PorterStemmerUtil.stem("keyword1")); + assertEquals("initi", PorterStemmerUtil.stem("initializer")); + assertEquals("initi", PorterStemmerUtil.stem("initialization")); + assertEquals("go2file", PorterStemmerUtil.stem("go2file")); + } + +} diff --git a/platform/platform-tests/testSrc/com/intellij/ide/severities/HighlightSeveritiesTest.java b/platform/platform-tests/testSrc/com/intellij/ide/severities/HighlightSeveritiesTest.java new file mode 100644 index 000000000000..2e4f8b9dcf82 --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/ide/severities/HighlightSeveritiesTest.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved. + */ + +/* + * Created by IntelliJ IDEA. + * User: Anna.Kozlova + * Date: 20-Jul-2006 + * Time: 18:26:01 + */ +package com.intellij.ide.severities; + +import com.intellij.lang.annotation.HighlightSeverity; +import junit.framework.TestCase; +import org.jdom.Element; + +public class HighlightSeveritiesTest extends TestCase { + private int myOldSeverity; + + @Override + protected void setUp() throws Exception { + super.setUp(); + myOldSeverity = HighlightSeverity.ERROR.myVal; + } + + + @Override + protected void tearDown() throws Exception { + HighlightSeverity.ERROR.myVal = myOldSeverity; + super.tearDown(); + } + + public void testSeveritiesMigration() throws Exception{ + HighlightSeverity.ERROR.myVal = 200; + final Element element = new Element("temp"); + new HighlightSeverity(HighlightSeverity.ERROR.myName, 500).writeExternal(element); + HighlightSeverity.ERROR.readExternal(element); + assertEquals(500, HighlightSeverity.ERROR.myVal); + } + + +} \ No newline at end of file