From cf69e46ee3f16e363f3961e62c57892036232e35 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Thu, 22 Aug 2024 17:31:54 +0900 Subject: [PATCH 01/17] Add ArbitraryManager for managing builder candidates --- .../buildergroup/ArbitraryManagerGroup.java | 26 ++++++++ .../ArbitraryManagerCandidateList.java | 61 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java create mode 100644 fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java new file mode 100644 index 000000000..d7116c464 --- /dev/null +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java @@ -0,0 +1,26 @@ +/* + * Fixture Monkey + * + * Copyright (c) 2021-present NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.fixturemonkey.buildergroup; + +import com.navercorp.fixturemonkey.resolver.ArbitraryManagerCandidateList; + +public interface ArbitraryManagerGroup { + + ArbitraryManagerCandidateList generateCandidateList(); +} diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java new file mode 100644 index 000000000..a8a3dad58 --- /dev/null +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java @@ -0,0 +1,61 @@ +/* + * Fixture Monkey + * + * Copyright (c) 2021-present NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.fixturemonkey.resolver; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; + +public final class ArbitraryManagerCandidateList { + + private final Map> candidateMap = new HashMap<>(); + + private ArbitraryManagerCandidateList() { + } + + public static ArbitraryManagerCandidateList create() { + return new ArbitraryManagerCandidateList(); + } + + public ArbitraryManagerCandidateList add(String arbitraryBuilderName, ArbitraryBuilderCandidate candidate) { + checkNull(arbitraryBuilderName); + checkDuplicate(arbitraryBuilderName); + candidateMap.put(arbitraryBuilderName, candidate); + + return this; + } + + private void checkNull(String arbitraryBuilderName) { + if (arbitraryBuilderName == null) { + throw new IllegalArgumentException("ArbitraryBuilder name must not be null"); + } + } + + private void checkDuplicate(String arbitraryBuilderName) { + if (candidateMap.containsKey(arbitraryBuilderName)) { + throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + arbitraryBuilderName); + } + } + + public Map> getCandidates() { + return Collections.unmodifiableMap(candidateMap); + } +} From 49db542da27716a607662369faad5cceecd021cd Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Sat, 24 Aug 2024 01:06:54 +0900 Subject: [PATCH 02/17] Rename ArbitraryManagerCandidateList to ArbitraryCandidateManager --- .../buildergroup/ArbitraryManagerGroup.java | 4 ++-- ...ndidateList.java => ArbitraryCandidateManager.java} | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) rename fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/{ArbitraryManagerCandidateList.java => ArbitraryCandidateManager.java} (83%) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java index d7116c464..477f25c37 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java @@ -18,9 +18,9 @@ package com.navercorp.fixturemonkey.buildergroup; -import com.navercorp.fixturemonkey.resolver.ArbitraryManagerCandidateList; +import com.navercorp.fixturemonkey.resolver.ArbitraryCandidateManager; public interface ArbitraryManagerGroup { - ArbitraryManagerCandidateList generateCandidateList(); + ArbitraryCandidateManager generateCandidateList(); } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java similarity index 83% rename from fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java rename to fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java index a8a3dad58..70a904437 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryManagerCandidateList.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java @@ -24,18 +24,18 @@ import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; -public final class ArbitraryManagerCandidateList { +public final class ArbitraryCandidateManager { private final Map> candidateMap = new HashMap<>(); - private ArbitraryManagerCandidateList() { + private ArbitraryCandidateManager() { } - public static ArbitraryManagerCandidateList create() { - return new ArbitraryManagerCandidateList(); + public static ArbitraryCandidateManager create() { + return new ArbitraryCandidateManager(); } - public ArbitraryManagerCandidateList add(String arbitraryBuilderName, ArbitraryBuilderCandidate candidate) { + public ArbitraryCandidateManager add(String arbitraryBuilderName, ArbitraryBuilderCandidate candidate) { checkNull(arbitraryBuilderName); checkDuplicate(arbitraryBuilderName); candidateMap.put(arbitraryBuilderName, candidate); From 4122b1edec915152ccd8ab7f17e0ee62dd7205a6 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Sat, 24 Aug 2024 01:25:39 +0900 Subject: [PATCH 03/17] Add ArbitraryManagerFactory to register ArbitraryBuilder by name --- .../fixturemonkey/FixtureMonkey.java | 19 ++++++-- .../fixturemonkey/FixtureMonkeyBuilder.java | 14 +++++- .../customizer/ArbitraryManagerFactory.java | 46 +++++++++++++++++++ .../resolver/DefaultArbitraryBuilder.java | 15 ++++-- 4 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index 9434531b1..088727b59 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.function.Function; import java.util.stream.Stream; @@ -36,7 +37,9 @@ import com.navercorp.fixturemonkey.api.property.RootProperty; import com.navercorp.fixturemonkey.api.type.LazyAnnotatedType; import com.navercorp.fixturemonkey.api.type.TypeReference; +import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; import com.navercorp.fixturemonkey.customizer.ArbitraryManipulator; +import com.navercorp.fixturemonkey.customizer.ArbitraryManagerFactory; import com.navercorp.fixturemonkey.customizer.MonkeyManipulatorFactory; import com.navercorp.fixturemonkey.experimental.ExperimentalArbitraryBuilder; import com.navercorp.fixturemonkey.resolver.ArbitraryBuilderContext; @@ -53,6 +56,7 @@ public final class FixtureMonkey { private final MonkeyContext monkeyContext; private final List>> registeredArbitraryBuilders = new ArrayList<>(); private final MonkeyManipulatorFactory monkeyManipulatorFactory; + private final ArbitraryManagerFactory arbitraryManagerFactory; public FixtureMonkey( FixtureMonkeyOptions fixtureMonkeyOptions, @@ -60,7 +64,8 @@ public FixtureMonkey( ManipulatorOptimizer manipulatorOptimizer, MonkeyContext monkeyContext, List>>> registeredArbitraryBuilders, - MonkeyManipulatorFactory monkeyManipulatorFactory + MonkeyManipulatorFactory monkeyManipulatorFactory, + Map> arbitraryBuilderCandidateMap ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.traverser = traverser; @@ -68,6 +73,12 @@ public FixtureMonkey( this.monkeyContext = monkeyContext; this.monkeyManipulatorFactory = monkeyManipulatorFactory; initializeRegisteredArbitraryBuilders(registeredArbitraryBuilders); + /* + ArbitraryBuilder에서 arbitaryBuilderName을 통해 선택을 한 후, 선택된 ArbitraryBuilder를 적용시킬 계획입니다. + 위와 같이 구현을 하기 위해선, DefaultArbitraryBuilder에서 MatcherOperator을 사용해 변환을 해야 합니다. + 이때 apply api에서 FixtureMonkey 객체를 필요로 하기 때문에 의존 객체를 생성자에 넘겨줘 인스턴스를 생성하는 방식으로 구현 했습니다. + */ + arbitraryManagerFactory = new ArbitraryManagerFactory(arbitraryBuilderCandidateMap, this); } public static FixtureMonkeyBuilder builder() { @@ -111,7 +122,8 @@ public ArbitraryBuilder giveMeBuilder(TypeReference type) { builderContext.copy(), registeredArbitraryBuilders, monkeyContext, - fixtureMonkeyOptions.getInstantiatorProcessor() + fixtureMonkeyOptions.getInstantiatorProcessor(), + arbitraryManagerFactory ); } @@ -138,7 +150,8 @@ public ArbitraryBuilder giveMeBuilder(T value) { context, registeredArbitraryBuilders, monkeyContext, - fixtureMonkeyOptions.getInstantiatorProcessor() + fixtureMonkeyOptions.getInstantiatorProcessor(), + arbitraryManagerFactory ); } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java index 17da398f4..0cc18785e 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java @@ -22,7 +22,9 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.function.UnaryOperator; @@ -59,6 +61,7 @@ import com.navercorp.fixturemonkey.api.validator.ArbitraryValidator; import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderGroup; +import com.navercorp.fixturemonkey.buildergroup.ArbitraryManagerGroup; import com.navercorp.fixturemonkey.customizer.MonkeyManipulatorFactory; import com.navercorp.fixturemonkey.expression.ArbitraryExpressionFactory; import com.navercorp.fixturemonkey.expression.MonkeyExpressionFactory; @@ -76,6 +79,7 @@ public final class FixtureMonkeyBuilder { private ManipulatorOptimizer manipulatorOptimizer = new NoneManipulatorOptimizer(); private MonkeyExpressionFactory monkeyExpressionFactory = new ArbitraryExpressionFactory(); private final MonkeyContextBuilder monkeyContextBuilder = MonkeyContext.builder(); + private final Map> arbitraryBuilderCandidateMap = new HashMap<>(); private long seed = System.nanoTime(); // The default plugins are listed below. @@ -381,6 +385,13 @@ public FixtureMonkeyBuilder registerGroup(ArbitraryBuilderGroup... arbitraryBuil return this; } + public FixtureMonkeyBuilder registerGroup(ArbitraryManagerGroup... arbitraryManagerGroups) { + for (ArbitraryManagerGroup arbitraryManagerGroup : arbitraryManagerGroups) { + this.arbitraryBuilderCandidateMap.putAll(arbitraryManagerGroup.generateCandidateList().getCandidates()); + } + return this; + } + public FixtureMonkeyBuilder plugin(Plugin plugin) { if (plugin instanceof InterfacePlugin) { // TODO: Added for backward compatibility. It will be removed in 1.1.0 this.defaultInterfacePlugin = (InterfacePlugin)plugin; @@ -552,7 +563,8 @@ public FixtureMonkey build() { manipulatorOptimizer, monkeyContext, registeredArbitraryBuilders, - monkeyManipulatorFactory + monkeyManipulatorFactory, + arbitraryBuilderCandidateMap ); } } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java new file mode 100644 index 000000000..046ae9344 --- /dev/null +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java @@ -0,0 +1,46 @@ +/* + * Fixture Monkey + * + * Copyright (c) 2021-present NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.fixturemonkey.customizer; + +import java.util.Collections; +import java.util.Map; + +import com.navercorp.fixturemonkey.FixtureMonkey; +import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; + +public final class ArbitraryManagerFactory { + private final Map> arbitraryBuilderCandidateMap; + private final FixtureMonkey fixtureMonkey; + + public ArbitraryManagerFactory( + final Map> arbitraryBuilderCandidateMap, + final FixtureMonkey fixtureMonkey + ) { + this.arbitraryBuilderCandidateMap = arbitraryBuilderCandidateMap; + this.fixtureMonkey = fixtureMonkey; + } + + public Map> getArbitraryBuilderCandidateMap() { + return Collections.unmodifiableMap(arbitraryBuilderCandidateMap); + } + + public FixtureMonkey getFixtureMonkey() { + return fixtureMonkey; + } +} diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index e3db374b2..751c9a6e6 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -49,6 +49,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import com.navercorp.fixturemonkey.ArbitraryBuilder; +import com.navercorp.fixturemonkey.customizer.ArbitraryManagerFactory; import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary; import com.navercorp.fixturemonkey.api.context.MonkeyContext; import com.navercorp.fixturemonkey.api.experimental.TypedPropertySelector; @@ -65,6 +66,7 @@ import com.navercorp.fixturemonkey.api.type.LazyAnnotatedType; import com.navercorp.fixturemonkey.api.type.TypeReference; import com.navercorp.fixturemonkey.api.type.Types; +import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; import com.navercorp.fixturemonkey.customizer.ArbitraryManipulator; import com.navercorp.fixturemonkey.customizer.ContainerInfoManipulator; import com.navercorp.fixturemonkey.customizer.InnerSpec; @@ -85,6 +87,7 @@ public final class DefaultArbitraryBuilder implements ArbitraryBuilder, Ex private final List>> registeredArbitraryBuilders; private final MonkeyContext monkeyContext; private final InstantiatorProcessor instantiatorProcessor; + private final ArbitraryManagerFactory arbitraryManagerFactory; public DefaultArbitraryBuilder( FixtureMonkeyOptions fixtureMonkeyOptions, @@ -95,7 +98,8 @@ public DefaultArbitraryBuilder( ArbitraryBuilderContext context, List>> registeredArbitraryBuilders, MonkeyContext monkeyContext, - InstantiatorProcessor instantiatorProcessor + InstantiatorProcessor instantiatorProcessor, + ArbitraryManagerFactory arbitraryManagerFactory ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.rootProperty = rootProperty; @@ -106,6 +110,7 @@ public DefaultArbitraryBuilder( this.registeredArbitraryBuilders = registeredArbitraryBuilders; this.monkeyContext = monkeyContext; this.instantiatorProcessor = instantiatorProcessor; + this.arbitraryManagerFactory = arbitraryManagerFactory; } @Override @@ -178,6 +183,8 @@ public ArbitraryBuilder setLazy(PropertySelector propertySelector, Supplier setInner(InnerSpec innerSpec) { ManipulatorSet manipulatorSet = innerSpec.getManipulatorSet(monkeyManipulatorFactory); @@ -510,7 +517,8 @@ public ArbitraryBuilder copy() { context.copy(), registeredArbitraryBuilders, monkeyContext, - instantiatorProcessor + instantiatorProcessor, + arbitraryManagerFactory ); } @@ -560,7 +568,8 @@ private DefaultArbitraryBuilder generateArbitraryBuilderLazily(LazyArbitr context, registeredArbitraryBuilders, monkeyContext, - instantiatorProcessor + instantiatorProcessor, + arbitraryManagerFactory ); } From 802378ae48a99cb9b22e06650f2858a5950c9879 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Wed, 28 Aug 2024 15:49:51 +0900 Subject: [PATCH 04/17] Refactor to accept parameters instead of using an interface --- .../fixturemonkey/FixtureMonkey.java | 30 +++++---- .../fixturemonkey/FixtureMonkeyBuilder.java | 20 ++++-- .../buildergroup/ArbitraryManagerGroup.java | 26 -------- .../customizer/ArbitraryManagerFactory.java | 46 -------------- .../resolver/ArbitraryCandidateManager.java | 61 ------------------- .../resolver/DefaultArbitraryBuilder.java | 13 ++-- 6 files changed, 38 insertions(+), 158 deletions(-) delete mode 100644 fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java delete mode 100644 fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java delete mode 100644 fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index 088727b59..24edf3bab 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -21,6 +21,7 @@ import static java.util.stream.Collectors.toList; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -37,9 +38,7 @@ import com.navercorp.fixturemonkey.api.property.RootProperty; import com.navercorp.fixturemonkey.api.type.LazyAnnotatedType; import com.navercorp.fixturemonkey.api.type.TypeReference; -import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; import com.navercorp.fixturemonkey.customizer.ArbitraryManipulator; -import com.navercorp.fixturemonkey.customizer.ArbitraryManagerFactory; import com.navercorp.fixturemonkey.customizer.MonkeyManipulatorFactory; import com.navercorp.fixturemonkey.experimental.ExperimentalArbitraryBuilder; import com.navercorp.fixturemonkey.resolver.ArbitraryBuilderContext; @@ -56,7 +55,7 @@ public final class FixtureMonkey { private final MonkeyContext monkeyContext; private final List>> registeredArbitraryBuilders = new ArrayList<>(); private final MonkeyManipulatorFactory monkeyManipulatorFactory; - private final ArbitraryManagerFactory arbitraryManagerFactory; + private final Map>> namedArbitraryBuilderMap = new HashMap<>(); public FixtureMonkey( FixtureMonkeyOptions fixtureMonkeyOptions, @@ -65,7 +64,8 @@ public FixtureMonkey( MonkeyContext monkeyContext, List>>> registeredArbitraryBuilders, MonkeyManipulatorFactory monkeyManipulatorFactory, - Map> arbitraryBuilderCandidateMap + Map>>> + matcherOperatorMapsByRegisteredName ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.traverser = traverser; @@ -73,12 +73,7 @@ public FixtureMonkey( this.monkeyContext = monkeyContext; this.monkeyManipulatorFactory = monkeyManipulatorFactory; initializeRegisteredArbitraryBuilders(registeredArbitraryBuilders); - /* - ArbitraryBuilder에서 arbitaryBuilderName을 통해 선택을 한 후, 선택된 ArbitraryBuilder를 적용시킬 계획입니다. - 위와 같이 구현을 하기 위해선, DefaultArbitraryBuilder에서 MatcherOperator을 사용해 변환을 해야 합니다. - 이때 apply api에서 FixtureMonkey 객체를 필요로 하기 때문에 의존 객체를 생성자에 넘겨줘 인스턴스를 생성하는 방식으로 구현 했습니다. - */ - arbitraryManagerFactory = new ArbitraryManagerFactory(arbitraryBuilderCandidateMap, this); + initializeNamedArbitraryBuilderMap(matcherOperatorMapsByRegisteredName); } public static FixtureMonkeyBuilder builder() { @@ -123,7 +118,7 @@ public ArbitraryBuilder giveMeBuilder(TypeReference type) { registeredArbitraryBuilders, monkeyContext, fixtureMonkeyOptions.getInstantiatorProcessor(), - arbitraryManagerFactory + namedArbitraryBuilderMap ); } @@ -151,7 +146,7 @@ public ArbitraryBuilder giveMeBuilder(T value) { registeredArbitraryBuilders, monkeyContext, fixtureMonkeyOptions.getInstantiatorProcessor(), - arbitraryManagerFactory + namedArbitraryBuilderMap ); } @@ -207,4 +202,15 @@ private void initializeRegisteredArbitraryBuilders( this.registeredArbitraryBuilders.add(generatedRegisteredArbitraryBuilder.get(i)); } } + + private void initializeNamedArbitraryBuilderMap( + Map>>> + matcherOperatorMapsByRegisteredName + ) { + matcherOperatorMapsByRegisteredName.forEach((name, matcherOperator) -> { + MatcherOperator> newMatcherOperator = + new MatcherOperator<>(matcherOperator.getMatcher(), matcherOperator.getOperator().apply(this)); + namedArbitraryBuilderMap.put(name, newMatcherOperator); + }); + } } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java index 0cc18785e..d7459c29d 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java @@ -61,7 +61,6 @@ import com.navercorp.fixturemonkey.api.validator.ArbitraryValidator; import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderGroup; -import com.navercorp.fixturemonkey.buildergroup.ArbitraryManagerGroup; import com.navercorp.fixturemonkey.customizer.MonkeyManipulatorFactory; import com.navercorp.fixturemonkey.expression.ArbitraryExpressionFactory; import com.navercorp.fixturemonkey.expression.MonkeyExpressionFactory; @@ -79,7 +78,8 @@ public final class FixtureMonkeyBuilder { private ManipulatorOptimizer manipulatorOptimizer = new NoneManipulatorOptimizer(); private MonkeyExpressionFactory monkeyExpressionFactory = new ArbitraryExpressionFactory(); private final MonkeyContextBuilder monkeyContextBuilder = MonkeyContext.builder(); - private final Map> arbitraryBuilderCandidateMap = new HashMap<>(); + private final Map>>> + matcherOperatorMap = new HashMap<>(); private long seed = System.nanoTime(); // The default plugins are listed below. @@ -385,10 +385,18 @@ public FixtureMonkeyBuilder registerGroup(ArbitraryBuilderGroup... arbitraryBuil return this; } - public FixtureMonkeyBuilder registerGroup(ArbitraryManagerGroup... arbitraryManagerGroups) { - for (ArbitraryManagerGroup arbitraryManagerGroup : arbitraryManagerGroups) { - this.arbitraryBuilderCandidateMap.putAll(arbitraryManagerGroup.generateCandidateList().getCandidates()); + public FixtureMonkeyBuilder registerArbitraryByName( + String arbitraryName, + Class type, + Function> arbitraryBuilder + ) { + if (matcherOperatorMap.containsKey(arbitraryName)) { + throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + arbitraryName); } + MatcherOperator>> matcherOperator = + MatcherOperator.assignableTypeMatchOperator(type, arbitraryBuilder); + + this.matcherOperatorMap.put(arbitraryName, matcherOperator); return this; } @@ -564,7 +572,7 @@ public FixtureMonkey build() { monkeyContext, registeredArbitraryBuilders, monkeyManipulatorFactory, - arbitraryBuilderCandidateMap + matcherOperatorMap ); } } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java deleted file mode 100644 index 477f25c37..000000000 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/buildergroup/ArbitraryManagerGroup.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Fixture Monkey - * - * Copyright (c) 2021-present NAVER Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.navercorp.fixturemonkey.buildergroup; - -import com.navercorp.fixturemonkey.resolver.ArbitraryCandidateManager; - -public interface ArbitraryManagerGroup { - - ArbitraryCandidateManager generateCandidateList(); -} diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java deleted file mode 100644 index 046ae9344..000000000 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/ArbitraryManagerFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Fixture Monkey - * - * Copyright (c) 2021-present NAVER Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.navercorp.fixturemonkey.customizer; - -import java.util.Collections; -import java.util.Map; - -import com.navercorp.fixturemonkey.FixtureMonkey; -import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; - -public final class ArbitraryManagerFactory { - private final Map> arbitraryBuilderCandidateMap; - private final FixtureMonkey fixtureMonkey; - - public ArbitraryManagerFactory( - final Map> arbitraryBuilderCandidateMap, - final FixtureMonkey fixtureMonkey - ) { - this.arbitraryBuilderCandidateMap = arbitraryBuilderCandidateMap; - this.fixtureMonkey = fixtureMonkey; - } - - public Map> getArbitraryBuilderCandidateMap() { - return Collections.unmodifiableMap(arbitraryBuilderCandidateMap); - } - - public FixtureMonkey getFixtureMonkey() { - return fixtureMonkey; - } -} diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java deleted file mode 100644 index 70a904437..000000000 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryCandidateManager.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Fixture Monkey - * - * Copyright (c) 2021-present NAVER Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.navercorp.fixturemonkey.resolver; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; - -public final class ArbitraryCandidateManager { - - private final Map> candidateMap = new HashMap<>(); - - private ArbitraryCandidateManager() { - } - - public static ArbitraryCandidateManager create() { - return new ArbitraryCandidateManager(); - } - - public ArbitraryCandidateManager add(String arbitraryBuilderName, ArbitraryBuilderCandidate candidate) { - checkNull(arbitraryBuilderName); - checkDuplicate(arbitraryBuilderName); - candidateMap.put(arbitraryBuilderName, candidate); - - return this; - } - - private void checkNull(String arbitraryBuilderName) { - if (arbitraryBuilderName == null) { - throw new IllegalArgumentException("ArbitraryBuilder name must not be null"); - } - } - - private void checkDuplicate(String arbitraryBuilderName) { - if (candidateMap.containsKey(arbitraryBuilderName)) { - throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + arbitraryBuilderName); - } - } - - public Map> getCandidates() { - return Collections.unmodifiableMap(candidateMap); - } -} diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 751c9a6e6..e4cd491f5 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -28,6 +28,7 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -49,7 +50,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import com.navercorp.fixturemonkey.ArbitraryBuilder; -import com.navercorp.fixturemonkey.customizer.ArbitraryManagerFactory; import com.navercorp.fixturemonkey.api.arbitrary.CombinableArbitrary; import com.navercorp.fixturemonkey.api.context.MonkeyContext; import com.navercorp.fixturemonkey.api.experimental.TypedPropertySelector; @@ -66,7 +66,6 @@ import com.navercorp.fixturemonkey.api.type.LazyAnnotatedType; import com.navercorp.fixturemonkey.api.type.TypeReference; import com.navercorp.fixturemonkey.api.type.Types; -import com.navercorp.fixturemonkey.buildergroup.ArbitraryBuilderCandidate; import com.navercorp.fixturemonkey.customizer.ArbitraryManipulator; import com.navercorp.fixturemonkey.customizer.ContainerInfoManipulator; import com.navercorp.fixturemonkey.customizer.InnerSpec; @@ -87,7 +86,7 @@ public final class DefaultArbitraryBuilder implements ArbitraryBuilder, Ex private final List>> registeredArbitraryBuilders; private final MonkeyContext monkeyContext; private final InstantiatorProcessor instantiatorProcessor; - private final ArbitraryManagerFactory arbitraryManagerFactory; + private final Map>> namedArbitraryBuilderMap; public DefaultArbitraryBuilder( FixtureMonkeyOptions fixtureMonkeyOptions, @@ -99,7 +98,7 @@ public DefaultArbitraryBuilder( List>> registeredArbitraryBuilders, MonkeyContext monkeyContext, InstantiatorProcessor instantiatorProcessor, - ArbitraryManagerFactory arbitraryManagerFactory + Map>> ArbitraryBuilderMapsByRegisteredName ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.rootProperty = rootProperty; @@ -110,7 +109,7 @@ public DefaultArbitraryBuilder( this.registeredArbitraryBuilders = registeredArbitraryBuilders; this.monkeyContext = monkeyContext; this.instantiatorProcessor = instantiatorProcessor; - this.arbitraryManagerFactory = arbitraryManagerFactory; + this.namedArbitraryBuilderMap = ArbitraryBuilderMapsByRegisteredName; } @Override @@ -518,7 +517,7 @@ public ArbitraryBuilder copy() { registeredArbitraryBuilders, monkeyContext, instantiatorProcessor, - arbitraryManagerFactory + namedArbitraryBuilderMap ); } @@ -569,7 +568,7 @@ private DefaultArbitraryBuilder generateArbitraryBuilderLazily(LazyArbitr registeredArbitraryBuilders, monkeyContext, instantiatorProcessor, - arbitraryManagerFactory + namedArbitraryBuilderMap ); } From e98200a2305f1ec55532838b8b93523769eed5a1 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Wed, 28 Aug 2024 15:52:52 +0900 Subject: [PATCH 05/17] Add test cases for registerArbitraryByName --- .../test/FixtureMonkeyOptionsTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java index ab302fbab..989b88e81 100644 --- a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java +++ b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java @@ -25,6 +25,7 @@ import static org.assertj.core.api.BDDAssertions.thenThrownBy; import java.lang.reflect.AnnotatedType; +import java.lang.reflect.Field; import java.sql.Timestamp; import java.time.Instant; import java.util.ArrayList; @@ -800,6 +801,54 @@ void registerBuilderGroup() { then(actual3).isEqualTo(ChildBuilderGroup.FIXED_INT_VALUE); } + @Property + void registerArbitraryByName() throws NoSuchFieldException, IllegalAccessException { + FixtureMonkey sut = FixtureMonkey.builder() + .registerArbitraryByName( + "test", + String.class, + monkey -> monkey.giveMeBuilder("test") + ) + .registerArbitraryByName( + "test2", + String.class, + monkey -> monkey.giveMeBuilder("test2") + ) + .registerArbitraryByName( + "test3", + String.class, + monkey -> monkey.giveMeBuilder("test3") + ) + .build(); + + Field matcherOperatorMapField = sut.getClass().getDeclaredField("namedArbitraryBuilderMap"); + matcherOperatorMapField.setAccessible(true); + Map> matcherOperatorMap = + (Map>)matcherOperatorMapField.get(sut); + + then(matcherOperatorMap) + .hasSize(3) + .containsKeys("test", "test2", "test3"); + } + + @Property + void registerArbitraryByNameWithSameNameThrows() { + thenThrownBy(() -> FixtureMonkey.builder() + .registerArbitraryByName( + "test", + String.class, + monkey -> monkey.giveMeBuilder("test") + ) + .registerArbitraryByName( + "test", + String.class, + monkey -> monkey.giveMeBuilder("test2") + ) + .build() + ).isExactlyInstanceOf(IllegalArgumentException.class) + .hasMessage("Duplicated ArbitraryBuilder name: test"); + } + @Property void registerSameInstancesTwiceWorksLast() { FixtureMonkey sut = FixtureMonkey.builder() From 65baf7d0ae06044400fcb818f97ea54e27d0aba8 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Wed, 28 Aug 2024 17:31:19 +0900 Subject: [PATCH 06/17] Rename method and variable --- .../com/navercorp/fixturemonkey/FixtureMonkey.java | 3 ++- .../navercorp/fixturemonkey/FixtureMonkeyBuilder.java | 10 +++++----- .../resolver/DefaultArbitraryBuilder.java | 4 ++-- .../fixturemonkey/test/FixtureMonkeyOptionsTest.java | 10 +++++----- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index 24edf3bab..f50d8880c 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -55,7 +55,8 @@ public final class FixtureMonkey { private final MonkeyContext monkeyContext; private final List>> registeredArbitraryBuilders = new ArrayList<>(); private final MonkeyManipulatorFactory monkeyManipulatorFactory; - private final Map>> namedArbitraryBuilderMap = new HashMap<>(); + private final Map>> + namedArbitraryBuilderMap = new HashMap<>(); public FixtureMonkey( FixtureMonkeyOptions fixtureMonkeyOptions, diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java index d7459c29d..f713b7097 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java @@ -79,7 +79,7 @@ public final class FixtureMonkeyBuilder { private MonkeyExpressionFactory monkeyExpressionFactory = new ArbitraryExpressionFactory(); private final MonkeyContextBuilder monkeyContextBuilder = MonkeyContext.builder(); private final Map>>> - matcherOperatorMap = new HashMap<>(); + registeredArbitraryListByRegisteredName = new HashMap<>(); private long seed = System.nanoTime(); // The default plugins are listed below. @@ -385,18 +385,18 @@ public FixtureMonkeyBuilder registerGroup(ArbitraryBuilderGroup... arbitraryBuil return this; } - public FixtureMonkeyBuilder registerArbitraryByName( + public FixtureMonkeyBuilder registeredName( String arbitraryName, Class type, Function> arbitraryBuilder ) { - if (matcherOperatorMap.containsKey(arbitraryName)) { + if (registeredArbitraryListByRegisteredName.containsKey(arbitraryName)) { throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + arbitraryName); } MatcherOperator>> matcherOperator = MatcherOperator.assignableTypeMatchOperator(type, arbitraryBuilder); - this.matcherOperatorMap.put(arbitraryName, matcherOperator); + this.registeredArbitraryListByRegisteredName.put(arbitraryName, matcherOperator); return this; } @@ -572,7 +572,7 @@ public FixtureMonkey build() { monkeyContext, registeredArbitraryBuilders, monkeyManipulatorFactory, - matcherOperatorMap + registeredArbitraryListByRegisteredName ); } } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index e4cd491f5..8223b118e 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -98,7 +98,7 @@ public DefaultArbitraryBuilder( List>> registeredArbitraryBuilders, MonkeyContext monkeyContext, InstantiatorProcessor instantiatorProcessor, - Map>> ArbitraryBuilderMapsByRegisteredName + Map>> arbitraryBuilderMapsByRegisteredName ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.rootProperty = rootProperty; @@ -109,7 +109,7 @@ public DefaultArbitraryBuilder( this.registeredArbitraryBuilders = registeredArbitraryBuilders; this.monkeyContext = monkeyContext; this.instantiatorProcessor = instantiatorProcessor; - this.namedArbitraryBuilderMap = ArbitraryBuilderMapsByRegisteredName; + this.namedArbitraryBuilderMap = arbitraryBuilderMapsByRegisteredName; } @Override diff --git a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java index 989b88e81..625638fbb 100644 --- a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java +++ b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java @@ -804,17 +804,17 @@ void registerBuilderGroup() { @Property void registerArbitraryByName() throws NoSuchFieldException, IllegalAccessException { FixtureMonkey sut = FixtureMonkey.builder() - .registerArbitraryByName( + .registeredName( "test", String.class, monkey -> monkey.giveMeBuilder("test") ) - .registerArbitraryByName( + .registeredName( "test2", String.class, monkey -> monkey.giveMeBuilder("test2") ) - .registerArbitraryByName( + .registeredName( "test3", String.class, monkey -> monkey.giveMeBuilder("test3") @@ -834,12 +834,12 @@ void registerArbitraryByName() throws NoSuchFieldException, IllegalAccessExcepti @Property void registerArbitraryByNameWithSameNameThrows() { thenThrownBy(() -> FixtureMonkey.builder() - .registerArbitraryByName( + .registeredName( "test", String.class, monkey -> monkey.giveMeBuilder("test") ) - .registerArbitraryByName( + .registeredName( "test", String.class, monkey -> monkey.giveMeBuilder("test2") From 6fb23b622133e491b58f96ba1fc5ba26c9f118c9 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Fri, 30 Aug 2024 22:43:17 +0900 Subject: [PATCH 07/17] Add selectName method --- .../fixturemonkey/ArbitraryBuilder.java | 8 ++ .../resolver/ArbitraryResolver.java | 12 ++- .../resolver/DefaultArbitraryBuilder.java | 21 +++++- .../test/FixtureMonkeyOptionsTest.java | 73 +++++++++++++++---- 4 files changed, 93 insertions(+), 21 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/ArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/ArbitraryBuilder.java index 595ec3804..32991b34e 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/ArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/ArbitraryBuilder.java @@ -112,6 +112,14 @@ public interface ArbitraryBuilder { */ ArbitraryBuilder set(@Nullable Object value); + /** + * Set the {@link ArbitraryBuilder} sampling given {@code names}. + * + * @param names An array of names to select and register their corresponding ArbitraryBuilders. + * @return an {@link ArbitraryBuilder} with the selected properties. + */ + ArbitraryBuilder selectName(String... names); + /** * Apply one or more manipulations defined in {@link InnerSpec}. * diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java index 8f3ab54fc..3ad5912b0 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java @@ -18,6 +18,7 @@ package com.navercorp.fixturemonkey.resolver; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -48,6 +49,7 @@ public final class ArbitraryResolver { private final FixtureMonkeyOptions fixtureMonkeyOptions; private final MonkeyContext monkeyContext; private final List>> registeredArbitraryBuilders; + private List>> registeredArbitraryBuildersCopy; public ArbitraryResolver( ArbitraryTraverser traverser, @@ -67,14 +69,18 @@ public ArbitraryResolver( public CombinableArbitrary resolve( RootProperty rootProperty, - ArbitraryBuilderContext builderContext + ArbitraryBuilderContext builderContext, + List>> selectedArbitraryBuilders ) { + registeredArbitraryBuildersCopy = new ArrayList<>(registeredArbitraryBuilders); + registeredArbitraryBuilders.removeAll(selectedArbitraryBuilders); + List manipulators = builderContext.getManipulators(); List containerInfoManipulators = builderContext.getContainerInfoManipulators(); Map, List> propertyConfigurers = builderContext.getPropertyConfigurers(); List>> registeredContainerInfoManipulators = - registeredArbitraryBuilders.stream() + registeredArbitraryBuildersCopy.stream() .map(it -> new MatcherOperator<>( it.getMatcher(), ((DefaultArbitraryBuilder)it.getOperator()).getContext().getContainerInfoManipulators() @@ -102,7 +108,7 @@ public CombinableArbitrary resolve( objectTree -> { List registeredManipulators = monkeyManipulatorFactory.newRegisteredArbitraryManipulators( - registeredArbitraryBuilders, + registeredArbitraryBuildersCopy, objectTree.getMetadata().getNodesByProperty() ); diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 8223b118e..9aecd68e2 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -87,6 +87,7 @@ public final class DefaultArbitraryBuilder implements ArbitraryBuilder, Ex private final MonkeyContext monkeyContext; private final InstantiatorProcessor instantiatorProcessor; private final Map>> namedArbitraryBuilderMap; + private final List>> selectedArbitraryBuilders = new ArrayList<>(); public DefaultArbitraryBuilder( FixtureMonkeyOptions fixtureMonkeyOptions, @@ -182,7 +183,19 @@ public ArbitraryBuilder setLazy(PropertySelector propertySelector, Supplier selectName(String... names) { + for (String name : names) { + MatcherOperator> namedArbitraryBuilder = namedArbitraryBuilderMap.get(name); + + if (namedArbitraryBuilder == null) { + throw new IllegalArgumentException("Given name is not registered. name: " + name); + } + selectedArbitraryBuilders.add(namedArbitraryBuilder); + } + registeredArbitraryBuilders.addAll(selectedArbitraryBuilders); + return this; + } @Override public ArbitraryBuilder setInner(InnerSpec innerSpec) { @@ -530,7 +543,8 @@ private CombinableArbitrary resolveArbitrary(ArbitraryBuilderContext context) if (context.getFixedCombinableArbitrary() == null || context.fixedExpired()) { Object fixed = resolver.resolve( rootProperty, - context + context, + selectedArbitraryBuilders ) .combined(); context.addManipulator(monkeyManipulatorFactory.newArbitraryManipulator("$", fixed)); @@ -541,7 +555,8 @@ private CombinableArbitrary resolveArbitrary(ArbitraryBuilderContext context) return resolver.resolve( rootProperty, - context + context, + selectedArbitraryBuilders ); } diff --git a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java index 625638fbb..29f286419 100644 --- a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java +++ b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java @@ -25,7 +25,6 @@ import static org.assertj.core.api.BDDAssertions.thenThrownBy; import java.lang.reflect.AnnotatedType; -import java.lang.reflect.Field; import java.sql.Timestamp; import java.time.Instant; import java.util.ArrayList; @@ -802,8 +801,9 @@ void registerBuilderGroup() { } @Property - void registerArbitraryByName() throws NoSuchFieldException, IllegalAccessException { + void registeredName() { FixtureMonkey sut = FixtureMonkey.builder() + .register(Integer.class, monkey -> monkey.giveMeBuilder(1)) .registeredName( "test", String.class, @@ -814,25 +814,18 @@ void registerArbitraryByName() throws NoSuchFieldException, IllegalAccessExcepti String.class, monkey -> monkey.giveMeBuilder("test2") ) - .registeredName( - "test3", - String.class, - monkey -> monkey.giveMeBuilder("test3") - ) .build(); - Field matcherOperatorMapField = sut.getClass().getDeclaredField("namedArbitraryBuilderMap"); - matcherOperatorMapField.setAccessible(true); - Map> matcherOperatorMap = - (Map>)matcherOperatorMapField.get(sut); + SimpleObject actual = sut.giveMeBuilder(SimpleObject.class) + .selectName("test") + .sample(); - then(matcherOperatorMap) - .hasSize(3) - .containsKeys("test", "test2", "test3"); + then(actual.getStr()).isEqualTo("test"); + then(actual.getWrapperInteger()).isEqualTo(Integer.valueOf(1)); } @Property - void registerArbitraryByNameWithSameNameThrows() { + void registeredNameWithSameNameThrows() { thenThrownBy(() -> FixtureMonkey.builder() .registeredName( "test", @@ -849,6 +842,56 @@ void registerArbitraryByNameWithSameNameThrows() { .hasMessage("Duplicated ArbitraryBuilder name: test"); } + @Property + void registeredNameWithUnregisteredName() { + FixtureMonkey sut = FixtureMonkey.builder() + .registeredName( + "test", + String.class, + monkey -> monkey.giveMeBuilder("test") + ) + .registeredName( + "test2", + String.class, + monkey -> monkey.giveMeBuilder("test2") + ) + .build(); + + thenThrownBy(() -> sut.giveMeBuilder(SimpleObject.class) + .selectName("test3") + .sample() + ).isExactlyInstanceOf(IllegalArgumentException.class) + .hasMessage("Given name is not registered. name: test3"); + } + + @Property + void selectedArbitraryBuilderCannotBeReused() { + FixtureMonkey sut = FixtureMonkey.builder() + .registeredName( + "test", + String.class, + monkey -> monkey.giveMeBuilder("test") + ) + .registeredName( + "test2", + String.class, + monkey -> monkey.giveMeBuilder("test2") + ) + .build(); + + String actual = sut.giveMeBuilder(SimpleObject.class) + .selectName("test") + .sample() + .getStr(); + + String actual2 = sut.giveMeBuilder(SimpleObject.class) + .selectName("test2") + .sample() + .getStr(); + + then(actual2).isEqualTo("test2"); + } + @Property void registerSameInstancesTwiceWorksLast() { FixtureMonkey sut = FixtureMonkey.builder() From 9c4f7f800d32554c328cda33c742f54b692470e6 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Sat, 31 Aug 2024 00:58:51 +0900 Subject: [PATCH 08/17] Update position of selectedArbitraryBuilders addition --- .../navercorp/fixturemonkey/resolver/ArbitraryResolver.java | 6 +++--- .../fixturemonkey/resolver/DefaultArbitraryBuilder.java | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java index 3ad5912b0..8aee3f232 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java @@ -49,7 +49,6 @@ public final class ArbitraryResolver { private final FixtureMonkeyOptions fixtureMonkeyOptions; private final MonkeyContext monkeyContext; private final List>> registeredArbitraryBuilders; - private List>> registeredArbitraryBuildersCopy; public ArbitraryResolver( ArbitraryTraverser traverser, @@ -72,8 +71,9 @@ public CombinableArbitrary resolve( ArbitraryBuilderContext builderContext, List>> selectedArbitraryBuilders ) { - registeredArbitraryBuildersCopy = new ArrayList<>(registeredArbitraryBuilders); - registeredArbitraryBuilders.removeAll(selectedArbitraryBuilders); + List>> registeredArbitraryBuildersCopy = + new ArrayList<>(registeredArbitraryBuilders); + registeredArbitraryBuildersCopy.addAll(selectedArbitraryBuilders); List manipulators = builderContext.getManipulators(); List containerInfoManipulators = builderContext.getContainerInfoManipulators(); diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 9aecd68e2..42ad82c2e 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -193,7 +193,6 @@ public ArbitraryBuilder selectName(String... names) { } selectedArbitraryBuilders.add(namedArbitraryBuilder); } - registeredArbitraryBuilders.addAll(selectedArbitraryBuilders); return this; } From 83db7cd3c69ceddac9ad2862faf05d3373360637 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Sat, 31 Aug 2024 00:59:18 +0900 Subject: [PATCH 09/17] Add generate sampleList test --- .../test/FixtureMonkeyOptionsTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java index 29f286419..0a44801c2 100644 --- a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java +++ b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java @@ -892,6 +892,29 @@ void selectedArbitraryBuilderCannotBeReused() { then(actual2).isEqualTo("test2"); } + @Property + void generateSampleListWithRegisteredNames() { + FixtureMonkey sut = FixtureMonkey.builder() + .registeredName( + "test", + String.class, + monkey -> monkey.giveMeBuilder("test") + ) + .registeredName( + "test2", + String.class, + monkey -> monkey.giveMeBuilder("test2") + ) + .build(); + + List actual = sut.giveMeBuilder(SimpleObject.class) + .selectName("test") + .sampleList(3); + + then(actual).hasSize(3); + then(actual).allMatch(it -> it.getStr().equals("test")); + } + @Property void registerSameInstancesTwiceWorksLast() { FixtureMonkey sut = FixtureMonkey.builder() From 685aa58e20cd6c120e585b3fba4a73ddcf60c61a Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Sat, 31 Aug 2024 18:13:56 +0900 Subject: [PATCH 10/17] Add selectedArbitraryBuilders list to ArbitraryBuilderContext --- .../resolver/ArbitraryBuilderContext.java | 24 ++++++++++++++++--- .../resolver/ArbitraryResolver.java | 5 ++-- .../resolver/DefaultArbitraryBuilder.java | 7 +++--- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java index 2b9dba45e..f0e67c015 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java @@ -32,8 +32,10 @@ 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.introspector.ArbitraryIntrospector; +import com.navercorp.fixturemonkey.api.matcher.MatcherOperator; import com.navercorp.fixturemonkey.api.property.Property; import com.navercorp.fixturemonkey.customizer.ArbitraryManipulator; import com.navercorp.fixturemonkey.customizer.ContainerInfoManipulator; @@ -51,6 +53,8 @@ public final class ArbitraryBuilderContext { private FixedState fixedState = null; @Nullable private CombinableArbitrary fixedCombinableArbitrary; + @Nullable + private List>> selectedArbitraryBuilders; public ArbitraryBuilderContext( List manipulators, @@ -59,7 +63,8 @@ public ArbitraryBuilderContext( Map, ArbitraryIntrospector> arbitraryIntrospectorsByType, boolean validOnly, @Nullable FixedState fixedState, - @Nullable CombinableArbitrary fixedCombinableArbitrary + @Nullable CombinableArbitrary fixedCombinableArbitrary, + @Nullable List>> selectedArbitraryBuilders ) { this.manipulators = manipulators; this.containerInfoManipulators = containerInfoManipulators; @@ -68,10 +73,11 @@ public ArbitraryBuilderContext( this.validOnly = validOnly; this.fixedState = fixedState; this.fixedCombinableArbitrary = fixedCombinableArbitrary; + this.selectedArbitraryBuilders = selectedArbitraryBuilders; } public ArbitraryBuilderContext() { - this(new ArrayList<>(), new ArrayList<>(), new HashMap<>(), new HashMap<>(), true, null, null); + this(new ArrayList<>(), new ArrayList<>(), new HashMap<>(), new HashMap<>(), true, null, null, null); } public ArbitraryBuilderContext copy() { @@ -86,7 +92,8 @@ public ArbitraryBuilderContext copy() { new HashMap<>(arbitraryIntrospectorsByType), this.validOnly, fixedState, - fixedCombinableArbitrary + fixedCombinableArbitrary, + selectedArbitraryBuilders ); } @@ -122,6 +129,17 @@ public void putArbitraryIntrospector(Class type, ArbitraryIntrospector arbitr this.arbitraryIntrospectorsByType.put(type, arbitraryIntrospector); } + public void addSelectedArbitraryBuilders(List>> selectedArbitraryBuilders) { + if (this.selectedArbitraryBuilders == null) { + this.selectedArbitraryBuilders = new ArrayList<>(); + } + this.selectedArbitraryBuilders.addAll(selectedArbitraryBuilders); + } + + public List>> getSelectedArbitraryBuilders() { + return selectedArbitraryBuilders == null ? Collections.emptyList() : selectedArbitraryBuilders; + } + public Map, ArbitraryIntrospector> getArbitraryIntrospectorsByType() { return arbitraryIntrospectorsByType; } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java index 8aee3f232..c4b932ee1 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java @@ -68,12 +68,11 @@ public ArbitraryResolver( public CombinableArbitrary resolve( RootProperty rootProperty, - ArbitraryBuilderContext builderContext, - List>> selectedArbitraryBuilders + ArbitraryBuilderContext builderContext ) { List>> registeredArbitraryBuildersCopy = new ArrayList<>(registeredArbitraryBuilders); - registeredArbitraryBuildersCopy.addAll(selectedArbitraryBuilders); + registeredArbitraryBuildersCopy.addAll(builderContext.getSelectedArbitraryBuilders()); List manipulators = builderContext.getManipulators(); List containerInfoManipulators = builderContext.getContainerInfoManipulators(); diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 42ad82c2e..948e307d8 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -193,6 +193,7 @@ public ArbitraryBuilder selectName(String... names) { } selectedArbitraryBuilders.add(namedArbitraryBuilder); } + context.addSelectedArbitraryBuilders(selectedArbitraryBuilders); return this; } @@ -542,8 +543,7 @@ private CombinableArbitrary resolveArbitrary(ArbitraryBuilderContext context) if (context.getFixedCombinableArbitrary() == null || context.fixedExpired()) { Object fixed = resolver.resolve( rootProperty, - context, - selectedArbitraryBuilders + context ) .combined(); context.addManipulator(monkeyManipulatorFactory.newArbitraryManipulator("$", fixed)); @@ -554,8 +554,7 @@ private CombinableArbitrary resolveArbitrary(ArbitraryBuilderContext context) return resolver.resolve( rootProperty, - context, - selectedArbitraryBuilders + context ); } From 2b63c65236118825cdcc399ec0acdb1b27515760 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Mon, 2 Sep 2024 15:59:35 +0900 Subject: [PATCH 11/17] Rename matcherOperatorMapsByRegisteredName to mapsByRegisteredName --- .../com/navercorp/fixturemonkey/FixtureMonkey.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index f50d8880c..2a7037826 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -65,8 +65,7 @@ public FixtureMonkey( MonkeyContext monkeyContext, List>>> registeredArbitraryBuilders, MonkeyManipulatorFactory monkeyManipulatorFactory, - Map>>> - matcherOperatorMapsByRegisteredName + Map>>> mapsByRegisteredName ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.traverser = traverser; @@ -74,7 +73,7 @@ public FixtureMonkey( this.monkeyContext = monkeyContext; this.monkeyManipulatorFactory = monkeyManipulatorFactory; initializeRegisteredArbitraryBuilders(registeredArbitraryBuilders); - initializeNamedArbitraryBuilderMap(matcherOperatorMapsByRegisteredName); + initializeNamedArbitraryBuilderMap(mapsByRegisteredName); } public static FixtureMonkeyBuilder builder() { @@ -205,10 +204,8 @@ private void initializeRegisteredArbitraryBuilders( } private void initializeNamedArbitraryBuilderMap( - Map>>> - matcherOperatorMapsByRegisteredName - ) { - matcherOperatorMapsByRegisteredName.forEach((name, matcherOperator) -> { + Map>>> mapsByRegisteredName) { + mapsByRegisteredName.forEach((name, matcherOperator) -> { MatcherOperator> newMatcherOperator = new MatcherOperator<>(matcherOperator.getMatcher(), matcherOperator.getOperator().apply(this)); namedArbitraryBuilderMap.put(name, newMatcherOperator); From 01936174181969a05503e73b6c763f5d1edde492 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Tue, 3 Sep 2024 20:07:19 +0900 Subject: [PATCH 12/17] Declared selectedArbitraryBuilders as final --- .../resolver/ArbitraryBuilderContext.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java index f0e67c015..92edec077 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java @@ -46,6 +46,7 @@ public final class ArbitraryBuilderContext { private final List containerInfoManipulators; private final Map, List> propertyConfigurers; private final Map, ArbitraryIntrospector> arbitraryIntrospectorsByType; + private final List>> selectedArbitraryBuilders; private boolean validOnly; @@ -53,8 +54,6 @@ public final class ArbitraryBuilderContext { private FixedState fixedState = null; @Nullable private CombinableArbitrary fixedCombinableArbitrary; - @Nullable - private List>> selectedArbitraryBuilders; public ArbitraryBuilderContext( List manipulators, @@ -64,7 +63,7 @@ public ArbitraryBuilderContext( boolean validOnly, @Nullable FixedState fixedState, @Nullable CombinableArbitrary fixedCombinableArbitrary, - @Nullable List>> selectedArbitraryBuilders + List>> selectedArbitraryBuilders ) { this.manipulators = manipulators; this.containerInfoManipulators = containerInfoManipulators; @@ -77,7 +76,9 @@ public ArbitraryBuilderContext( } public ArbitraryBuilderContext() { - this(new ArrayList<>(), new ArrayList<>(), new HashMap<>(), new HashMap<>(), true, null, null, null); + this( + new ArrayList<>(), new ArrayList<>(), new HashMap<>(), new HashMap<>(), true, null, null, new ArrayList<>() + ); } public ArbitraryBuilderContext copy() { @@ -129,15 +130,12 @@ public void putArbitraryIntrospector(Class type, ArbitraryIntrospector arbitr this.arbitraryIntrospectorsByType.put(type, arbitraryIntrospector); } - public void addSelectedArbitraryBuilders(List>> selectedArbitraryBuilders) { - if (this.selectedArbitraryBuilders == null) { - this.selectedArbitraryBuilders = new ArrayList<>(); - } - this.selectedArbitraryBuilders.addAll(selectedArbitraryBuilders); + public void addSelectedArbitraryBuilders(List>> arbitraryBuilders) { + this.selectedArbitraryBuilders.addAll(arbitraryBuilders); } public List>> getSelectedArbitraryBuilders() { - return selectedArbitraryBuilders == null ? Collections.emptyList() : selectedArbitraryBuilders; + return Collections.unmodifiableList(selectedArbitraryBuilders); } public Map, ArbitraryIntrospector> getArbitraryIntrospectorsByType() { From 3deaa893b0940905ca51593c4e36baf0405939dc Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Fri, 13 Sep 2024 13:03:52 +0900 Subject: [PATCH 13/17] Fix recursive loop issue by adding base case check --- .../java/com/navercorp/fixturemonkey/FixtureMonkey.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index 2a7037826..6566bf6ee 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -208,6 +208,12 @@ private void initializeNamedArbitraryBuilderMap( mapsByRegisteredName.forEach((name, matcherOperator) -> { MatcherOperator> newMatcherOperator = new MatcherOperator<>(matcherOperator.getMatcher(), matcherOperator.getOperator().apply(this)); + + if (matcherOperator.getMatcher().match( + new RootProperty(new LazyAnnotatedType<>(() -> matcherOperator.getOperator().apply(this).sample()))) + ) { + this.registeredArbitraryBuilders.add(newMatcherOperator); + } namedArbitraryBuilderMap.put(name, newMatcherOperator); }); } From 6b1b21a36d7355401e1f890620b08bca96f17213 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Fri, 13 Sep 2024 13:48:47 +0900 Subject: [PATCH 14/17] Refactor Tests --- .../test/FixtureMonkeyOptionsTest.java | 57 ++----------------- 1 file changed, 6 insertions(+), 51 deletions(-) diff --git a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java index 0a44801c2..dec1423a3 100644 --- a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java +++ b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyOptionsTest.java @@ -803,29 +803,27 @@ void registerBuilderGroup() { @Property void registeredName() { FixtureMonkey sut = FixtureMonkey.builder() - .register(Integer.class, monkey -> monkey.giveMeBuilder(1)) .registeredName( "test", String.class, monkey -> monkey.giveMeBuilder("test") ) - .registeredName( - "test2", - String.class, - monkey -> monkey.giveMeBuilder("test2") - ) .build(); SimpleObject actual = sut.giveMeBuilder(SimpleObject.class) .selectName("test") .sample(); + String actual2 = sut.giveMeBuilder(String.class) + .selectName("test") + .sample(); + then(actual.getStr()).isEqualTo("test"); - then(actual.getWrapperInteger()).isEqualTo(Integer.valueOf(1)); + then(actual2).isEqualTo("test"); } @Property - void registeredNameWithSameNameThrows() { + void registeredNameWithSameRegisteredName() { thenThrownBy(() -> FixtureMonkey.builder() .registeredName( "test", @@ -845,16 +843,6 @@ void registeredNameWithSameNameThrows() { @Property void registeredNameWithUnregisteredName() { FixtureMonkey sut = FixtureMonkey.builder() - .registeredName( - "test", - String.class, - monkey -> monkey.giveMeBuilder("test") - ) - .registeredName( - "test2", - String.class, - monkey -> monkey.giveMeBuilder("test2") - ) .build(); thenThrownBy(() -> sut.giveMeBuilder(SimpleObject.class) @@ -864,34 +852,6 @@ void registeredNameWithUnregisteredName() { .hasMessage("Given name is not registered. name: test3"); } - @Property - void selectedArbitraryBuilderCannotBeReused() { - FixtureMonkey sut = FixtureMonkey.builder() - .registeredName( - "test", - String.class, - monkey -> monkey.giveMeBuilder("test") - ) - .registeredName( - "test2", - String.class, - monkey -> monkey.giveMeBuilder("test2") - ) - .build(); - - String actual = sut.giveMeBuilder(SimpleObject.class) - .selectName("test") - .sample() - .getStr(); - - String actual2 = sut.giveMeBuilder(SimpleObject.class) - .selectName("test2") - .sample() - .getStr(); - - then(actual2).isEqualTo("test2"); - } - @Property void generateSampleListWithRegisteredNames() { FixtureMonkey sut = FixtureMonkey.builder() @@ -900,11 +860,6 @@ void generateSampleListWithRegisteredNames() { String.class, monkey -> monkey.giveMeBuilder("test") ) - .registeredName( - "test2", - String.class, - monkey -> monkey.giveMeBuilder("test2") - ) .build(); List actual = sut.giveMeBuilder(SimpleObject.class) From 7a30d04c7cef30a2e572bce0b48404b568fd49e6 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Sun, 29 Sep 2024 18:26:02 +0900 Subject: [PATCH 15/17] Refactor selectName method --- .../fixturemonkey/FixtureMonkey.java | 17 ++++---- .../resolver/ArbitraryBuilderContext.java | 22 ++-------- .../resolver/ArbitraryResolver.java | 9 +---- .../resolver/DefaultArbitraryBuilder.java | 40 ++++++++++++++++++- 4 files changed, 50 insertions(+), 38 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index 6566bf6ee..71145cbfe 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -117,6 +117,7 @@ public ArbitraryBuilder giveMeBuilder(TypeReference type) { builderContext.copy(), registeredArbitraryBuilders, monkeyContext, + manipulatorOptimizer, fixtureMonkeyOptions.getInstantiatorProcessor(), namedArbitraryBuilderMap ); @@ -145,6 +146,7 @@ public ArbitraryBuilder giveMeBuilder(T value) { context, registeredArbitraryBuilders, monkeyContext, + manipulatorOptimizer, fixtureMonkeyOptions.getInstantiatorProcessor(), namedArbitraryBuilderMap ); @@ -204,17 +206,12 @@ private void initializeRegisteredArbitraryBuilders( } private void initializeNamedArbitraryBuilderMap( - Map>>> mapsByRegisteredName) { + Map>>> mapsByRegisteredName + ) { mapsByRegisteredName.forEach((name, matcherOperator) -> { - MatcherOperator> newMatcherOperator = - new MatcherOperator<>(matcherOperator.getMatcher(), matcherOperator.getOperator().apply(this)); - - if (matcherOperator.getMatcher().match( - new RootProperty(new LazyAnnotatedType<>(() -> matcherOperator.getOperator().apply(this).sample()))) - ) { - this.registeredArbitraryBuilders.add(newMatcherOperator); - } - namedArbitraryBuilderMap.put(name, newMatcherOperator); + namedArbitraryBuilderMap.put( + name, new MatcherOperator<>(matcherOperator.getMatcher(), matcherOperator.getOperator().apply(this)) + ); }); } } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java index 92edec077..ddb69ee30 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryBuilderContext.java @@ -32,10 +32,8 @@ 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.introspector.ArbitraryIntrospector; -import com.navercorp.fixturemonkey.api.matcher.MatcherOperator; import com.navercorp.fixturemonkey.api.property.Property; import com.navercorp.fixturemonkey.customizer.ArbitraryManipulator; import com.navercorp.fixturemonkey.customizer.ContainerInfoManipulator; @@ -46,8 +44,6 @@ public final class ArbitraryBuilderContext { private final List containerInfoManipulators; private final Map, List> propertyConfigurers; private final Map, ArbitraryIntrospector> arbitraryIntrospectorsByType; - private final List>> selectedArbitraryBuilders; - private boolean validOnly; @Nullable @@ -62,8 +58,7 @@ public ArbitraryBuilderContext( Map, ArbitraryIntrospector> arbitraryIntrospectorsByType, boolean validOnly, @Nullable FixedState fixedState, - @Nullable CombinableArbitrary fixedCombinableArbitrary, - List>> selectedArbitraryBuilders + @Nullable CombinableArbitrary fixedCombinableArbitrary ) { this.manipulators = manipulators; this.containerInfoManipulators = containerInfoManipulators; @@ -72,13 +67,11 @@ public ArbitraryBuilderContext( this.validOnly = validOnly; this.fixedState = fixedState; this.fixedCombinableArbitrary = fixedCombinableArbitrary; - this.selectedArbitraryBuilders = selectedArbitraryBuilders; } public ArbitraryBuilderContext() { this( - new ArrayList<>(), new ArrayList<>(), new HashMap<>(), new HashMap<>(), true, null, null, new ArrayList<>() - ); + new ArrayList<>(), new ArrayList<>(), new HashMap<>(), new HashMap<>(), true, null, null); } public ArbitraryBuilderContext copy() { @@ -93,8 +86,7 @@ public ArbitraryBuilderContext copy() { new HashMap<>(arbitraryIntrospectorsByType), this.validOnly, fixedState, - fixedCombinableArbitrary, - selectedArbitraryBuilders + fixedCombinableArbitrary ); } @@ -130,14 +122,6 @@ public void putArbitraryIntrospector(Class type, ArbitraryIntrospector arbitr this.arbitraryIntrospectorsByType.put(type, arbitraryIntrospector); } - public void addSelectedArbitraryBuilders(List>> arbitraryBuilders) { - this.selectedArbitraryBuilders.addAll(arbitraryBuilders); - } - - public List>> getSelectedArbitraryBuilders() { - return Collections.unmodifiableList(selectedArbitraryBuilders); - } - public Map, ArbitraryIntrospector> getArbitraryIntrospectorsByType() { return arbitraryIntrospectorsByType; } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java index c4b932ee1..8f3ab54fc 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/ArbitraryResolver.java @@ -18,7 +18,6 @@ package com.navercorp.fixturemonkey.resolver; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -70,16 +69,12 @@ public CombinableArbitrary resolve( RootProperty rootProperty, ArbitraryBuilderContext builderContext ) { - List>> registeredArbitraryBuildersCopy = - new ArrayList<>(registeredArbitraryBuilders); - registeredArbitraryBuildersCopy.addAll(builderContext.getSelectedArbitraryBuilders()); - List manipulators = builderContext.getManipulators(); List containerInfoManipulators = builderContext.getContainerInfoManipulators(); Map, List> propertyConfigurers = builderContext.getPropertyConfigurers(); List>> registeredContainerInfoManipulators = - registeredArbitraryBuildersCopy.stream() + registeredArbitraryBuilders.stream() .map(it -> new MatcherOperator<>( it.getMatcher(), ((DefaultArbitraryBuilder)it.getOperator()).getContext().getContainerInfoManipulators() @@ -107,7 +102,7 @@ public CombinableArbitrary resolve( objectTree -> { List registeredManipulators = monkeyManipulatorFactory.newRegisteredArbitraryManipulators( - registeredArbitraryBuildersCopy, + registeredArbitraryBuilders, objectTree.getMetadata().getNodesByProperty() ); diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 948e307d8..64c9b2cd3 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -84,6 +84,7 @@ public final class DefaultArbitraryBuilder implements ArbitraryBuilder, Ex private final MonkeyManipulatorFactory monkeyManipulatorFactory; private final ArbitraryBuilderContext context; private final List>> registeredArbitraryBuilders; + private final ManipulatorOptimizer manipulatorOptimizer; private final MonkeyContext monkeyContext; private final InstantiatorProcessor instantiatorProcessor; private final Map>> namedArbitraryBuilderMap; @@ -98,6 +99,7 @@ public DefaultArbitraryBuilder( ArbitraryBuilderContext context, List>> registeredArbitraryBuilders, MonkeyContext monkeyContext, + ManipulatorOptimizer manipulatorOptimizer, InstantiatorProcessor instantiatorProcessor, Map>> arbitraryBuilderMapsByRegisteredName ) { @@ -108,6 +110,7 @@ public DefaultArbitraryBuilder( this.context = context; this.monkeyManipulatorFactory = monkeyManipulatorFactory; this.registeredArbitraryBuilders = registeredArbitraryBuilders; + this.manipulatorOptimizer = manipulatorOptimizer; this.monkeyContext = monkeyContext; this.instantiatorProcessor = instantiatorProcessor; this.namedArbitraryBuilderMap = arbitraryBuilderMapsByRegisteredName; @@ -193,8 +196,39 @@ public ArbitraryBuilder selectName(String... names) { } selectedArbitraryBuilders.add(namedArbitraryBuilder); } - context.addSelectedArbitraryBuilders(selectedArbitraryBuilders); - return this; + + ArrayList>> registeredArbitraryBuildersCopy = + new ArrayList<>(this.registeredArbitraryBuilders); + registeredArbitraryBuildersCopy.addAll(selectedArbitraryBuilders); + + ArbitraryBuilderContext builderContext = registeredArbitraryBuildersCopy.stream() + .filter(it -> it.match(rootProperty)) + .map(MatcherOperator::getOperator) + .findAny() + .map(DefaultArbitraryBuilder.class::cast) + .map(DefaultArbitraryBuilder::getContext) + .orElse(new ArbitraryBuilderContext()); + + return new DefaultArbitraryBuilder<>( + this.fixtureMonkeyOptions, + this.rootProperty, + new ArbitraryResolver( + this.traverser, + this.manipulatorOptimizer, + this.monkeyManipulatorFactory, + this.fixtureMonkeyOptions, + this.monkeyContext, + registeredArbitraryBuildersCopy + ), + this.traverser, + this.monkeyManipulatorFactory, + builderContext.copy(), + registeredArbitraryBuildersCopy, + this.monkeyContext, + this.manipulatorOptimizer, + this.fixtureMonkeyOptions.getInstantiatorProcessor(), + this.namedArbitraryBuilderMap + ); } @Override @@ -529,6 +563,7 @@ public ArbitraryBuilder copy() { context.copy(), registeredArbitraryBuilders, monkeyContext, + manipulatorOptimizer, instantiatorProcessor, namedArbitraryBuilderMap ); @@ -580,6 +615,7 @@ private DefaultArbitraryBuilder generateArbitraryBuilderLazily(LazyArbitr context, registeredArbitraryBuilders, monkeyContext, + manipulatorOptimizer, instantiatorProcessor, namedArbitraryBuilderMap ); From c8936d4674d3ed594a1dbb230a657e0e56a6dbaa Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Wed, 2 Oct 2024 17:08:50 +0900 Subject: [PATCH 16/17] Remove unused variable in DefaultArbitraryBuilder --- .../resolver/DefaultArbitraryBuilder.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 64c9b2cd3..0ea6de95a 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -88,7 +88,6 @@ public final class DefaultArbitraryBuilder implements ArbitraryBuilder, Ex private final MonkeyContext monkeyContext; private final InstantiatorProcessor instantiatorProcessor; private final Map>> namedArbitraryBuilderMap; - private final List>> selectedArbitraryBuilders = new ArrayList<>(); public DefaultArbitraryBuilder( FixtureMonkeyOptions fixtureMonkeyOptions, @@ -188,19 +187,18 @@ public ArbitraryBuilder setLazy(PropertySelector propertySelector, Supplier selectName(String... names) { + ArrayList>> registeredArbitraryBuildersCopy = + new ArrayList<>(this.registeredArbitraryBuilders); + for (String name : names) { MatcherOperator> namedArbitraryBuilder = namedArbitraryBuilderMap.get(name); if (namedArbitraryBuilder == null) { throw new IllegalArgumentException("Given name is not registered. name: " + name); } - selectedArbitraryBuilders.add(namedArbitraryBuilder); + registeredArbitraryBuildersCopy.add(namedArbitraryBuilder); } - ArrayList>> registeredArbitraryBuildersCopy = - new ArrayList<>(this.registeredArbitraryBuilders); - registeredArbitraryBuildersCopy.addAll(selectedArbitraryBuilders); - ArbitraryBuilderContext builderContext = registeredArbitraryBuildersCopy.stream() .filter(it -> it.match(rootProperty)) .map(MatcherOperator::getOperator) From 113f4d2d69b190b5e55aa133d8b122e5b51a25a2 Mon Sep 17 00:00:00 2001 From: yongjunhong Date: Fri, 4 Oct 2024 16:14:50 +0900 Subject: [PATCH 17/17] Rename variable for better readability --- .../fixturemonkey/FixtureMonkey.java | 8 ++++---- .../fixturemonkey/FixtureMonkeyBuilder.java | 8 ++++---- .../resolver/DefaultArbitraryBuilder.java | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java index 71145cbfe..0cb031b6d 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java @@ -116,10 +116,10 @@ public ArbitraryBuilder giveMeBuilder(TypeReference type) { monkeyManipulatorFactory, builderContext.copy(), registeredArbitraryBuilders, + namedArbitraryBuilderMap, monkeyContext, manipulatorOptimizer, - fixtureMonkeyOptions.getInstantiatorProcessor(), - namedArbitraryBuilderMap + fixtureMonkeyOptions.getInstantiatorProcessor() ); } @@ -145,10 +145,10 @@ public ArbitraryBuilder giveMeBuilder(T value) { monkeyManipulatorFactory, context, registeredArbitraryBuilders, + namedArbitraryBuilderMap, monkeyContext, manipulatorOptimizer, - fixtureMonkeyOptions.getInstantiatorProcessor(), - namedArbitraryBuilderMap + fixtureMonkeyOptions.getInstantiatorProcessor() ); } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java index f713b7097..8b3db271f 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java @@ -386,17 +386,17 @@ public FixtureMonkeyBuilder registerGroup(ArbitraryBuilderGroup... arbitraryBuil } public FixtureMonkeyBuilder registeredName( - String arbitraryName, + String registeredName, Class type, Function> arbitraryBuilder ) { - if (registeredArbitraryListByRegisteredName.containsKey(arbitraryName)) { - throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + arbitraryName); + if (registeredArbitraryListByRegisteredName.containsKey(registeredName)) { + throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + registeredName); } MatcherOperator>> matcherOperator = MatcherOperator.assignableTypeMatchOperator(type, arbitraryBuilder); - this.registeredArbitraryListByRegisteredName.put(arbitraryName, matcherOperator); + this.registeredArbitraryListByRegisteredName.put(registeredName, matcherOperator); return this; } diff --git a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java index 0ea6de95a..2d1553059 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/resolver/DefaultArbitraryBuilder.java @@ -97,10 +97,10 @@ public DefaultArbitraryBuilder( MonkeyManipulatorFactory monkeyManipulatorFactory, ArbitraryBuilderContext context, List>> registeredArbitraryBuilders, + Map>> registeredArbitraryBuildersByRegsiteredName, MonkeyContext monkeyContext, ManipulatorOptimizer manipulatorOptimizer, - InstantiatorProcessor instantiatorProcessor, - Map>> arbitraryBuilderMapsByRegisteredName + InstantiatorProcessor instantiatorProcessor ) { this.fixtureMonkeyOptions = fixtureMonkeyOptions; this.rootProperty = rootProperty; @@ -109,10 +109,10 @@ public DefaultArbitraryBuilder( this.context = context; this.monkeyManipulatorFactory = monkeyManipulatorFactory; this.registeredArbitraryBuilders = registeredArbitraryBuilders; + this.namedArbitraryBuilderMap = registeredArbitraryBuildersByRegsiteredName; this.manipulatorOptimizer = manipulatorOptimizer; this.monkeyContext = monkeyContext; this.instantiatorProcessor = instantiatorProcessor; - this.namedArbitraryBuilderMap = arbitraryBuilderMapsByRegisteredName; } @Override @@ -187,7 +187,7 @@ public ArbitraryBuilder setLazy(PropertySelector propertySelector, Supplier selectName(String... names) { - ArrayList>> registeredArbitraryBuildersCopy = + List>> registeredArbitraryBuildersCopy = new ArrayList<>(this.registeredArbitraryBuilders); for (String name : names) { @@ -222,10 +222,10 @@ public ArbitraryBuilder selectName(String... names) { this.monkeyManipulatorFactory, builderContext.copy(), registeredArbitraryBuildersCopy, + this.namedArbitraryBuilderMap, this.monkeyContext, this.manipulatorOptimizer, - this.fixtureMonkeyOptions.getInstantiatorProcessor(), - this.namedArbitraryBuilderMap + this.fixtureMonkeyOptions.getInstantiatorProcessor() ); } @@ -560,10 +560,10 @@ public ArbitraryBuilder copy() { monkeyManipulatorFactory, context.copy(), registeredArbitraryBuilders, + namedArbitraryBuilderMap, monkeyContext, manipulatorOptimizer, - instantiatorProcessor, - namedArbitraryBuilderMap + instantiatorProcessor ); } @@ -612,10 +612,10 @@ private DefaultArbitraryBuilder generateArbitraryBuilderLazily(LazyArbitr monkeyManipulatorFactory, context, registeredArbitraryBuilders, + namedArbitraryBuilderMap, monkeyContext, manipulatorOptimizer, - instantiatorProcessor, - namedArbitraryBuilderMap + instantiatorProcessor ); }