1 package com.google.code.beanmatchers;
2
3 import java.util.List;
4 import java.util.Random;
5 import java.util.Set;
6 import java.util.UUID;
7 import org.hamcrest.Matcher;
8
9 public final class BeanMatchers {
10
11 private static final ValueGeneratorRepository VALUE_GENERATOR_REPOSITORY;
12 private static final TypeBasedValueGenerator TYPE_BASED_VALUE_GENERATOR;
13
14 static {
15 final Random random = new Random();
16 final ValueGeneratorRepository repo = new InMemoryValueGeneratorRepository();
17 repo.registerValueGenerator(new StringGenerator(), String.class);
18 repo.registerValueGenerator(new UuidGenerator(), UUID.class);
19 repo.registerValueGenerator(new IntegerGenerator(random), Integer.class, Integer.TYPE);
20 repo.registerValueGenerator(new DoubleGenerator(random), Double.class, Double.TYPE);
21 repo.registerValueGenerator(new BooleanGenerator(random), Boolean.class, Boolean.TYPE);
22 repo.registerValueGenerator(new LongGenerator(random), Long.class, Long.TYPE);
23 repo.registerValueGenerator(new FloatGenerator(random), Float.class, Float.TYPE);
24 repo.registerValueGenerator(new ByteGenerator(random), Byte.class, Byte.TYPE);
25 repo.registerValueGenerator(new CharacterGenerator(random), Character.class, Character.TYPE);
26 repo.registerValueGenerator(new ShortGenerator(random), Short.class, Short.TYPE);
27 repo.registerValueGenerator(new ListGenerator(random), List.class);
28 repo.registerValueGenerator(new SetGenerator(random), Set.class);
29 VALUE_GENERATOR_REPOSITORY = repo;
30 final ArrayTypeBasedValueGenerator arrayValueGenerator = new ArrayTypeBasedValueGenerator();
31 TYPE_BASED_VALUE_GENERATOR = new DefaultTypeBasedValueGenerator(
32 VALUE_GENERATOR_REPOSITORY,
33 new MockingTypeBasedValueGenerator(),
34 new EnumBasedValueGenerator(random),
35 arrayValueGenerator
36 );
37 arrayValueGenerator.setTypeBaseValueGenerator(TYPE_BASED_VALUE_GENERATOR);
38 }
39
40 private BeanMatchers() {
41 }
42
43 public static Matcher<Class> hasValidGettersAndSettersFor(String... properties) {
44 return new InstantiatingMatcherDecorator(isABeanWithValidGettersAndSettersFor(properties));
45 }
46
47 public static <T> Matcher<T> isABeanWithValidGettersAndSettersFor(String... properties) {
48 return new HasValidGettersAndSettersMatcher<T>(TYPE_BASED_VALUE_GENERATOR, properties);
49 }
50
51 public static Matcher<Class> hasValidGettersAndSettersExcluding(String... properties) {
52 return new InstantiatingMatcherDecorator(
53 isABeanWithValidGettersAndSettersExcluding(properties));
54 }
55
56 public static <T> Matcher<T> isABeanWithValidGettersAndSettersExcluding(String... properties) {
57 return new HasValidGettersAndSettersExcludingMatcher<T>(TYPE_BASED_VALUE_GENERATOR, properties);
58 }
59
60 public static Matcher<Class> hasValidGettersAndSetters() {
61 return hasValidGettersAndSettersExcluding();
62 }
63
64 public static <T> Matcher<T> isABeanWithValidGettersAndSetters() {
65 return isABeanWithValidGettersAndSettersExcluding();
66 }
67
68 public static Matcher<Class> hasValidBeanConstructor() {
69 return new HasValidBeanConstructorMatcher();
70 }
71
72 public static Matcher<Class> hasValidBeanHashCode() {
73 return new HasValidBeanHashCodeExcludingMatcher(TYPE_BASED_VALUE_GENERATOR);
74 }
75
76 public static Matcher<Class> hasValidBeanHashCodeFor(String... properties) {
77 return new HasValidBeanHashCodeForMatcher(TYPE_BASED_VALUE_GENERATOR, properties);
78 }
79
80 public static Matcher<Class> hasValidBeanHashCodeExcluding(String... properties) {
81 return new HasValidBeanHashCodeExcludingMatcher(TYPE_BASED_VALUE_GENERATOR, properties);
82 }
83
84 public static Matcher<Class> hasValidBeanEquals() {
85 return new HasValidBeanEqualsExcludingMatcher(TYPE_BASED_VALUE_GENERATOR);
86 }
87
88 public static Matcher<Class> hasValidBeanEqualsFor(String... properties) {
89 return new HasValidBeanEqualsForMatcher(TYPE_BASED_VALUE_GENERATOR, properties);
90 }
91
92 public static Matcher<Class> hasValidBeanEqualsExcluding(String... properties) {
93 return new HasValidBeanEqualsExcludingMatcher(TYPE_BASED_VALUE_GENERATOR, properties);
94 }
95
96 public static Matcher<Class> hasValidBeanToString() {
97 return new HasToStringDescribingPropertiesExcludingMatcher(TYPE_BASED_VALUE_GENERATOR);
98 }
99
100 public static Matcher<Class> hasValidBeanToStringFor(String... properties) {
101 return new HasToStringDescribingPropertiesMatcher(TYPE_BASED_VALUE_GENERATOR, properties);
102 }
103
104 public static Matcher<Class> hasValidBeanToStringExcluding(String... properties) {
105 return new HasToStringDescribingPropertiesExcludingMatcher(
106 TYPE_BASED_VALUE_GENERATOR, properties);
107 }
108
109 public static <T> void registerValueGenerator(ValueGenerator<T> generator, Class<T> type) {
110 VALUE_GENERATOR_REPOSITORY.registerValueGenerator(generator, type);
111 }
112 }