Skip to content

Commit

Permalink
Add customizeProperty API as maintained
Browse files Browse the repository at this point in the history
  • Loading branch information
seongahjo committed Sep 11, 2024
1 parent 9295cc3 commit 19a9d4b
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ package com.navercorp.fixturemonkey.kotlin

import com.navercorp.fixturemonkey.ArbitraryBuilder
import com.navercorp.fixturemonkey.FixtureMonkey
import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary
import com.navercorp.fixturemonkey.api.experimental.TypedPropertySelector
import com.navercorp.fixturemonkey.api.instantiator.Instantiator
import com.navercorp.fixturemonkey.api.property.PropertySelector
import com.navercorp.fixturemonkey.api.type.TypeReference
Expand Down Expand Up @@ -229,6 +231,11 @@ class KotlinTypeDefaultArbitraryBuilder<T>(
): KotlinTypeDefaultArbitraryBuilder<T> =
this.apply { delegate.instantiate(type, instantiator) }

override fun <U : Any?> customizeProperty(
propertySelector: TypedPropertySelector<U>,
combinableArbitraryCustomizer: Function<CombinableArbitrary<out U>, CombinableArbitrary<out U>>
): ArbitraryBuilder<T> = this.apply { delegate.customizeProperty(propertySelector, combinableArbitraryCustomizer) }

override fun build(): Arbitrary<T> = delegate.build()

override fun sample(): T = delegate.sample()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
import net.jqwik.api.Combinators.F3;
import net.jqwik.api.Combinators.F4;

import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary;
import com.navercorp.fixturemonkey.api.experimental.TypedPropertySelector;
import com.navercorp.fixturemonkey.api.instantiator.Instantiator;
import com.navercorp.fixturemonkey.api.property.PropertySelector;
import com.navercorp.fixturemonkey.api.type.TypeReference;
Expand Down Expand Up @@ -554,4 +556,22 @@ <R> ArbitraryBuilder<R> zipWith(
ArbitraryBuilder<T> instantiate(Class<?> type, Instantiator instantiator);

ArbitraryBuilder<T> instantiate(TypeReference<?> type, Instantiator instantiator);

/**
* Customizes the arbitrary value generated from selected properties.
* It can be called several times and nested. It has an order dependency.
* <p>
* Without any set APIs, it customizes the arbitrary value.
* With set APIs, it customizes the last value in set APIs.
*
* @param propertySelector the property selector with type
* @param combinableArbitraryCustomizer
* @param <U> the type of the properties selected by {@code propertySelector}.
* @return a customized {@link ArbitraryBuilder}
*/
@API(since = "1.0.9", status = Status.MAINTAINED)
<U> ArbitraryBuilder<T> customizeProperty(
TypedPropertySelector<U> propertySelector,
Function<CombinableArbitrary<? extends U>, CombinableArbitrary<? extends U>> combinableArbitraryCustomizer
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@

import com.navercorp.fixturemonkey.ArbitraryBuilder;
import com.navercorp.fixturemonkey.JavaTypeArbitraryBuilder;
import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary;
import com.navercorp.fixturemonkey.api.experimental.TypedPropertySelector;
import com.navercorp.fixturemonkey.api.instantiator.Instantiator;
import com.navercorp.fixturemonkey.api.property.PropertySelector;
import com.navercorp.fixturemonkey.api.type.TypeReference;
Expand Down Expand Up @@ -335,4 +337,13 @@ public JavaTypeArbitraryBuilder<T> instantiate(TypeReference<?> type, Instantiat
delegate.instantiate(type, instantiator);
return this;
}

@Override
public <U> ArbitraryBuilder<T> customizeProperty(
TypedPropertySelector<U> propertySelector,
Function<CombinableArbitrary<? extends U>, CombinableArbitrary<? extends U>> combinableArbitraryCustomizer
) {
delegate.customizeProperty(propertySelector, combinableArbitraryCustomizer);
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,11 @@

package com.navercorp.fixturemonkey.experimental;

import java.util.function.Function;

import org.apiguardian.api.API;
import org.apiguardian.api.API.Status;

import com.navercorp.fixturemonkey.ArbitraryBuilder;
import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary;
import com.navercorp.fixturemonkey.api.experimental.TypedPropertySelector;

@API(since = "0.6.12", status = Status.MAINTAINED)
public interface ExperimentalArbitraryBuilder<T> extends ArbitraryBuilder<T> {
@API(since = "1.0.9", status = Status.EXPERIMENTAL)
<U> ExperimentalArbitraryBuilder<T> customizeProperty(
TypedPropertySelector<U> propertySelector,
Function<CombinableArbitrary<? extends U>, CombinableArbitrary<? extends U>> combinableArbitraryCustomizer
);
}

0 comments on commit 19a9d4b

Please sign in to comment.