Skip to content

Commit 2b33956

Browse files
committed
Made the configuration API truly fluent (inspired by Spring HttpSecurity)
1 parent 4089c9b commit 2b33956

30 files changed

+311
-303
lines changed

src/integration-test/java/de/danielbechler/diff/ObjectDifferIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void testCompareCollectionWithIgnoredCollectionProperty()
8282
final ObjectWithCollection working = new ObjectWithCollection();
8383
working.getCollection().add("foo");
8484
final ObjectDifferBuilder objectDifferBuilder = ObjectDifferBuilder.startBuilding();
85-
objectDifferBuilder.configure().inclusion()
85+
objectDifferBuilder.inclusion()
8686
.exclude()
8787
.node(NodePath.with("collection"));
8888
objectDiffer = objectDifferBuilder.build();
@@ -300,7 +300,7 @@ public void testCompareWithDifferentTypes()
300300
public void testCompareWithIgnoredProperty()
301301
{
302302
final ObjectDifferBuilder objectDifferBuilder = ObjectDifferBuilder.startBuilding();
303-
objectDifferBuilder.configure().inclusion().exclude().node(NodePath.withRoot());
303+
objectDifferBuilder.inclusion().exclude().node(NodePath.withRoot());
304304
objectDiffer = objectDifferBuilder.build();
305305

306306
final DiffNode node = objectDiffer.compare("foo", "bar");

src/integration-test/java/de/danielbechler/diff/example/EqualsOnlyValueProviderMethodExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public static void main(final String[] args)
3737
final ObjectDifferBuilder builder = ObjectDifferBuilder.startBuilding();
3838

3939
// (Option 1) Causes the ObjectDiffer to compare using the method "getProp1" on the 'prop' property of the root object
40-
builder.configure().comparison()
40+
builder.comparison()
4141
.ofNode(NodePath.with("prop"))
4242
.toUseEqualsMethodOfValueProvidedByMethod("getProp1");
4343

src/integration-test/java/de/danielbechler/diff/example/Example1IT.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013 Daniel Bechler
2+
* Copyright 2014 Daniel Bechler
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@ public class Example1IT extends Specification {
2626
def "Comparing Objects via compareTo instead of equals"() {
2727
given: "an object differ configured to compare the given type via compareTo method"
2828
def builder = ObjectDifferBuilder.startBuilding()
29-
builder.configure().comparison().ofType(ComparableObject).toUseCompareToMethod()
29+
builder.comparison().ofType(ComparableObject).toUseCompareToMethod()
3030
def objectDiffer = builder.build()
3131

3232
expect:

src/integration-test/java/de/danielbechler/diff/example/Example2IT.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class Example2IT extends Specification {
5050
def "Comparing an object via equalsOnlyValueProvider (via configuration using property path)"() {
5151
given:
5252
def builder = ObjectDifferBuilder.startBuilding()
53-
builder.configure().comparison().ofNode(NodePath.withRoot()).toUseEqualsMethodOfValueProvidedByMethod("presentationForDiffer")
53+
builder.comparison().ofNode(NodePath.withRoot()).toUseEqualsMethodOfValueProvidedByMethod("presentationForDiffer")
5454
5555
def base = new PersonWithEqualsOnlyTypeAnnotation("Walter", "Walt", "White")
5656
def working = new PersonWithEqualsOnlyTypeAnnotation("Walter", "Heisenberg", "White")
@@ -62,7 +62,7 @@ class Example2IT extends Specification {
6262
def "Comparing an object via equalsOnlyValueProvider (via configuration using type)"() {
6363
given:
6464
def builder = ObjectDifferBuilder.startBuilding()
65-
builder.configure().comparison().ofType(Person).toUseEqualsMethodOfValueProvidedByMethod("presentationForDiffer")
65+
builder.comparison().ofType(Person).toUseEqualsMethodOfValueProvidedByMethod("presentationForDiffer")
6666
def base = new PersonWithEqualsOnlyTypeAnnotation("Walter", "Walt", "White")
6767
def working = new PersonWithEqualsOnlyTypeAnnotation("Walter", "Heisenberg", "White")
6868

src/integration-test/java/de/danielbechler/diff/example/IgnoreExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static void main(final String[] args)
4040
final ObjectDifferBuilder builder = ObjectDifferBuilder.startBuilding();
4141

4242
// (Option 1) Causes the ObjectDiffer to ignore the 'password' property of the root object
43-
builder.configure().inclusion().exclude().node(NodePath.with("password"));
43+
builder.inclusion().exclude().node(NodePath.with("password"));
4444

4545
final DiffNode node = builder.build().compare(working, base);
4646

src/integration-test/java/de/danielbechler/diff/inclusion/InclusionAT.groovy

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class InclusionAT extends Specification {
3434

3535
def 'exclude an element by type'() {
3636
given:
37-
objectDifferBuilder.configure().inclusion().exclude().type(ArrayList)
37+
objectDifferBuilder.inclusion().exclude().type(ArrayList)
3838
when:
3939
def node = objectDifferBuilder.build().compare(working, base)
4040
then:
@@ -44,7 +44,7 @@ class InclusionAT extends Specification {
4444

4545
def 'exclude an element by property name'() {
4646
given:
47-
objectDifferBuilder.configure().inclusion().exclude().propertyName('songs')
47+
objectDifferBuilder.inclusion().exclude().propertyName('songs')
4848
when:
4949
def node = objectDifferBuilder.build().compare(working, base)
5050
then:
@@ -54,7 +54,7 @@ class InclusionAT extends Specification {
5454

5555
def 'exclude an element by node path'() {
5656
given:
57-
objectDifferBuilder.configure().inclusion().exclude().node(NodePath.with('songs'))
57+
objectDifferBuilder.inclusion().exclude().node(NodePath.with('songs'))
5858
when:
5959
def node = objectDifferBuilder.build().compare(working, base)
6060
then:
@@ -64,7 +64,7 @@ class InclusionAT extends Specification {
6464

6565
def 'exclude an element by category'() {
6666
given:
67-
objectDifferBuilder.configure().inclusion().exclude().category('foo')
67+
objectDifferBuilder.inclusion().exclude().category('foo')
6868
when:
6969
def node = objectDifferBuilder.build().compare(working, base)
7070
then:
@@ -74,7 +74,7 @@ class InclusionAT extends Specification {
7474

7575
def 'include an element by type'() {
7676
given:
77-
objectDifferBuilder.configure().inclusion().include().type(ArrayList)
77+
objectDifferBuilder.inclusion().include().type(ArrayList)
7878
when:
7979
def node = objectDifferBuilder.build().compare(working, base)
8080
then:
@@ -84,7 +84,7 @@ class InclusionAT extends Specification {
8484

8585
def 'include an element by property name'() {
8686
given:
87-
objectDifferBuilder.configure().inclusion().include().propertyName('songs')
87+
objectDifferBuilder.inclusion().include().propertyName('songs')
8888
when:
8989
def node = objectDifferBuilder.build().compare(working, base)
9090
then:
@@ -94,7 +94,7 @@ class InclusionAT extends Specification {
9494

9595
def 'include an element by node path'() {
9696
given:
97-
objectDifferBuilder.configure().inclusion().include().node(NodePath.with('songs'))
97+
objectDifferBuilder.inclusion().include().node(NodePath.with('songs'))
9898
when:
9999
def node = objectDifferBuilder.build().compare(working, base)
100100
then:
@@ -104,7 +104,7 @@ class InclusionAT extends Specification {
104104

105105
def 'include an element by category'() {
106106
given:
107-
objectDifferBuilder.configure().inclusion().include().category('foo')
107+
objectDifferBuilder.inclusion().include().category('foo')
108108
when:
109109
def node = objectDifferBuilder.build().compare(working, base)
110110
then:
@@ -114,7 +114,7 @@ class InclusionAT extends Specification {
114114

115115
def 'excludes always win over includes'() {
116116
given:
117-
objectDifferBuilder.configure().inclusion()
117+
objectDifferBuilder.inclusion()
118118
.exclude().node(NodePath.with('songs'))
119119
.include().node(NodePath.startBuildingFrom(NodePath.with('songs')).collectionItem('Happy').build())
120120
when:
@@ -125,7 +125,7 @@ class InclusionAT extends Specification {
125125

126126
def 'including an element implicitly excludes its siblings'() {
127127
given:
128-
objectDifferBuilder.configure().inclusion().include().propertyName('artist')
128+
objectDifferBuilder.inclusion().include().propertyName('artist')
129129
when:
130130
def node = objectDifferBuilder.build().compare(working, base)
131131
then:
@@ -135,7 +135,7 @@ class InclusionAT extends Specification {
135135

136136
def 'including an element implicitly includes its children'() {
137137
given:
138-
objectDifferBuilder.configure().inclusion().include().node(NodePath.with('songs'))
138+
objectDifferBuilder.inclusion().include().node(NodePath.with('songs'))
139139
when:
140140
def node = objectDifferBuilder.build().compare(working, base)
141141
then:
@@ -145,7 +145,7 @@ class InclusionAT extends Specification {
145145

146146
def 'including an element by path implicitly includes its parents'() {
147147
given:
148-
objectDifferBuilder.configure().inclusion()
148+
objectDifferBuilder.inclusion()
149149
.include().node(NodePath.startBuilding().propertyName('songs').collectionItem('Happy').build())
150150
when:
151151
def node = objectDifferBuilder.build().compare(working, base)

src/integration-test/java/de/danielbechler/diff/inclusion/InclusionIT.groovy

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class InclusionIT extends Specification {
3232
static final KRAMER_SELECTOR = new CollectionItemElementSelector(new Contact(id: 'kramer'))
3333

3434
def builder = ObjectDifferBuilder.startBuilding()
35-
def configurable = builder.configure()
3635
def working = PhoneBookSetup.getWorking()
3736
def base = PhoneBookSetup.getBase()
3837

@@ -59,7 +58,7 @@ class InclusionIT extends Specification {
5958

6059
def "Property with specific name excluded via configuration"() {
6160
given:
62-
configurable.inclusion().exclude().propertyName("name")
61+
builder.inclusion().exclude().propertyName("name")
6362

6463
when:
6564
def node = builder.build().compare(working, base)
@@ -73,7 +72,7 @@ class InclusionIT extends Specification {
7372

7473
def "Category excluded via configuration"() {
7574
given:
76-
configurable.inclusion().exclude().category('private')
75+
builder.inclusion().exclude().category('private')
7776

7877
when:
7978
def node = builder.build().compare(working, base)
@@ -84,7 +83,7 @@ class InclusionIT extends Specification {
8483

8584
def "Type excluded via configuration"() {
8685
given:
87-
configurable.inclusion().exclude().type(Contact)
86+
builder.inclusion().exclude().type(Contact)
8887

8988
when:
9089
def node = builder.build().compare(working, base)
@@ -95,7 +94,7 @@ class InclusionIT extends Specification {
9594

9695
def "Node at specific NodePath excluded via configuration"() {
9796
given:
98-
configurable.inclusion().exclude().node(NodePath
97+
builder.inclusion().exclude().node(NodePath
9998
.startBuilding()
10099
.propertyName('contacts')
101100
.element(GEORGE_SELECTOR)
@@ -110,7 +109,7 @@ class InclusionIT extends Specification {
110109

111110
def "Property excluded via @ObjectDiffProperty annotation"() {
112111
given:
113-
configurable.inclusion().exclude().node(NodePath.with('name'))
112+
builder.inclusion().exclude().node(NodePath.with('name'))
114113

115114
when:
116115
def node = builder.build().compare(working, base)
@@ -121,7 +120,7 @@ class InclusionIT extends Specification {
121120

122121
def "including an element via property name"() {
123122
given:
124-
configurable.inclusion().include().propertyName('name')
123+
builder.inclusion().include().propertyName('name')
125124

126125
when:
127126
def node = builder.build().compare(working, base)
@@ -133,7 +132,7 @@ class InclusionIT extends Specification {
133132

134133
def "including an element via property name includes all its children"() {
135134
given:
136-
configurable.inclusion().include().propertyName('contacts')
135+
builder.inclusion().include().propertyName('contacts')
137136

138137
when:
139138
def node = builder.build().compare(working, base)
@@ -145,7 +144,7 @@ class InclusionIT extends Specification {
145144

146145
def "including an element via path includes all its children"() {
147146
given:
148-
configurable.inclusion().include().node(NodePath.with('contacts'))
147+
builder.inclusion().include().node(NodePath.with('contacts'))
149148

150149
when:
151150
def node = builder.build().compare(working, base)
@@ -159,10 +158,10 @@ class InclusionIT extends Specification {
159158
def includedCategory = "representation"
160159

161160
given: "the name property of the phonebook is part of our included category"
162-
configurable.categories().ofNode(NodePath.with("name")).toBe(includedCategory)
161+
builder.categories().ofNode(NodePath.with("name")).toBe(includedCategory)
163162

164163
and: "the category is included"
165-
configurable.inclusion().include().category(includedCategory)
164+
builder.inclusion().include().category(includedCategory)
166165

167166
when:
168167
def node = builder.build().compare(working, base)
@@ -173,7 +172,7 @@ class InclusionIT extends Specification {
173172

174173
def "including an element implicitly includes its children"() {
175174
given:
176-
configurable.inclusion().include().node(NodePath.with('contacts'))
175+
builder.inclusion().include().node(NodePath.with('contacts'))
177176

178177
when:
179178
def node = builder.build().compare(working, base)
@@ -185,8 +184,8 @@ class InclusionIT extends Specification {
185184

186185
def "include all but some specific elements"() {
187186
given:
188-
configurable.inclusion().include().node(NodePath.startBuilding().propertyName('contacts').build())
189-
configurable.inclusion().exclude().node(NodePath.startBuilding().propertyName('contacts').element(KRAMER_SELECTOR).build())
187+
builder.inclusion().include().node(NodePath.startBuilding().propertyName('contacts').build())
188+
builder.inclusion().exclude().node(NodePath.startBuilding().propertyName('contacts').element(KRAMER_SELECTOR).build())
190189

191190
when:
192191
def node = builder.build().compare(working, base)
@@ -198,7 +197,7 @@ class InclusionIT extends Specification {
198197

199198
def "when an element is included by property name, all its children will be implicitly included"() {
200199
given:
201-
configurable.inclusion().include().node(NodePath.startBuilding().propertyName('contacts').build())
200+
builder.inclusion().include().node(NodePath.startBuilding().propertyName('contacts').build())
202201

203202
when:
204203
def node = builder.build().compare(working, base)
@@ -212,8 +211,8 @@ class InclusionIT extends Specification {
212211

213212
def "when an element is included by category, all its children will be implicitly included"() {
214213
given:
215-
configurable.categories().ofNode(NodePath.startBuilding().propertyName('contacts').build()).toBe('identifier')
216-
configurable.inclusion().include().category('identifier')
214+
builder.categories().ofNode(NodePath.startBuilding().propertyName('contacts').build()).toBe('identifier')
215+
builder.inclusion().include().category('identifier')
217216

218217
when:
219218
def node = builder.build().compare(working, base)
@@ -225,8 +224,8 @@ class InclusionIT extends Specification {
225224

226225
def "included children of excluded nodes should also be excluded"() {
227226
given:
228-
configurable.inclusion().exclude().node(NodePath.startBuilding().propertyName('contacts').build())
229-
configurable.inclusion().include().node(NodePath.startBuilding().propertyName('contacts').element(GEORGE_SELECTOR).build())
227+
builder.inclusion().exclude().node(NodePath.startBuilding().propertyName('contacts').build())
228+
builder.inclusion().include().node(NodePath.startBuilding().propertyName('contacts').element(GEORGE_SELECTOR).build())
230229

231230
when:
232231
def node = builder.build().compare(working, base)
@@ -243,11 +242,11 @@ class InclusionIT extends Specification {
243242
.build()
244243

245244
given:
246-
configurable.categories().ofNode(NodePath.with("name")).toBe(includedCategory)
247-
configurable.categories().ofNode(nodePathToKramer).toBe(includedCategory)
245+
builder.categories().ofNode(NodePath.with("name")).toBe(includedCategory)
246+
builder.categories().ofNode(nodePathToKramer).toBe(includedCategory)
248247

249248
and: "the category is included"
250-
configurable.inclusion().include().category(includedCategory)
249+
builder.inclusion().include().category(includedCategory)
251250

252251
when:
253252
def node = builder.build().compare(working, base)

src/integration-test/java/de/danielbechler/diff/integration/IgnoreIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void verify_that_ignore_rules_with_complex_paths_works_properly() throws
5656

5757
// verify that the node can't be found, when it's excluded
5858
final ObjectDifferBuilder objectDifferBuilder = ObjectDifferBuilder.startBuilding();
59-
objectDifferBuilder.configure().inclusion().exclude().node(nodePath);
59+
objectDifferBuilder.inclusion().exclude().node(nodePath);
6060
objectDiffer = objectDifferBuilder.build();
6161
final DiffNode node = objectDiffer.compare(obj1, modifiedObj1);
6262
node.visit(new PrintingVisitor(obj1, modifiedObj1));

src/integration-test/java/de/danielbechler/diff/issues/issue15/CircularReferenceDetectionBasedOnEqualsIT.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ public class CircularReferenceDetectionBasedOnEqualsIT
3737
public void setUp() throws Exception
3838
{
3939
final ObjectDifferBuilder configuration = ObjectDifferBuilder.startBuilding();
40-
configuration.configure()
41-
.circularReferenceHandling()
42-
.matchCircularReferencesUsing(EQUALS_METHOD);
40+
configuration.circularReferenceHandling().matchCircularReferencesUsing(EQUALS_METHOD);
4341
objectDiffer = configuration.build();
4442
}
4543

src/integration-test/java/de/danielbechler/diff/issues/issue15/CircularReferenceDetectionBasedOnIdentityIT.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@ public class CircularReferenceDetectionBasedOnIdentityIT
3636
@BeforeMethod
3737
public void setUp() throws Exception
3838
{
39-
final ObjectDifferBuilder configuration = ObjectDifferBuilder.startBuilding();
40-
configuration.configure()
41-
.circularReferenceHandling()
42-
.matchCircularReferencesUsing(EQUALITY_OPERATOR);
43-
objectDiffer = configuration.build();
39+
final ObjectDifferBuilder objectDifferBuilder = ObjectDifferBuilder.startBuilding();
40+
objectDifferBuilder.circularReferenceHandling().matchCircularReferencesUsing(EQUALITY_OPERATOR);
41+
objectDiffer = objectDifferBuilder.build();
4442
}
4543

4644
@Test

0 commit comments

Comments
 (0)