1 | /* |
2 | * JTiger Unit Testing Framework for J2SE 1.5 |
3 | * Copyright (C) 2005 Tony Morris |
4 | * |
5 | * This software is licenced under the |
6 | * Common Public Licence version 1.0 |
7 | * http://www.opensource.org/licenses/cpl1.0.php |
8 | * |
9 | * You received a copy of this licence with this software. |
10 | */ |
11 | package org.jtiger.framework; |
12 | |
13 | import static org.jtiger.framework.SequenceFactory.newSequence; |
14 | |
15 | /** |
16 | * Returns instances of {@link FixturesRunnerConfig}. |
17 | * |
18 | * @see FixturesRunnerConfig |
19 | * @author %javadoc.author.tag% |
20 | * @version %version%<br/> |
21 | * <i>Build Number %build.number%</i><br/> |
22 | * <i>Build Time %build.time% CET (GMT + 1)</i> |
23 | */ |
24 | public final class FixturesRunnerConfigFactory |
25 | { |
26 | private FixturesRunnerConfigFactory() |
27 | { |
28 | |
29 | } |
30 | |
31 | /** |
32 | * Returns a new instance of {@link FixturesRunnerConfig}. |
33 | * |
34 | * @param fixtureClasses The test fixture classes. |
35 | * @param definitionClass The test definition class (may be <code>null</code>). |
36 | * @param sutdClass The test fixture set up and tear down class (may be <code>null</code>). |
37 | * @param haltOnFailure Halt failure on test case execution failure. |
38 | * @param categories The regular expressions representing the categories to execute during the test run. |
39 | * @return A new instance of {@link FixturesRunnerConfig}. |
40 | * @throws NullPointerException If <code>categories</code> is <code>null</code>. |
41 | */ |
42 | public static FixturesRunnerConfig newFixturesRunnerConfig(final ReadOnlyArray<Class<?>> fixtureClasses, |
43 | final Class<? extends TestDefinition> definitionClass, |
44 | final Class<? extends SetUpTearDown> sutdClass, |
45 | final boolean haltOnFailure, |
46 | final String... categories) throws NullPointerException |
47 | { |
48 | if(categories == null) |
49 | { |
50 | throw new NullPointerException(); |
51 | } |
52 | |
53 | return new FixturesRunnerConfigImpl( |
54 | fixtureClasses, |
55 | definitionClass, |
56 | sutdClass, |
57 | haltOnFailure, |
58 | categories); |
59 | } |
60 | |
61 | private static final class FixturesRunnerConfigImpl implements FixturesRunnerConfig |
62 | { |
63 | private static final long serialVersionUID = 2L; |
64 | |
65 | private final ReadOnlyArray<Class<?>> fixtureClasses; |
66 | private final Class<? extends TestDefinition> definitionClass; |
67 | private final Class<? extends SetUpTearDown> sutdClass; |
68 | private final boolean haltOnFailure; |
69 | private final ReadOnlyArray<String> categories; |
70 | |
71 | FixturesRunnerConfigImpl(final ReadOnlyArray<Class<?>> fixtureClasses, |
72 | final Class<? extends TestDefinition> definitionClass, |
73 | final Class<? extends SetUpTearDown> sutdClass, |
74 | final boolean haltOnFailure, |
75 | final String... categories) |
76 | { |
77 | this.fixtureClasses = fixtureClasses; |
78 | this.definitionClass = definitionClass; |
79 | this.sutdClass = sutdClass; |
80 | this.haltOnFailure = haltOnFailure; |
81 | this.categories = newSequence(categories); |
82 | } |
83 | |
84 | public ReadOnlyArray<Class<?>> getFixtureClasses() |
85 | { |
86 | return fixtureClasses; |
87 | } |
88 | |
89 | public Class<? extends TestDefinition> getDefinitionClass() |
90 | { |
91 | return definitionClass; |
92 | } |
93 | |
94 | public Class<? extends SetUpTearDown> getSutdClass() |
95 | { |
96 | return sutdClass; |
97 | } |
98 | |
99 | public boolean isHaltOnFailure() |
100 | { |
101 | return haltOnFailure; |
102 | } |
103 | |
104 | public ReadOnlyArray<String> getCategories() |
105 | { |
106 | return categories; |
107 | } |
108 | |
109 | @Override |
110 | public String toString() |
111 | { |
112 | final StringBuilder sb = new StringBuilder(); |
113 | |
114 | sb.append('['); |
115 | sb.append(fixtureClasses); |
116 | sb.append("]["); |
117 | sb.append(definitionClass); |
118 | sb.append("]["); |
119 | sb.append(sutdClass); |
120 | sb.append("]["); |
121 | sb.append(haltOnFailure); |
122 | sb.append("]["); |
123 | sb.append(categories); |
124 | sb.append(']'); |
125 | |
126 | return sb.toString(); |
127 | } |
128 | |
129 | @Override |
130 | public boolean equals(final Object o) |
131 | { |
132 | if(this == o) |
133 | { |
134 | return true; |
135 | } |
136 | |
137 | if(o == null || o.getClass() != FixturesRunnerConfigImpl.class) |
138 | { |
139 | return false; |
140 | } |
141 | |
142 | final FixturesRunnerConfigImpl p = (FixturesRunnerConfigImpl)o; |
143 | |
144 | return fixtureClasses.equals(p.fixtureClasses) && |
145 | definitionClass == p.definitionClass && |
146 | sutdClass == p.sutdClass && |
147 | haltOnFailure == p.haltOnFailure && |
148 | categories.equals(p.categories); |
149 | } |
150 | |
151 | @Override |
152 | public int hashCode() |
153 | { |
154 | final int oddPrime = 461; |
155 | int result = 73; |
156 | |
157 | result = result * oddPrime + fixtureClasses.hashCode(); |
158 | result = result * oddPrime + definitionClass.hashCode(); |
159 | result = result * oddPrime + sutdClass.hashCode(); |
160 | result = result * oddPrime + (haltOnFailure ? 1 : 0); |
161 | result = result * oddPrime + categories.hashCode(); |
162 | |
163 | return result; |
164 | } |
165 | } |
166 | } |