3030import java .util .OptionalLong ;
3131import java .util .SortedMap ;
3232import java .util .SortedSet ;
33+ import java .util .concurrent .atomic .AtomicBoolean ;
34+ import java .util .concurrent .atomic .AtomicInteger ;
35+ import java .util .concurrent .atomic .AtomicIntegerArray ;
36+ import java .util .concurrent .atomic .AtomicLong ;
37+ import java .util .concurrent .atomic .AtomicLongArray ;
38+ import java .util .concurrent .atomic .AtomicReference ;
39+ import java .util .concurrent .atomic .AtomicReferenceArray ;
3340import java .util .stream .Stream ;
3441
3542// logically immutable
@@ -90,8 +97,20 @@ public String getFieldName() {
9097 }
9198
9299 public boolean isActualJavaType () {
93- if (actual == null ) return false ;
94- return actual .getClass ().getName ().startsWith ("java." );
100+ return isJavaType (actual );
101+ }
102+
103+ public boolean isExpectedJavaType () {
104+ return isJavaType (expected );
105+ }
106+
107+ public boolean hasSomeJavaTypeValue () {
108+ return isActualJavaType () || isExpectedJavaType ();
109+ }
110+
111+ private static boolean isJavaType (Object o ) {
112+ if (o == null ) return false ;
113+ return o .getClass ().getName ().startsWith ("java." );
95114 }
96115
97116 public boolean isExpectedFieldAnArray () {
@@ -145,6 +164,62 @@ public boolean isExpectedFieldAnOptional() {
145164 return expected instanceof Optional ;
146165 }
147166
167+ public boolean isExpectedFieldAnAtomicReference () {
168+ return expected instanceof AtomicReference ;
169+ }
170+
171+ public boolean isActualFieldAnAtomicReference () {
172+ return actual instanceof AtomicReference ;
173+ }
174+
175+ public boolean isExpectedFieldAnAtomicReferenceArray () {
176+ return expected instanceof AtomicReferenceArray ;
177+ }
178+
179+ public boolean isActualFieldAnAtomicReferenceArray () {
180+ return actual instanceof AtomicReferenceArray ;
181+ }
182+
183+ public boolean isExpectedFieldAnAtomicInteger () {
184+ return expected instanceof AtomicInteger ;
185+ }
186+
187+ public boolean isActualFieldAnAtomicInteger () {
188+ return actual instanceof AtomicInteger ;
189+ }
190+
191+ public boolean isExpectedFieldAnAtomicIntegerArray () {
192+ return expected instanceof AtomicIntegerArray ;
193+ }
194+
195+ public boolean isActualFieldAnAtomicIntegerArray () {
196+ return actual instanceof AtomicIntegerArray ;
197+ }
198+
199+ public boolean isExpectedFieldAnAtomicLong () {
200+ return expected instanceof AtomicLong ;
201+ }
202+
203+ public boolean isActualFieldAnAtomicLong () {
204+ return actual instanceof AtomicLong ;
205+ }
206+
207+ public boolean isExpectedFieldAnAtomicLongArray () {
208+ return expected instanceof AtomicLongArray ;
209+ }
210+
211+ public boolean isActualFieldAnAtomicLongArray () {
212+ return actual instanceof AtomicLongArray ;
213+ }
214+
215+ public boolean isExpectedFieldAnAtomicBoolean () {
216+ return expected instanceof AtomicBoolean ;
217+ }
218+
219+ public boolean isActualFieldAnAtomicBoolean () {
220+ return actual instanceof AtomicBoolean ;
221+ }
222+
148223 public boolean isActualFieldAMap () {
149224 return actual instanceof Map ;
150225 }
@@ -220,9 +295,15 @@ public boolean isActualAnEnum() {
220295 }
221296
222297 public boolean hasNoContainerValues () {
223- return !isContainer (actual ) && !isContainer (expected );
298+ return !isContainer (actual ) && !isExpectedAContainer ();
299+ }
300+
301+ // TODO test
302+ public boolean isExpectedAContainer () {
303+ return isContainer (expected );
224304 }
225305
306+
226307 public boolean hasNoNullValues () {
227308 return actual != null && expected != null ;
228309 }
@@ -231,6 +312,13 @@ private static boolean isContainer(Object o) {
231312 return o instanceof Iterable ||
232313 o instanceof Map ||
233314 o instanceof Optional ||
315+ o instanceof AtomicReference ||
316+ o instanceof AtomicReferenceArray ||
317+ o instanceof AtomicBoolean ||
318+ o instanceof AtomicInteger ||
319+ o instanceof AtomicIntegerArray ||
320+ o instanceof AtomicLong ||
321+ o instanceof AtomicLongArray ||
234322 isArray (o );
235323 }
236324
0 commit comments