summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@zancanaro.id.au>2015-06-10 00:21:35 +1000
committerCarlo Zancanaro <carlo@zancanaro.id.au>2015-06-10 00:21:35 +1000
commit60bc9218d0872e40a6857706d51955ee3d058717 (patch)
treeb6032a73a629ffe6027dda34433d4ea972e5537f
parent6546881559e4bbcfe2b220199a9f3cd4196d1960 (diff)
Support enums in the ObjectGeneration stuff
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/object/GeneratorProvider.java7
-rw-r--r--src/test/java/au/id/zancanaro/javacheck/object/MyObjectAddTest.java1
-rw-r--r--src/test/java/au/id/zancanaro/javacheck/object/SubObject.java16
3 files changed, 18 insertions, 6 deletions
diff --git a/src/main/java/au/id/zancanaro/javacheck/object/GeneratorProvider.java b/src/main/java/au/id/zancanaro/javacheck/object/GeneratorProvider.java
index 24b73d5..827ba3f 100644
--- a/src/main/java/au/id/zancanaro/javacheck/object/GeneratorProvider.java
+++ b/src/main/java/au/id/zancanaro/javacheck/object/GeneratorProvider.java
@@ -88,7 +88,12 @@ public interface GeneratorProvider {
provider.getGenerator(keyType, new Annotation[0], provider),
provider.getGenerator(valueType, new Annotation[0], provider));
} else if (type instanceof Class) {
- return ofType((Class<?>) type, provider);
+ Class<?> clazz = (Class<?>) type;
+ if (Enum.class.isAssignableFrom(clazz)) {
+ return elements(clazz.getEnumConstants());
+ } else {
+ return ofType((Class<?>) type, provider);
+ }
} else if (type instanceof ParameterizedType) {
ParameterizedType param = (ParameterizedType) type;
if (param.getRawType() instanceof Class) {
diff --git a/src/test/java/au/id/zancanaro/javacheck/object/MyObjectAddTest.java b/src/test/java/au/id/zancanaro/javacheck/object/MyObjectAddTest.java
index 9321acb..884114c 100644
--- a/src/test/java/au/id/zancanaro/javacheck/object/MyObjectAddTest.java
+++ b/src/test/java/au/id/zancanaro/javacheck/object/MyObjectAddTest.java
@@ -16,6 +16,7 @@ public class MyObjectAddTest {
assertTrue(added.string.length() == a.string.length() + b.string.length());
assertTrue(added.value == a.value + b.value);
assertEquals(added.subObject, a.subObject.add(b.subObject));
+ assertEquals(added.subObject.value, a.subObject.value);
}
}
diff --git a/src/test/java/au/id/zancanaro/javacheck/object/SubObject.java b/src/test/java/au/id/zancanaro/javacheck/object/SubObject.java
index bdf2ce8..1e49cfe 100644
--- a/src/test/java/au/id/zancanaro/javacheck/object/SubObject.java
+++ b/src/test/java/au/id/zancanaro/javacheck/object/SubObject.java
@@ -4,9 +4,11 @@ import java.util.*;
public class SubObject<T> {
public final Map<String, List<T>> obj;
+ public final EnumValues value;
- public SubObject(Map<String, List<T>> obj) {
+ public SubObject(Map<String, List<T>> obj, EnumValues value) {
this.obj = obj;
+ this.value = value;
}
public SubObject<T> add(SubObject<T> other) {
@@ -21,12 +23,12 @@ public class SubObject<T> {
values.put(key, entry.getValue());
}
}
- return new SubObject<>(Collections.unmodifiableMap(values));
+ return new SubObject<>(Collections.unmodifiableMap(values), this.value);
}
@Override
public String toString() {
- return obj.toString();
+ return "{" + obj.toString() + ", " + this.value + "}";
}
@Override
@@ -34,11 +36,15 @@ public class SubObject<T> {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SubObject subObject = (SubObject) o;
- return obj.equals(subObject.obj);
+ return obj.equals(subObject.obj) && value.equals(subObject.value);
}
@Override
public int hashCode() {
- return obj.hashCode();
+ return obj.hashCode() + 37 * value.hashCode();
+ }
+
+ public static enum EnumValues {
+ A, B, C
}
}