From 66c16bef98aa007a0980be496d981900620afed6 Mon Sep 17 00:00:00 2001 From: schalkms Date: Mon, 19 Aug 2019 21:50:39 +0200 Subject: [PATCH 1/2] Migrate ComplexInterface test cases to JSR223 --- .../io/gitlab/arturbosch/detekt/rules/Case.kt | 2 - .../rules/complexity/ComplexInterfaceSpec.kt | 110 ++++++++++++++++-- .../cases/ComplexInterfaceNegative.kt | 24 ---- .../cases/ComplexInterfacePositive.kt | 33 ------ 4 files changed, 98 insertions(+), 71 deletions(-) delete mode 100644 detekt-rules/src/test/resources/cases/ComplexInterfaceNegative.kt delete mode 100644 detekt-rules/src/test/resources/cases/ComplexInterfacePositive.kt diff --git a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/Case.kt b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/Case.kt index 783fb7ee8bab..cfd4186f3634 100644 --- a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/Case.kt +++ b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/Case.kt @@ -53,8 +53,6 @@ enum class Case(val file: String) { MemberNameEqualsClassNamePositive("/cases/MemberNameEqualsClassNamePositive.kt"), OverloadedMethods("/cases/OverloadedMethods.kt"), ComplexClass("/cases/ComplexClass.kt"), - ComplexInterfaceNegative("/cases/ComplexInterfaceNegative.kt"), - ComplexInterfacePositive("/cases/ComplexInterfacePositive.kt"), NestedClasses("/cases/NestedClasses.kt"), NoClasses("/cases/NoClasses.kt"), UnreachableCode("/cases/UnreachableCode.kt"), diff --git a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt index c40616713211..2c90069ab276 100644 --- a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt +++ b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt @@ -1,8 +1,7 @@ package io.gitlab.arturbosch.detekt.rules.complexity -import io.gitlab.arturbosch.detekt.rules.Case import io.gitlab.arturbosch.detekt.test.TestConfig -import io.gitlab.arturbosch.detekt.test.lint +import io.gitlab.arturbosch.detekt.test.compileAndLint import org.assertj.core.api.Assertions.assertThat import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe @@ -10,23 +9,110 @@ import org.spekframework.spek2.style.specification.describe class ComplexInterfaceSpec : Spek({ val subject by memoized { ComplexInterface(threshold = THRESHOLD) } + val config = TestConfig(mapOf(ComplexInterface.INCLUDE_STATIC_DECLARATIONS to "true")) - describe("ComplexInterface rule") { + describe("ComplexInterface rule positives") { - val path = Case.ComplexInterfacePositive.path() + context("interface members") { + val code = """ + interface I { + fun f1() + fun f2() + val i1: Int + fun fImpl() {} + } + """ - it("reports interfaces which member size exceeds the threshold") { - assertThat(subject.lint(path)).hasSize(2) + it("reports complex interface") { + assertThat(subject.compileAndLint(code)).hasSize(1) + } + + it("reports complex interface with includeStaticDeclarations config") { + val rule = ComplexInterface(config, threshold = THRESHOLD) + assertThat(rule.compileAndLint(code)).hasSize(1) + } + } + + context("nested interface members") { + val code = """ + class I { + interface Nested { + fun f1() + fun f2() + val i1: Int + fun fImpl() {} + } + } + """ + + it("reports complex interface") { + assertThat(subject.compileAndLint(code)).hasSize(1) + } + + it("reports complex interface with includeStaticDeclarations config") { + val rule = ComplexInterface(config, threshold = THRESHOLD) + assertThat(rule.compileAndLint(code)).hasSize(1) + } + } + + context("interface with static declarations") { + val code = """ + interface I { + fun f1() + + companion object { + fun sf() = 0 + const val c = 0 + val v = 0 + } + } + """ + + it("does not report static declarations per default") { + assertThat(subject.compileAndLint(code)).isEmpty() + } + + it("reports complex interface with includeStaticDeclarations config") { + val rule = ComplexInterface(config, threshold = THRESHOLD) + assertThat(rule.compileAndLint(code)).hasSize(1) + } + } + } + + describe("ComplexInterface rule negatives") { + + it("does not report a simple interface ") { + val code = """ + interface I { + fun f() + fun fImpl() { + val x = 0 // should not report + } + + val i: Int + // a comment shouldn't be detected + } + """ + assertThat(subject.compileAndLint(code)).isEmpty() } - it("reports interfaces which member size exceeds the threshold including static declarations") { - val config = TestConfig(mapOf(ComplexInterface.INCLUDE_STATIC_DECLARATIONS to "true")) - val rule = ComplexInterface(config, threshold = THRESHOLD) - assertThat(rule.lint(path)).hasSize(3) + it("does not report a simple interface with a companion object") { + val code = """ + interface I { + fun f() + + companion object { + fun sf() = 0 + const val c = 0 + } + } + """ + assertThat(subject.compileAndLint(code)).isEmpty() } - it("does not report interfaces which member size is under the threshold") { - assertThat(subject.lint(Case.ComplexInterfaceNegative.path())).hasSize(0) + it("does not report an empty interface") { + val code = "interface Empty" + assertThat(subject.compileAndLint(code)).isEmpty() } } }) diff --git a/detekt-rules/src/test/resources/cases/ComplexInterfaceNegative.kt b/detekt-rules/src/test/resources/cases/ComplexInterfaceNegative.kt deleted file mode 100644 index 9f85af8010ee..000000000000 --- a/detekt-rules/src/test/resources/cases/ComplexInterfaceNegative.kt +++ /dev/null @@ -1,24 +0,0 @@ -@file:Suppress("unused", "UNUSED_VARIABLE") - -package cases - -interface InterfaceOk1 { - fun f1() - fun fImpl() { - val x = 0 // should not report - } - - val i1: Int - // a comment shouldn't be detected -} - -interface InterfaceOk2 { - fun f1() - - companion object { - fun sf() = 0 - const val c = 0 - } -} - -interface EmptyInterface diff --git a/detekt-rules/src/test/resources/cases/ComplexInterfacePositive.kt b/detekt-rules/src/test/resources/cases/ComplexInterfacePositive.kt deleted file mode 100644 index d4e1092be901..000000000000 --- a/detekt-rules/src/test/resources/cases/ComplexInterfacePositive.kt +++ /dev/null @@ -1,33 +0,0 @@ -@file:Suppress("unused") - -package cases - -// reports 1 - too many members -interface TooLargeInterface { - fun f1() - fun f2() - val i1: Int - fun fImpl() {} -} - -// reports 1 - too many members -class ClassWithNestedInterface { - - interface TooLargeNestedInterface { - fun f1() - fun f2() - val i1: Int - fun fImpl() {} - } -} - -// reports 1 - too many members -interface TooLargeInterfaceWithStaticDeclarations { - fun f1() - - companion object { - fun sf() = 0 - const val c = 0 - val si = 0 - } -} From e34e3a88b065d15c943f9cf80028028c1e112c67 Mon Sep 17 00:00:00 2001 From: schalkms Date: Mon, 19 Aug 2019 21:58:47 +0200 Subject: [PATCH 2/2] Fix detekt.TrailingWhitespace warnings --- .../detekt/rules/complexity/ComplexInterfaceSpec.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt index 2c90069ab276..87eed0669ce8 100644 --- a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt +++ b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ComplexInterfaceSpec.kt @@ -59,7 +59,6 @@ class ComplexInterfaceSpec : Spek({ val code = """ interface I { fun f1() - companion object { fun sf() = 0 const val c = 0 @@ -88,7 +87,7 @@ class ComplexInterfaceSpec : Spek({ fun fImpl() { val x = 0 // should not report } - + val i: Int // a comment shouldn't be detected } @@ -100,7 +99,7 @@ class ComplexInterfaceSpec : Spek({ val code = """ interface I { fun f() - + companion object { fun sf() = 0 const val c = 0