-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
188 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
src/main/kotlin/net/igsoft/typeutils/property/ImmutableTypedPropertiesBuilder.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package net.igsoft.typeutils.property | ||
|
||
import net.igsoft.typeutils.marker.TypedMarker | ||
|
||
@Suppress("unused") | ||
class ImmutableTypedPropertiesBuilder { | ||
private val properties = TypedProperties(mutableMapOf()) | ||
|
||
fun <T> putProperty(key: TypedMarker<T>, value: T) = apply { | ||
properties[key] = value | ||
} | ||
|
||
fun build(): ImmutableTypedProperties = properties | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
src/test/kotlin/net/igsoft/typeutils/globalcontext/GlobalContextTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package net.igsoft.typeutils.globalcontext | ||
|
||
import assertk.assertThat | ||
import assertk.assertions.isEqualTo | ||
import net.igsoft.typeutils.marker.TypedMarker | ||
import org.junit.jupiter.api.Test | ||
|
||
data class Person(val firstName: String, val lastName: String, val age: Int) | ||
|
||
class GlobalContextTest { | ||
private val person by TypedMarker.create<Person>() | ||
|
||
@Test | ||
fun `Assert that we can save and read objects on GlobalContext`() { | ||
val personEntity = Person("Marcin", "Iksiński", 28) | ||
GlobalContext.register(person, personEntity) | ||
|
||
assertThat(GlobalContext[person]).isEqualTo(personEntity) | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/test/kotlin/net/igsoft/typeutils/marker/TypedMarkerTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package net.igsoft.typeutils.marker | ||
|
||
import assertk.assertThat | ||
import assertk.assertions.isEqualTo | ||
import assertk.assertions.prop | ||
import org.junit.jupiter.api.Test | ||
|
||
class TypedMarkerTest { | ||
@Test | ||
fun `Assert that TypedMarker can be created with property syntax`() { | ||
val someProperty by TypedMarker.create<String>() | ||
assertThat(someProperty).apply { | ||
prop(TypedMarker<String>::clazz).isEqualTo(String::class.java) | ||
prop(TypedMarker<String>::id).isEqualTo("someProperty") | ||
} | ||
} | ||
|
||
@Test | ||
fun `Assert that TypedMarker can be created manually`() { | ||
assertThat(TypedMarker.create(String::class.java, "s1")).apply { | ||
prop(TypedMarker<String>::clazz).isEqualTo(String::class.java) | ||
prop(TypedMarker<String>::id).isEqualTo("s1") | ||
} | ||
|
||
assertThat(TypedMarker.create<Int>("s2")).apply { | ||
prop(TypedMarker<Int>::clazz).isEqualTo(Integer::class.java) | ||
prop(TypedMarker<Int>::id).isEqualTo("s2") | ||
} | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
src/test/kotlin/net/igsoft/typeutils/pipeline/PipelineTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package net.igsoft.typeutils.pipeline | ||
|
||
import assertk.assertThat | ||
import assertk.assertions.isEqualTo | ||
import net.igsoft.typeutils.marker.TypedMarker | ||
import org.junit.jupiter.api.Test | ||
|
||
class PipelineTest { | ||
private val firstname by TypedMarker.create<String>() | ||
private val lastname by TypedMarker.create<String>() | ||
private val age by TypedMarker.create<Int>() | ||
private val shoeSize by TypedMarker.create<Int?>() | ||
private val helloMessage by TypedMarker.create<String>() | ||
|
||
private val p1: Processor = object: Processor { | ||
override fun process(context: Context) { | ||
context[helloMessage] = context[firstname] + " " + context[lastname] | ||
context.invokeNextProcessor() | ||
} | ||
} | ||
|
||
private val p2 = object: Processor { | ||
override fun process(context: Context) { | ||
val shoeSize = context[shoeSize] | ||
val details = "age: " + context[age] + if (shoeSize != null) ", shoeSize: $shoeSize" else "" | ||
context[helloMessage] = context[helloMessage] + " [$details]" | ||
context.invokeNextProcessor() | ||
} | ||
} | ||
|
||
@Test | ||
fun `Create simple pipeline`() { | ||
val context = Context() | ||
context[firstname] = "Marcin" | ||
context[lastname] = "Iksiński" | ||
context[age] = 28 | ||
|
||
val pipeline = Pipeline(p1, p2) | ||
|
||
pipeline.process(context) | ||
|
||
assertThat(context[helloMessage]).isEqualTo("Marcin Iksiński [age: 28]") | ||
|
||
context[shoeSize] = 32 | ||
pipeline.process(context) | ||
|
||
assertThat(context[helloMessage]).isEqualTo("Marcin Iksiński [age: 28, shoeSize: 32]") | ||
} | ||
} |
59 changes: 59 additions & 0 deletions
59
src/test/kotlin/net/igsoft/typeutils/property/TypedPropertiesTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package net.igsoft.typeutils.property | ||
|
||
import assertk.assertThat | ||
import assertk.assertions.* | ||
import net.igsoft.typeutils.marker.TypedMarker | ||
import org.junit.jupiter.api.BeforeEach | ||
import org.junit.jupiter.api.Test | ||
|
||
class TypedPropertiesTest { | ||
private lateinit var properties: TypedProperties | ||
private val firstname by TypedMarker.create<String>() | ||
private val surname by TypedMarker.create<String>() | ||
private val age by TypedMarker.create<Int>() | ||
private val shoeSize by TypedMarker.create<Int>() | ||
|
||
@BeforeEach | ||
fun setUp() { | ||
properties = TypedProperties(mutableMapOf()) | ||
|
||
properties[firstname] = "Gregory" | ||
properties[surname] = "Iksiński" | ||
properties[age] = 28 | ||
} | ||
|
||
@Test | ||
fun `Assert that creation is possible`() { | ||
val properties = TypedProperties(mutableMapOf()) | ||
|
||
assertThat(properties).isNotNull() | ||
assertThat(properties).apply { | ||
prop(TypedProperties::size).isEqualTo(0) | ||
prop(TypedProperties::keys).isEmpty() | ||
prop(TypedProperties::values).isEmpty() | ||
prop(TypedProperties::entries).isEmpty() | ||
} | ||
} | ||
|
||
@Test | ||
fun `Assert that putting new properties is possible`() { | ||
properties[shoeSize] = 32 | ||
|
||
assertThat(properties).apply { | ||
prop(TypedProperties::size).isEqualTo(4) | ||
prop(TypedProperties::keys).isEqualTo(setOf(firstname, surname, age, shoeSize)) | ||
prop(TypedProperties::values).containsExactlyInAnyOrder("Gregory", "Iksiński", 28, 32) | ||
} | ||
} | ||
|
||
@Test | ||
fun `Assert that removing properties is possible`() { | ||
properties.remove(age) | ||
|
||
assertThat(properties).apply { | ||
prop(TypedProperties::size).isEqualTo(2) | ||
prop(TypedProperties::keys).isEqualTo(setOf(firstname, surname)) | ||
prop(TypedProperties::values).containsExactlyInAnyOrder("Gregory", "Iksiński") | ||
} | ||
} | ||
} |