From b4cf0bff96646866924d25fd712e1e49ad3a603e Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 4 Apr 2012 20:25:06 +0400 Subject: [PATCH] Split on big fat test case in LibrariesWithSourcesTest into several smaller ones. --- .../libraries/usercode/ClassObject.kt | 9 ++ idea/testData/libraries/usercode/Enum.kt | 6 ++ .../libraries/usercode/ExtensionFunction.kt | 6 ++ .../libraries/usercode/ExtensionProperty.kt | 18 ++++ .../libraries/usercode/GlobalFunction.kt | 16 ++++ .../libraries/usercode/GlobalProperty.kt | 10 ++ idea/testData/libraries/usercode/Property.kt | 21 ++++ .../libraries/usercode/library.marked.kt | 96 ------------------- idea/testData/libraries/usercode/usercode.kt | 25 ----- .../libraries/LibrariesWithSourcesTest.java | 95 +++++++++++++++--- 10 files changed, 169 insertions(+), 133 deletions(-) create mode 100644 idea/testData/libraries/usercode/ClassObject.kt create mode 100644 idea/testData/libraries/usercode/Enum.kt create mode 100644 idea/testData/libraries/usercode/ExtensionFunction.kt create mode 100644 idea/testData/libraries/usercode/ExtensionProperty.kt create mode 100644 idea/testData/libraries/usercode/GlobalFunction.kt create mode 100644 idea/testData/libraries/usercode/GlobalProperty.kt create mode 100644 idea/testData/libraries/usercode/Property.kt delete mode 100644 idea/testData/libraries/usercode/library.marked.kt delete mode 100644 idea/testData/libraries/usercode/usercode.kt diff --git a/idea/testData/libraries/usercode/ClassObject.kt b/idea/testData/libraries/usercode/ClassObject.kt new file mode 100644 index 00000000000..e31dab2b058 --- /dev/null +++ b/idea/testData/libraries/usercode/ClassObject.kt @@ -0,0 +1,9 @@ +import testData.libraries.* + +fun foo() { + WithInnerAndObject.foo() +} + +//public class <1>WithInnerAndObject { +// class object { +// fun <2>foo() { \ No newline at end of file diff --git a/idea/testData/libraries/usercode/Enum.kt b/idea/testData/libraries/usercode/Enum.kt new file mode 100644 index 00000000000..fa08d4d3d6b --- /dev/null +++ b/idea/testData/libraries/usercode/Enum.kt @@ -0,0 +1,6 @@ +import testData.libraries.* + +val color: Color? = Color.RED +val rgb = color?.rgb + +//public enum class <1><2>Color(val <3>rgb : Int) { \ No newline at end of file diff --git a/idea/testData/libraries/usercode/ExtensionFunction.kt b/idea/testData/libraries/usercode/ExtensionFunction.kt new file mode 100644 index 00000000000..622ae474636 --- /dev/null +++ b/idea/testData/libraries/usercode/ExtensionFunction.kt @@ -0,0 +1,6 @@ +import testData.libraries.* + +val v = 5.filter { it % 2 == 1 } + +//public inline fun T.<1>filter(predicate: (T)-> Boolean) : T? = this + diff --git a/idea/testData/libraries/usercode/ExtensionProperty.kt b/idea/testData/libraries/usercode/ExtensionProperty.kt new file mode 100644 index 00000000000..795876b3845 --- /dev/null +++ b/idea/testData/libraries/usercode/ExtensionProperty.kt @@ -0,0 +1,18 @@ +import testData.libraries.* + +fun foo() { + println("".exProp) + println(#(1, 2).exProp) +} + +//public val String.<1>exProp : String +//get() { +// return this +//} +// +//public val Int.exProp : Int +//get() { +// return this +//} +// +//public val #(T, T).<2>exProp : String \ No newline at end of file diff --git a/idea/testData/libraries/usercode/GlobalFunction.kt b/idea/testData/libraries/usercode/GlobalFunction.kt new file mode 100644 index 00000000000..0e2230d3f2e --- /dev/null +++ b/idea/testData/libraries/usercode/GlobalFunction.kt @@ -0,0 +1,16 @@ +import testData.libraries.* + +fun foo() { + func(5) + func(5, "5") + func(5, 5) + func() +} + +//public fun <1><2>func(a : Int, b : String = "55") { +//} +// +//public fun <3>func(a : Int, b : Int) { +//} +// +//public fun <4>func() { diff --git a/idea/testData/libraries/usercode/GlobalProperty.kt b/idea/testData/libraries/usercode/GlobalProperty.kt new file mode 100644 index 00000000000..9aa6df11f33 --- /dev/null +++ b/idea/testData/libraries/usercode/GlobalProperty.kt @@ -0,0 +1,10 @@ +import testData.libraries.* + +fun foo() { + println(testData.libraries.globalVal) + println(globalValWithGetter) +} + +//public val <1>globalVal : #(Int, String) = #(239, "239") +// +//public val <2>globalValWithGetter : Long \ No newline at end of file diff --git a/idea/testData/libraries/usercode/Property.kt b/idea/testData/libraries/usercode/Property.kt new file mode 100644 index 00000000000..b4fa22ffbaf --- /dev/null +++ b/idea/testData/libraries/usercode/Property.kt @@ -0,0 +1,21 @@ +import testData.libraries.* + +fun foo(a : ClassWithAbstractAndOpenMembers) { + a.abstractVar = "v" + println(a.abstractVar) +} + +//public abstract class <1>ClassWithAbstractAndOpenMembers { +// public abstract fun abstractFun() +// public open fun openFun() { +// } +// +// public abstract val abstractVal : String +// public open val openVal : String = "" +// public open val openValWithGetter : String +// get() { +// return "239" +// } +// +// public abstract var <2><3>abstractVar : String + diff --git a/idea/testData/libraries/usercode/library.marked.kt b/idea/testData/libraries/usercode/library.marked.kt deleted file mode 100644 index 9b8d1a9f4ac..00000000000 --- a/idea/testData/libraries/usercode/library.marked.kt +++ /dev/null @@ -1,96 +0,0 @@ -package testData.libraries - -import java.util.* - -public trait SimpleTrait { -} - -public class SimpleClass { -} - -public class SimpleTraitImpl : SimpleTrait { -} - -public class <15>WithInnerAndObject { - class object { - fun <16>foo() { - } - } - - class MyInner { - trait MyInnerInner { - fun innerInnerMethod() - } - } -} - -public class WithTraitClassObject { - class object : SimpleTrait -} - -public abstract class AbstractClass { -} - -public enum class <4><5>Color(val <6>rgb : Int) { - RED : Color(0xFF0000) - GREEN : Color(0x00FF00) - BLUE : Color(0x0000FF) -} - -public abstract class <1>ClassWithAbstractAndOpenMembers { - public abstract fun abstractFun() - public open fun openFun() { - } - - public abstract val abstractVal : String - public open val openVal : String = "" - public open val openValWithGetter : String - get() { - return "239" - } - - public abstract var <2><3>abstractVar : String - public open var openVar : String = "" - public open var openVarWithGetter : String - get() { - return "239" - } - set(value) { - } -} - -public fun main(args : Array) { -} - -public val <7>globalVal : #(Int, String) = #(239, "239") - -public val <8>globalValWithGetter : Long -get() { - return System.currentTimeMillis() -} - -public val String.<9>exProp : String -get() { - return this -} - -public val Int.exProp : Int -get() { - return this -} - -public val #(T, T).<10>exProp : String -get() { - return "${this._1} : ${this._2}" -} - -public fun <11><12>func(a : Int, b : String = "55") { -} - -public fun <13>func(a : Int, b : Int) { -} - -public fun <14>func() { -} - -public inline fun T.<17>filter(predicate: (T)-> Boolean) : T? = this diff --git a/idea/testData/libraries/usercode/usercode.kt b/idea/testData/libraries/usercode/usercode.kt deleted file mode 100644 index e025e8832d1..00000000000 --- a/idea/testData/libraries/usercode/usercode.kt +++ /dev/null @@ -1,25 +0,0 @@ -package userpackage - -import testData.libraries.* - -fun foo(a : ClassWithAbstractAndOpenMembers) { - a.abstractVar = "v" - println(a.abstractVar) -} - -fun main(args : Array) : Unit { - val color: Color? = Color.RED - color?.rgb - - println(testData.libraries.globalVal) - println(testData.libraries.globalValWithGetter) - println("".exProp) - println(#(1, 2).exProp) - func(5) - func(5, "5") - func(5, 5) - func() - - WithInnerAndObject.foo() - 5.filter { it % 2 == 1 } -} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesWithSourcesTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesWithSourcesTest.java index c2ecf3e5a83..ac66d2d4f07 100644 --- a/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesWithSourcesTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesWithSourcesTest.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.plugin.libraries; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -29,25 +30,56 @@ import org.jetbrains.jet.plugin.references.JetPsiReference; import java.util.*; /** + * Attaching library with sources, and trying to navigate to its entities from source code. + * * @author Evgeny Gerashchenko * @since 3/23/12 */ public class LibrariesWithSourcesTest extends AbstractLibrariesTest { - private VirtualFile myLibrarySourceFile; + private VirtualFile librarySourceFile; + private VirtualFile userFile; - public void test() { - myLibrarySourceFile = LocalFileSystem.getInstance().findFileByPath(TEST_DATA_PATH + "/library/library.kt"); - assertNotNull(myLibrarySourceFile); + public void testEnum() { + doTest(); + } - String annotatedLibrary = getAnnotatedLibrarySourceText(); - assertSameLinesWithFile(TEST_DATA_PATH + "/usercode/library.marked.kt", annotatedLibrary); + public void testProperty() { + doTest(); + } + + public void testGlobalProperty() { + doTest(); + } + + public void testExtensionProperty() { + doTest(); + } + + public void testGlobalFunction() { + doTest(); + } + + public void testClassObject() { + doTest(); + } + + public void testExtensionFunction() { + doTest(); + } + + private void doTest() { + librarySourceFile = LocalFileSystem.getInstance().findFileByPath(TEST_DATA_PATH + "/library/library.kt"); + assertNotNull(librarySourceFile); + userFile = LocalFileSystem.getInstance().findFileByPath(TEST_DATA_PATH + "/usercode/" + getTestName(false) + ".kt"); + assertNotNull(userFile); + + String actualCode = getActualAnnotatedLibraryCode(); + String expectedCode = getExpectedAnnotatedLibraryCode(); + assertSameLines(expectedCode, actualCode); } private Collection collectInterestingReferences() { - VirtualFile userFile = LocalFileSystem.getInstance().findFileByPath(TEST_DATA_PATH + "/usercode/usercode.kt"); - assert userFile != null; - PsiFile psiFile = getPsiManager().findFile(userFile); assert psiFile != null; Map referenceContainersToReferences = new LinkedHashMap(); @@ -62,7 +94,7 @@ public class LibrariesWithSourcesTest extends AbstractLibrariesTest { if (targetNavPsiFile == null) { continue; } - if (myLibrarySourceFile.equals(targetNavPsiFile.getVirtualFile())) { + if (librarySourceFile.equals(targetNavPsiFile.getVirtualFile())) { referenceContainersToReferences.put(ref.getElement(), (JetPsiReference)ref); } } @@ -70,7 +102,7 @@ public class LibrariesWithSourcesTest extends AbstractLibrariesTest { return referenceContainersToReferences.values(); } - private String getAnnotatedLibrarySourceText() { + private String getActualAnnotatedLibraryCode() { List> numbersAndOffsets = new ArrayList>(); for (JetPsiReference ref : collectInterestingReferences()) { PsiElement target = ref.resolve(); @@ -87,13 +119,52 @@ public class LibrariesWithSourcesTest extends AbstractLibrariesTest { } })); - Document document = FileDocumentManager.getInstance().getDocument(myLibrarySourceFile); + Document document = FileDocumentManager.getInstance().getDocument(librarySourceFile); assertNotNull(document); StringBuilder result = new StringBuilder(document.getText()); for (Tuple2 numberOffset : numbersAndOffsets) { result.insert(numberOffset._2, String.format("<%d>", numberOffset._1)); } + if (numbersAndOffsets.isEmpty()) { + return ""; + } + int minLine = Integer.MAX_VALUE; + int maxLine = Integer.MIN_VALUE; + for (Tuple2 numberOffset : numbersAndOffsets) { + int lineNumber = document.getLineNumber(numberOffset._2); + minLine = Math.min(minLine, lineNumber); + maxLine = Math.max(maxLine, lineNumber); + } + + Document annotated = EditorFactory.getInstance().createDocument(result); + return annotated.getText().substring(annotated.getLineStartOffset(minLine), + annotated.getLineEndOffset(maxLine)); + } + + private String getExpectedAnnotatedLibraryCode() { + Document document = FileDocumentManager.getInstance().getDocument(userFile); + assertNotNull(document); + List resultLines = new ArrayList(); + for (int i = document.getLineCount() - 1; i >= 0; i--) { + int lineStart = document.getLineStartOffset(i); + int lineEnd = document.getLineEndOffset(i); + if (document.getCharsSequence().subSequence(lineStart, lineEnd).toString().trim().isEmpty()) { + continue; + } + + if ("//".equals(document.getCharsSequence().subSequence(lineStart, lineStart + 2).toString())) { + resultLines.add(document.getCharsSequence().subSequence(lineStart + 2, lineEnd)); + } else { + break; + } + } + Collections.reverse(resultLines); + StringBuilder result = new StringBuilder(); + for (CharSequence line : resultLines) { + result.append(line).append("\n"); + } + result.delete(result.length() - 1, result.length()); return result.toString(); }