Skip to content

Commit

Permalink
Add customizing Wildcard type in an option
Browse files Browse the repository at this point in the history
  • Loading branch information
seongahjo committed Jan 11, 2024
1 parent 0411fc3 commit 092f127
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 4 deletions.
2 changes: 2 additions & 0 deletions docs/content/v1.0.x/release-notes/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ weight: 100
### v1.0.9
Fix addExceptGenerateClass option affected by specific ArbitraryIntrospector

Add customizing Wildcard type in an option

##### Experimental Feature
Add `customizeProperty` API in `ArbitraryBuilder` to customize a generated value.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.apiguardian.api.API;
import org.apiguardian.api.API.Status;

import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary;
import com.navercorp.fixturemonkey.api.constraint.JavaConstraintGenerator;
import com.navercorp.fixturemonkey.api.container.DecomposedContainerValueFactory;
import com.navercorp.fixturemonkey.api.generator.ArbitraryContainerInfoGenerator;
Expand All @@ -62,6 +63,7 @@
import com.navercorp.fixturemonkey.api.generator.StreamContainerPropertyGenerator;
import com.navercorp.fixturemonkey.api.instantiator.InstantiatorProcessor;
import com.navercorp.fixturemonkey.api.introspector.ArbitraryIntrospector;
import com.navercorp.fixturemonkey.api.introspector.ArbitraryIntrospectorResult;
import com.navercorp.fixturemonkey.api.introspector.NullArbitraryIntrospector;
import com.navercorp.fixturemonkey.api.matcher.AssignableTypeMatcher;
import com.navercorp.fixturemonkey.api.matcher.DoubleGenericTypeMatcher;
Expand All @@ -73,6 +75,7 @@
import com.navercorp.fixturemonkey.api.property.PropertyGenerator;
import com.navercorp.fixturemonkey.api.property.PropertyNameResolver;
import com.navercorp.fixturemonkey.api.type.Types;
import com.navercorp.fixturemonkey.api.type.Types.GeneratedWildcardType;
import com.navercorp.fixturemonkey.api.type.Types.UnidentifiableType;
import com.navercorp.fixturemonkey.api.validator.ArbitraryValidator;

Expand All @@ -84,8 +87,12 @@ public final class FixtureMonkeyOptions {
public static final List<MatcherOperator<ContainerPropertyGenerator>> DEFAULT_CONTAINER_PROPERTY_GENERATORS =
getDefaultContainerPropertyGenerators();
public static final List<MatcherOperator<ArbitraryIntrospector>> DEFAULT_ARBITRARY_INTROSPECTORS =
Collections.singletonList(
MatcherOperator.exactTypeMatchOperator(UnidentifiableType.class, NullArbitraryIntrospector.INSTANCE)
Arrays.asList(
MatcherOperator.exactTypeMatchOperator(UnidentifiableType.class, NullArbitraryIntrospector.INSTANCE),
MatcherOperator.exactTypeMatchOperator(
GeneratedWildcardType.class,
context -> new ArbitraryIntrospectorResult(CombinableArbitrary.from(new Object()))
)
);
public static final ObjectPropertyGenerator DEFAULT_OBJECT_PROPERTY_GENERATOR =
DefaultObjectPropertyGenerator.INSTANCE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public final class FixtureMonkeyOptionsBuilder {
private ArbitraryContainerInfoGenerator defaultArbitraryContainerInfoGenerator;
private ArbitraryGenerator defaultArbitraryGenerator;
private UnaryOperator<ArbitraryGenerator> defaultArbitraryGeneratorOperator = it -> it;
private final List<MatcherOperator<ArbitraryIntrospector>> arbitraryIntrospectors =
private List<MatcherOperator<ArbitraryIntrospector>> arbitraryIntrospectors =
new ArrayList<>(DEFAULT_ARBITRARY_INTROSPECTORS);
private final JavaDefaultArbitraryGeneratorBuilder javaDefaultArbitraryGeneratorBuilder =
IntrospectedArbitraryGenerator.javaBuilder();
Expand Down Expand Up @@ -367,7 +367,7 @@ public FixtureMonkeyOptionsBuilder defaultArbitraryContainerInfoGenerator(
public FixtureMonkeyOptionsBuilder insertFirstArbitraryIntrospector(
MatcherOperator<ArbitraryIntrospector> arbitraryIntrospector
) {
this.arbitraryIntrospectors.add(arbitraryIntrospector);
this.arbitraryIntrospectors = insertFirst(this.arbitraryIntrospectors, arbitraryIntrospector);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ public static Class<?> getActualType(AnnotatedType annotatedType) {

public static Class<?> getActualType(Type type) {
if (type.getClass() == Class.class) {
if (type == Object.class) {
return GeneratedWildcardType.class;
}
return (Class<?>)type;
}

Expand Down Expand Up @@ -397,6 +400,11 @@ private UnidentifiableType() {
}
}

public static class GeneratedWildcardType {
private GeneratedWildcardType() {
}
}

public static Class<?> primitiveToWrapper(final Class<?> cls) {
Class<?> convertedClass = cls;
if (cls != null && cls.isPrimitive()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@
package com.navercorp.fixturemonkey.tests.kotlin

import com.navercorp.fixturemonkey.FixtureMonkey
import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary
import com.navercorp.fixturemonkey.api.experimental.JavaGetterMethodPropertySelector.javaGetter
import com.navercorp.fixturemonkey.api.experimental.TypedExpressionGenerator.typedRoot
import com.navercorp.fixturemonkey.api.introspector.ArbitraryIntrospectorResult
import com.navercorp.fixturemonkey.api.introspector.ConstructorPropertiesArbitraryIntrospector
import com.navercorp.fixturemonkey.api.introspector.FactoryMethodArbitraryIntrospector
import com.navercorp.fixturemonkey.api.introspector.FailoverIntrospector
import com.navercorp.fixturemonkey.api.type.Types.GeneratedWildcardType
import com.navercorp.fixturemonkey.kotlin.KotlinPlugin
import com.navercorp.fixturemonkey.kotlin.get
import com.navercorp.fixturemonkey.kotlin.giveMeBuilder
Expand Down Expand Up @@ -244,6 +247,34 @@ class KotlinTest {
then(actual).isBetween(min, max)
}

@RepeatedTest(TEST_COUNT)
fun sampleCustomizedWildcardType() {
// given
class MapObject(val map: Map<String, *>)

val expected = "test"

val sut = FixtureMonkey.builder()
.plugin(KotlinPlugin())
.pushExactTypeArbitraryIntrospector<GeneratedWildcardType> {
ArbitraryIntrospectorResult(
CombinableArbitrary.from(expected)
)
}
.build()

// when
val actual = sut.giveMeBuilder<MapObject>()
.sizeExp(MapObject::map, 1)
.sample()
.map
.values
.first()

// then
then(actual).isEqualTo(expected)
}

companion object {
private val SUT: FixtureMonkey = FixtureMonkey.builder()
.plugin(KotlinPlugin())
Expand Down

0 comments on commit 092f127

Please sign in to comment.