Skip to content

Commit

Permalink
Improve tests
Browse files Browse the repository at this point in the history
  • Loading branch information
VitalyVPinchuk committed May 5, 2022
1 parent b86ae6f commit eed733c
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 76 deletions.
Expand Up @@ -71,8 +71,8 @@ class KDocReferencesNonPublicProperty(config: Config = Config.empty) : Rule(conf
return true
}
var classOrObject = containingClassOrObject
while (classOrObject != null && classOrObject is KtObjectDeclaration) {
if (!classOrObject.isPublic && !isProtected()) {
while (classOrObject is KtObjectDeclaration) {
if (!classOrObject.isPublic) {
return true
}
classOrObject = classOrObject.containingClassOrObject
Expand All @@ -83,7 +83,7 @@ class KDocReferencesNonPublicProperty(config: Config = Config.empty) : Rule(conf
private fun KtProperty.isReferencedInherited(comment: String): Boolean {
var qualifiedName = nameAsSafeName.asString()
var classOrObject = containingClassOrObject
while (classOrObject != null && classOrObject is KtObjectDeclaration) {
while (classOrObject is KtObjectDeclaration) {
qualifiedName = "${classOrObject.nameAsSafeName.asString()}.$qualifiedName"
classOrObject = classOrObject.containingClassOrObject
}
Expand Down
Expand Up @@ -7,90 +7,128 @@ import org.junit.jupiter.api.Test
class KDocReferencesNonPublicPropertySpec {
val subject = KDocReferencesNonPublicProperty()

inner class `KDocReferencesNonPublicProperty rule` {

@Test
fun `reports referenced non-public properties`() {
val code = """
/**
* Comment
* [prop1] - non-public property
* [prop2] - public property
*/
class Test {
private val prop1 = 0
val prop2 = 0
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
@Test
fun `reports referenced non-public properties`() {
val code = """
/**
* Comment
* [prop1] - non-public property
* [prop2] - public property
*/
class Test {
private val nonReferencedProp = 0
private val prop1 = 0
val prop2 = 0
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}

@Test
fun `reports referenced non-public properties in private class`() {
val code = """
/**
* Comment
* [prop1] - non-public property
* [prop2] - public property
*/
private class Test {
private val prop1 = 0
val prop2 = 0
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
@Test
fun `reports referenced non-public properties in private class`() {
val code = """
/**
* Comment
* [prop1] - non-public property
* [prop2] - public property
*/
private class Test {
private val nonReferencedProp = 0
private val prop1 = 0
val prop2 = 0
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}

@Test
fun `reports referenced non-public properties in nested objects`() {
val code = """
/**
* Comment
* [prop1] - non-public property
* [A.prop2] - non-public property
* [A.B.prop3] - non-public property
* [A.C.prop4] - non-public property
*/
class Test {
private val prop1 = 0
@Test
fun `reports referenced non-public properties in nested objects`() {
val code = """
/**
* Comment
* [prop1] - non-public property
* [A.prop2] - non-public property
* [A.B.prop3] - non-public property
* [A.C.prop4] - non-public property
*/
class Test {
private val prop1 = 0
object A {
private val nonReferencedProp = 0
private val prop2 = 0
object A {
private val prop2 = 0
private object B {
val prop3 = 0
}
object C {
private val prop4 = 0
}
private object B {
val prop3 = 0
}
object C {
private val prop4 = 0
}
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(4)
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(4)
}

@Test
fun `does not report referenced public properties in nested objects`() {
val code = """
/**
* Comment
* [prop1] - public property
* [A.B.prop2] - public property
* [C.prop3] - public property
*/
open class Test {
protected val prop1 = 0
object A {
object B {
val prop2 = 0
}
}
object C {
val prop3 = 0
@Test
fun `does not report properties with no KDoc`() {
val code = """
class Test {
private val prop1 = 0
val prop2 = 0
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}

@Test
fun `does not report properties with empty comments`() {
val code = """
/**
*/
class Test {
private val prop1 = 0
val prop2 = 0
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}

@Test
fun `does not report properties not enclosed in a class`() {
val code = """
/**
* [prop1]
* [prop2]
*/
private val prop1 = 0
val prop2 = 0
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}

@Test
fun `does not report referenced public properties in nested objects`() {
val code = """
/**
* Comment
* [prop1] - public property
* [A.B.prop2] - public property
* [C.prop3] - public property
*/
open class Test {
protected val prop1 = 0
object A {
object B {
val nonReferencedProp = 0
val prop2 = 0
}
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
object C {
val prop3 = 0
}
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
}

0 comments on commit eed733c

Please sign in to comment.