Add tests for copyright updater
This commit is contained in:
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidSyntheticPrope
|
|||||||
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassLoadingTest
|
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassLoadingTest
|
||||||
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassSanityTest
|
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassSanityTest
|
||||||
import org.jetbrains.kotlin.checkers.*
|
import org.jetbrains.kotlin.checkers.*
|
||||||
|
import org.jetbrains.kotlin.copyright.AbstractUpdateKotlinCopyrightTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
||||||
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
||||||
@@ -550,6 +551,10 @@ fun main(args: Array<String>) {
|
|||||||
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractUpdateKotlinCopyrightTest> {
|
||||||
|
model("copyright", pattern = KT_OR_KTS, testMethod = "doTest")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractHighlightExitPointsTest> {
|
testClass<AbstractHighlightExitPointsTest> {
|
||||||
model("exitPoints")
|
model("exitPoints")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidSyntheticPrope
|
|||||||
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassLoadingTest
|
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassLoadingTest
|
||||||
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassSanityTest
|
import org.jetbrains.kotlin.asJava.classes.AbstractUltraLightClassSanityTest
|
||||||
import org.jetbrains.kotlin.checkers.*
|
import org.jetbrains.kotlin.checkers.*
|
||||||
|
import org.jetbrains.kotlin.copyright.AbstractUpdateKotlinCopyrightTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
||||||
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
||||||
@@ -561,6 +562,10 @@ fun main(args: Array<String>) {
|
|||||||
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractUpdateKotlinCopyrightTest> {
|
||||||
|
model("copyright", pattern = KT_OR_KTS, testMethod = "doTest")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractHighlightExitPointsTest> {
|
testClass<AbstractHighlightExitPointsTest> {
|
||||||
model("exitPoints")
|
model("exitPoints")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinBinariesCheckerTes
|
|||||||
import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinSourceCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinSourceCheckerTest
|
||||||
import org.jetbrains.kotlin.checkers.AbstractJsCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractJsCheckerTest
|
||||||
import org.jetbrains.kotlin.checkers.AbstractPsiCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractPsiCheckerTest
|
||||||
|
import org.jetbrains.kotlin.copyright.AbstractUpdateKotlinCopyrightTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
||||||
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
||||||
@@ -539,6 +540,10 @@ fun main(args: Array<String>) {
|
|||||||
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractUpdateKotlinCopyrightTest> {
|
||||||
|
model("copyright", pattern = KT_OR_KTS, testMethod = "doTest")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractHighlightExitPointsTest> {
|
testClass<AbstractHighlightExitPointsTest> {
|
||||||
model("exitPoints")
|
model("exitPoints")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinBinariesCheckerTes
|
|||||||
import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinSourceCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinSourceCheckerTest
|
||||||
import org.jetbrains.kotlin.checkers.AbstractJsCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractJsCheckerTest
|
||||||
import org.jetbrains.kotlin.checkers.AbstractPsiCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractPsiCheckerTest
|
||||||
|
import org.jetbrains.kotlin.copyright.AbstractUpdateKotlinCopyrightTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
||||||
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
||||||
@@ -539,6 +540,10 @@ fun main(args: Array<String>) {
|
|||||||
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractUpdateKotlinCopyrightTest> {
|
||||||
|
model("copyright", pattern = KT_OR_KTS, testMethod = "doTest")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractHighlightExitPointsTest> {
|
testClass<AbstractHighlightExitPointsTest> {
|
||||||
model("exitPoints")
|
model("exitPoints")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinBinariesCheckerTes
|
|||||||
import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinSourceCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractJavaAgainstKotlinSourceCheckerTest
|
||||||
import org.jetbrains.kotlin.checkers.AbstractJsCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractJsCheckerTest
|
||||||
import org.jetbrains.kotlin.checkers.AbstractPsiCheckerTest
|
import org.jetbrains.kotlin.checkers.AbstractPsiCheckerTest
|
||||||
|
import org.jetbrains.kotlin.copyright.AbstractUpdateKotlinCopyrightTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
import org.jetbrains.kotlin.findUsages.AbstractFindUsagesTest
|
||||||
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
import org.jetbrains.kotlin.findUsages.AbstractKotlinFindUsagesWithLibraryTest
|
||||||
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
import org.jetbrains.kotlin.formatter.AbstractFormatterTest
|
||||||
@@ -539,6 +540,10 @@ fun main(args: Array<String>) {
|
|||||||
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
model("copyPaste/moveDeclarations", pattern = KT_WITHOUT_DOTS_IN_NAME, testMethod = "doTest")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractUpdateKotlinCopyrightTest> {
|
||||||
|
model("copyright", pattern = KT_OR_KTS, testMethod = "doTest")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractHighlightExitPointsTest> {
|
testClass<AbstractHighlightExitPointsTest> {
|
||||||
model("exitPoints")
|
model("exitPoints")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,25 +21,46 @@ import com.intellij.openapi.project.Project;
|
|||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiComment;
|
import com.intellij.psi.PsiComment;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.PsiWhiteSpace;
|
import com.intellij.psi.PsiWhiteSpace;
|
||||||
import com.maddyhome.idea.copyright.CopyrightProfile;
|
import com.maddyhome.idea.copyright.CopyrightProfile;
|
||||||
import com.maddyhome.idea.copyright.psi.UpdatePsiFileCopyright;
|
import com.maddyhome.idea.copyright.psi.UpdatePsiFileCopyright;
|
||||||
import org.jetbrains.kotlin.psi.KtImportList;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
class UpdateKotlinCopyright extends UpdatePsiFileCopyright {
|
|
||||||
|
|
||||||
|
public class UpdateKotlinCopyright extends UpdatePsiFileCopyright {
|
||||||
UpdateKotlinCopyright(Project project, Module module, VirtualFile root, CopyrightProfile copyrightProfile) {
|
UpdateKotlinCopyright(Project project, Module module, VirtualFile root, CopyrightProfile copyrightProfile) {
|
||||||
super(project, module, root, copyrightProfile);
|
super(project, module, root, copyrightProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void scanFile() {
|
protected void scanFile() {
|
||||||
PsiElement first = getFile().getFirstChild();
|
PsiRange commentSearchRange = getCommentSearchRange(getFile());
|
||||||
|
PsiElement first = commentSearchRange.first;
|
||||||
|
PsiElement last = commentSearchRange.last;
|
||||||
|
|
||||||
|
if (first != null) {
|
||||||
|
checkComments(first, last, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PsiRange {
|
||||||
|
public final @Nullable PsiElement first;
|
||||||
|
public final @Nullable PsiElement last;
|
||||||
|
|
||||||
|
public PsiRange(@Nullable PsiElement first, @Nullable PsiElement second) {
|
||||||
|
this.first = first;
|
||||||
|
this.last = second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @NotNull PsiRange getCommentSearchRange(@NotNull PsiFile psiFile) {
|
||||||
|
PsiElement first = psiFile.getFirstChild();
|
||||||
PsiElement last = first;
|
PsiElement last = first;
|
||||||
PsiElement next = first;
|
PsiElement next = first;
|
||||||
while (next != null) {
|
while (next != null) {
|
||||||
if (next instanceof PsiComment || next instanceof PsiWhiteSpace || next.getText().isEmpty()) {
|
if (next instanceof PsiComment || next instanceof PsiWhiteSpace || next.getText().isEmpty()) {
|
||||||
next = getNextSibling(next);
|
next = next.getNextSibling();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
break;
|
break;
|
||||||
@@ -47,8 +68,6 @@ class UpdateKotlinCopyright extends UpdatePsiFileCopyright {
|
|||||||
last = next;
|
last = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first != null) {
|
return new PsiRange(first, last);
|
||||||
checkComments(first, last, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
/* ABSENT */
|
||||||
|
class Some
|
||||||
|
|
||||||
|
// COMMENTS: 0
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
/* PRESENT */
|
||||||
|
|
||||||
|
fun some() {}
|
||||||
|
|
||||||
|
// COMMENTS: 1
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
/* PRESENT */
|
||||||
|
|
||||||
|
package normal
|
||||||
|
|
||||||
|
// COMMENTS: 1
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.copyright
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiComment
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import junit.framework.AssertionFailedError
|
||||||
|
import org.jetbrains.kotlin.idea.copyright.UpdateKotlinCopyright
|
||||||
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
|
import org.junit.Assert
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
abstract class AbstractUpdateKotlinCopyrightTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||||
|
fun doTest(path: String) {
|
||||||
|
myFixture.configureByFile(path)
|
||||||
|
|
||||||
|
val text = myFixture.file.text.trim()
|
||||||
|
val expectedNumberOfComments = InTextDirectivesUtils.getPrefixedInt(text, "// COMMENTS: ") ?: run {
|
||||||
|
if (!text.isEmpty()) {
|
||||||
|
throw AssertionFailedError("Every test should assert number of comments with `COMMENTS` directive")
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var commentsNumber = 0
|
||||||
|
val comments = collectComments(UpdateKotlinCopyright.getCommentSearchRange(myFixture.file))
|
||||||
|
for (comment in comments) {
|
||||||
|
when (comment.text) {
|
||||||
|
"/* PRESENT */" -> {
|
||||||
|
++commentsNumber
|
||||||
|
}
|
||||||
|
"/* ABSENT */" -> {
|
||||||
|
throw AssertionFailedError("Unexpected comment found")
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
throw AssertionFailedError("A comment with bad directive found: `$text`")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertEquals("Wrong number of comments found", expectedNumberOfComments, commentsNumber)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getTestDataPath() = File(PluginTestCaseBase.getTestDataPathBase(), "/copyright").path + File.separator
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private fun collectComments(range: UpdateKotlinCopyright.PsiRange): List<PsiComment> {
|
||||||
|
val comments = mutableListOf<PsiComment>()
|
||||||
|
val first = range.first
|
||||||
|
val last = range.last
|
||||||
|
if (first == null) return listOf()
|
||||||
|
collectComments(first, last, comments)
|
||||||
|
return comments
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copied from UpdatePsiFileCopyright.collectComments()
|
||||||
|
private fun collectComments(first: PsiElement, last: PsiElement?, comments: MutableList<PsiComment>) {
|
||||||
|
if (first === last && first is PsiComment) {
|
||||||
|
comments.add(first)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var elem: PsiElement? = first
|
||||||
|
while (elem !== last && elem != null) {
|
||||||
|
if (elem is PsiComment) {
|
||||||
|
comments.add(elem)
|
||||||
|
}
|
||||||
|
|
||||||
|
elem = elem.nextSibling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.copyright;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TargetBackend;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("idea/testData/copyright")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public class UpdateKotlinCopyrightTestGenerated extends AbstractUpdateKotlinCopyrightTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInCopyright() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/copyright"), Pattern.compile("^(.+)\\.(kt|kts)$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("ClassDocComment.kt")
|
||||||
|
public void testClassDocComment() throws Exception {
|
||||||
|
runTest("idea/testData/copyright/ClassDocComment.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("Empty.kt")
|
||||||
|
public void testEmpty() throws Exception {
|
||||||
|
runTest("idea/testData/copyright/Empty.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NoPackage.kt")
|
||||||
|
public void testNoPackage() throws Exception {
|
||||||
|
runTest("idea/testData/copyright/NoPackage.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("Simple.kt")
|
||||||
|
public void testSimple() throws Exception {
|
||||||
|
runTest("idea/testData/copyright/Simple.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user