Skip to content

Commit 9b30f49

Browse files
authored
Parser Fix (#47)
* Fix SelectorParse.parse
1 parent 9ebfc6b commit 9b30f49

File tree

13 files changed

+229
-12
lines changed

13 files changed

+229
-12
lines changed

src/main/kotlin/org/xpathqs/core/reflection/PackageScanner.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ class PackageScanner(
3838
/**
3939
* Scan provided package
4040
*/
41-
constructor(packageName: String): this(Reflections(packageName))
41+
constructor(packageName: String) : this(Reflections(packageName))
4242

4343
val packageObjects: Collection<Block> by lazy {
44-
scanner.getSubTypesOf(Block::class.java).filter {
44+
scanner.getSubTypesOf(Block::class.java).filter {
4545
it.isObject()
4646
}.map {
4747
it.getObject()

src/main/kotlin/org/xpathqs/core/reflection/ReflectionExtensions.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ import kotlin.reflect.KProperty
4141
* @sample org.xpathqs.core.reflection.extensions.ReflectionExtensionsIsObjectTests
4242
*/
4343
internal fun Any.isObject(): Boolean {
44-
if(this is Class<*>) {
44+
if (this is Class<*>) {
4545
return this.declaredFields
4646
.find {
47-
it.name == "INSTANCE"
47+
it.name == "INSTANCE"
4848
} != null
4949
}
5050
return this.javaClass.declaredFields

src/main/kotlin/org/xpathqs/core/reflection/SelectorParser.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ package org.xpathqs.core.reflection
2424

2525
import org.xpathqs.core.selector.Block
2626
import org.xpathqs.core.selector.NullSelector
27+
import org.xpathqs.core.selector.base.BaseSelector
2728
import org.xpathqs.core.selector.base.ISelector
28-
import org.xpathqs.core.selector.selector.Selector
2929

3030
/**
3131
* Class for initializing Selectors names and structure via Reflection
@@ -52,7 +52,7 @@ internal class SelectorParser(
5252

5353
srf.innerSelectorFields.forEach {
5454
it.isAccessible = true
55-
val sel = it.get(rootObj) as Selector
55+
val sel = it.get(rootObj) as BaseSelector
5656
sel.setName(rootObj.name + "." + it.name)
5757
sel.setBase(rootObj)
5858
sel.freeze()

src/main/kotlin/org/xpathqs/core/reflection/SelectorReflectionFields.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ package org.xpathqs.core.reflection
2424

2525
import org.xpathqs.core.selector.Block
2626
import org.xpathqs.core.selector.base.BaseSelector
27-
import org.xpathqs.core.selector.selector.Selector
2827
import java.lang.reflect.Field
2928

3029
/**
@@ -39,7 +38,7 @@ class SelectorReflectionFields(
3938
* Returns collection of [BaseSelector]s inner objects of [rootObj]
4039
*/
4140
val innerSelectors: Collection<BaseSelector> by lazy {
42-
innerSelectorFields.map { it.get(rootObj) as Selector }
41+
innerSelectorFields.map { it.get(rootObj) as BaseSelector }
4342
}
4443

4544
/**
@@ -79,6 +78,7 @@ class SelectorReflectionFields(
7978
if (rootObj::class.java.simpleName != BaseSelector::class.java.simpleName) {
8079
rootObj::class.java.declaredFields.forEach {
8180
if (it.type.isSelectorSubtype()) {
81+
it.isAccessible = true
8282
res.add(it)
8383
}
8484
}

src/test/kotlin/org/xpathqs/core/reflection/PackageScannerTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ package org.xpathqs.core.reflection
2424

2525
import assertk.assertAll
2626
import assertk.assertThat
27-
import assertk.assertions.*
27+
import assertk.assertions.containsExactlyInAnyOrder
28+
import assertk.assertions.isEmpty
29+
import assertk.assertions.isEqualTo
2830
import org.junit.jupiter.api.Test
2931
import org.xpathqs.core.reflection.packagescannertestpages.Page1
3032
import org.xpathqs.core.reflection.packagescannertestpages.Page2

src/test/kotlin/org/xpathqs/core/reflection/SelectorReflectionFieldsTest.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,28 @@ internal class SelectorReflectionFieldsTest {
8484
)
8585
}
8686

87+
@Test
88+
fun innerSelectorFieldsWithInnerGroupObject() {
89+
val actual = SelectorReflectionFields(PageWithBaseAndInnerGroupObject).innerSelectorFields
90+
val names = actual.map { it.name }
91+
92+
assertThat(names)
93+
.containsExactlyInAnyOrder(
94+
"s1_base"
95+
)
96+
}
97+
98+
@Test
99+
fun innerSelectorsWithInnerGroupObject() {
100+
val actual = SelectorReflectionFields(PageWithBaseAndInnerGroupObject).innerSelectors
101+
val names = actual.map { it.toXpath() }
102+
103+
assertThat(names)
104+
.containsExactlyInAnyOrder(
105+
"//base_tag"
106+
)
107+
}
108+
87109
@Test
88110
fun innerSelectorFieldsForInnerObject() {
89111
val actual = SelectorReflectionFields(PageWithBaseAndInnerObject.Inner).innerSelectorFields

src/test/kotlin/org/xpathqs/core/reflection/packagescannertestpages/Page1.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ package org.xpathqs.core.reflection.packagescannertestpages
2424

2525
import org.xpathqs.core.selector.Block
2626

27-
object Page1: Block()
27+
object Page1 : Block()

src/test/kotlin/org/xpathqs/core/reflection/packagescannertestpages/Page2.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ package org.xpathqs.core.reflection.packagescannertestpages
2424

2525
import org.xpathqs.core.selector.Block
2626

27-
object Page2: Block()
27+
object Page2 : Block()

src/test/kotlin/org/xpathqs/core/reflection/packagescannertestpages/innerpackage/Page3.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ package org.xpathqs.core.reflection.packagescannertestpages.innerpackage
2424

2525
import org.xpathqs.core.selector.Block
2626

27-
object Page3: Block()
27+
object Page3 : Block()

src/test/kotlin/org/xpathqs/core/reflection/pages.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import org.xpathqs.core.selector.selector.Selector
2929
import org.xpathqs.core.selector.selector.SelectorProps
3030
import org.xpathqs.core.util.SelectorFactory.tagSelector
3131

32+
open class Block2 : Block()
33+
3234
object PageWithBase : Block(
3335
Selector(
3436
props = SelectorProps(tag = "base")
@@ -37,6 +39,16 @@ object PageWithBase : Block(
3739
val s1 = Selector(props = SelectorProps(tag = "s1"))
3840
}
3941

42+
object PageWithGroupBase : Block(
43+
tagSelector("div") + tagSelector("p")
44+
) {
45+
val s1 = Selector(props = SelectorProps(tag = "s1"))
46+
}
47+
48+
object PageWithInhGroup : Block2() {
49+
val s1 = tagSelector("div") + tagSelector("p")
50+
}
51+
4052
object PageNoBase : Block() {
4153
val s1 = Selector(props = SelectorProps(tag = "s1"))
4254
}
@@ -63,4 +75,18 @@ object PageWithBaseAndInnerObject : Block(
6375
) {
6476
val s1_inner = Selector(props = SelectorProps(tag = "inner_tag"))
6577
}
78+
}
79+
80+
object PageWithBaseAndInnerGroupObject : Block(
81+
Selector(
82+
props = SelectorProps(tag = "base")
83+
)
84+
) {
85+
val s1_base = Selector(props = SelectorProps(tag = "base_tag"))
86+
87+
object Inner : Block(
88+
tagSelector("div") + tagSelector("p")
89+
) {
90+
val s1_inner = Selector(props = SelectorProps(tag = "inner_tag"))
91+
}
6692
}

0 commit comments

Comments
 (0)