Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes in constructor invocation and argument management #755

Merged
merged 7 commits into from
Jan 7, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add ArgumentBucket test
  • Loading branch information
k163377 committed Jan 7, 2024
commit b7093e1be7ab8c487d62c0f5d926fc3809c46414
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.fasterxml.jackson.module.kotlin

import com.fasterxml.jackson.annotation.JsonCreator
import org.junit.Ignore
import org.junit.experimental.runners.Enclosed
import org.junit.runner.RunWith
import kotlin.reflect.KFunction
import kotlin.reflect.full.functions
import kotlin.reflect.full.hasAnnotation
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue


@RunWith(Enclosed::class)
class ArgumentBucketTest {
class Normal {
@Ignore
data class Constructor(val foo: String, val bar: String)

@Test
fun constructorTest() {
val function: KFunction<*> = ::Constructor
val params = function.parameters
val generator = BucketGenerator.forConstructor(params.size)
val bucket = generator.generate()

assertTrue(bucket.isEmpty())
assertEquals(0, bucket.size)
assertFalse(bucket.isFullInitialized)

bucket[params[0]] = "foo"

assertFalse(bucket.isEmpty())
assertEquals(1, bucket.size)
assertFalse(bucket.isFullInitialized)
assertEquals("foo", bucket[params[0]])

bucket[params[1]] = "bar"

assertFalse(bucket.isEmpty())
assertEquals(2, bucket.size)
assertTrue(bucket.isFullInitialized)
assertEquals("bar", bucket[params[1]])
}

@Ignore
data class Method(val foo: String, val bar: String) {
companion object {
@JvmStatic
@JsonCreator
fun of(foo: String, bar: String): Method = Method(foo, bar)
}
}

@Test
fun methodTest() {
val function: KFunction<*> = Method.Companion::class.functions.first { it.hasAnnotation<JsonCreator>() }
val params = function.parameters
val generator = BucketGenerator.forMethod(params.size, params[0], Method)
val bucket = generator.generate()

assertFalse(bucket.isEmpty())
assertEquals(1, bucket.size)
assertEquals(Method.Companion, bucket[params[0]])
assertFalse(bucket.isFullInitialized)

bucket[params[1]] = "foo"

assertFalse(bucket.isEmpty())
assertEquals(2, bucket.size)
assertFalse(bucket.isFullInitialized)
assertEquals("foo", bucket[params[1]])

bucket[params[2]] = "bar"

assertFalse(bucket.isEmpty())
assertEquals(3, bucket.size)
assertTrue(bucket.isFullInitialized)
assertEquals("bar", bucket[params[2]])
}
}

// After support, add a case with a value class.
}