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 }