View Javadoc
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 }