From 49fc22aa26647aaafcd1650b9abd446d7bd210c6 Mon Sep 17 00:00:00 2001 From: "ah.jo" Date: Fri, 12 Nov 2021 14:10:21 +0900 Subject: [PATCH] Add setSpec --- .../navercorp/fixturemonkey/ArbitraryBuilder.java | 15 +++++++++++++++ .../fixturemonkey/test/FixtureMonkeyTest.java | 13 +++++++++++++ 2 files changed, 28 insertions(+) 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 8c53bb20a..9632da8d1 100644 --- a/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/ArbitraryBuilder.java +++ b/fixture-monkey/src/main/java/com/navercorp/fixturemonkey/ArbitraryBuilder.java @@ -46,6 +46,7 @@ import com.navercorp.fixturemonkey.arbitrary.AbstractArbitrarySet; import com.navercorp.fixturemonkey.arbitrary.ArbitraryExpression; +import com.navercorp.fixturemonkey.arbitrary.ArbitraryExpressionManipulator; import com.navercorp.fixturemonkey.arbitrary.ArbitraryNode; import com.navercorp.fixturemonkey.arbitrary.ArbitraryNullity; import com.navercorp.fixturemonkey.arbitrary.ArbitrarySet; @@ -237,6 +238,8 @@ public ArbitraryBuilder set(String expression, @Nullable Object value) { return this.set(expression, (Arbitrary)value); } else if (value instanceof ArbitraryBuilder) { return this.setBuilder(expression, (ArbitraryBuilder)value); + } else if (value instanceof ExpressionSpec) { + return this.setSpec(expression, (ExpressionSpec)value); } ArbitraryExpression arbitraryExpression = ArbitraryExpression.from(expression); this.builderManipulators.add(new ArbitrarySet<>(arbitraryExpression, value)); @@ -570,6 +573,18 @@ private List getActiveManipulators() { return activeManipulators; } + private ArbitraryBuilder setSpec(String expression, ExpressionSpec expressionSpec) { + for (BuilderManipulator builderManipulator : expressionSpec.getBuilderManipulators()) { + if (builderManipulator instanceof ArbitraryExpressionManipulator) { + ArbitraryExpressionManipulator arbitraryExpressionManipulator = + (ArbitraryExpressionManipulator)builderManipulator; + arbitraryExpressionManipulator.addPrefix(expression); + } + } + spec(expressionSpec); + return this; + } + private List extractOrderedManipulatorsFrom(List manipulators) { return manipulators.stream() .filter(it -> !(it instanceof MetadataManipulator)) diff --git a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyTest.java b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyTest.java index 5a7a0f236..5ce49854e 100644 --- a/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyTest.java +++ b/fixture-monkey/src/test/java/com/navercorp/fixturemonkey/test/FixtureMonkeyTest.java @@ -45,6 +45,7 @@ import com.navercorp.fixturemonkey.ArbitraryBuilder; import com.navercorp.fixturemonkey.FixtureMonkey; +import com.navercorp.fixturemonkey.customizer.ExpressionSpec; import com.navercorp.fixturemonkey.test.FixtureMonkeyTestSpecs.DefaultArbitraryGroup; import com.navercorp.fixturemonkey.test.FixtureMonkeyTestSpecs.DefaultArbitraryGroup2; import com.navercorp.fixturemonkey.test.FixtureMonkeyTestSpecs.DuplicateArbitraryGroup; @@ -1310,4 +1311,16 @@ void copyValidOnly() { .copy() .sample()); } + + @Property + void setSpec() { + ExpressionSpec expressionSpec = new ExpressionSpec() + .set("value", "test"); + + StringAndInt actual = SUT.giveMeBuilder(StringAndInt.class) + .set("value1", expressionSpec) + .sample(); + + then(actual.getValue1().getValue()).isEqualTo("test"); + } }