Skip to content

Commit 90fe55c

Browse files
committed
Removed method constraints for MonetayrAmount.
1 parent edabff1 commit 90fe55c

File tree

3 files changed

+92
-125
lines changed

3 files changed

+92
-125
lines changed

pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,11 @@
385385
<scope>test</scope>
386386
</dependency>
387387
<dependency>
388-
<groupId>${impl.groupId}</groupId>
389-
<artifactId>${impl.artifactId}</artifactId>
388+
<groupId>org.javamoney.ri</groupId>
389+
<artifactId>jsr354-ri</artifactId>
390390
<version>${impl.version}</version>
391391
<type>${impl.packageType}</type>
392+
<scope>provided</scope>
392393
</dependency>
393394
<dependency>
394395
<groupId>org.jboss.test-audit</groupId>

src/main/java/org/javamoney/tck/tests/MonetaryAmountClassTest.java

Lines changed: 5 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -34,134 +34,16 @@ public void testAmountClasses() {
3434

3535
public void testAmountClass(Class type) {
3636
ClassTester.testImplementsInterface(type, MonetaryAmount.class);
37-
ClassTester.testImmutable(type);
38-
ClassTester.testSerializable(type);
3937
ClassTester.testComparable(type);
40-
ClassTester.testHasPublicMethod(type, type,
41-
"add", MonetaryAmount.class);
42-
ClassTester.testHasNotPublicMethod(type, type,
43-
"add", Number.class);
44-
ClassTester.testHasPublicMethod(type, type,
45-
"subtract", MonetaryAmount.class);
46-
ClassTester.testHasNotPublicMethod(type, type,
47-
"subtract", Number.class);
48-
ClassTester.testHasNotPublicMethod(type, byte.class,
49-
"byteValue");
50-
ClassTester.testHasNotPublicMethod(type, Byte.class,
51-
"byteValue");
52-
ClassTester.testHasNotPublicMethod(type, int.class,
53-
"intValue");
54-
ClassTester.testHasNotPublicMethod(type, Integer.class,
55-
"intValue");
56-
ClassTester.testHasNotPublicMethod(type, int.class,
57-
"intValueExact");
58-
ClassTester.testHasNotPublicMethod(type, Integer.class,
59-
"intValueExact");
60-
ClassTester.testHasNotPublicMethod(type, short.class,
61-
"shortValue");
62-
ClassTester.testHasNotPublicMethod(type, Short.class,
63-
"shortValue");
64-
ClassTester.testHasNotPublicMethod(type, short.class,
65-
"shortValueExact");
66-
ClassTester.testHasNotPublicMethod(type, Short.class,
67-
"shortValueExact");
68-
ClassTester.testHasNotPublicMethod(type, float.class,
69-
"floatValue");
70-
ClassTester.testHasNotPublicMethod(type, Float.class,
71-
"floatValue");
72-
ClassTester.testHasPublicMethod(type, double.class,
73-
"doubleValue");
74-
ClassTester.testHasPublicMethod(type, long.class,
75-
"longValue");
76-
ClassTester.testHasPublicMethod(type, long.class,
77-
"longValueExact");
78-
ClassTester.testHasPublicMethod(type, Number.class,
79-
"asNumber");
80-
// ClassTester.testHasPublicMethod(type, Number.class,
81-
// "asType");
82-
// ClassTester.testHasPublicMethod(type, Number.class,
83-
// "asType", Class.class);
84-
// ClassTester.testHasPublicMethod(type, Object.class,
85-
// "asType", Class.class, MonetaryAdjuster.class);
86-
87-
ClassTester.testHasPublicMethod(type, type,
88-
"abs");
89-
// ClassTester.testHasPublicStaticMethod(type, type,
90-
// "from", MonetaryAmount.class);
91-
ClassTester.testHasPublicMethod(type, type,
92-
"divide", MonetaryAmount.class);
93-
ClassTester.testHasPublicMethod(type, type,
94-
"divide", Number.class);
95-
// ClassTester.testHasPublicMethod(type, MonetaryAmount[].class,
96-
// "divideAndRemainder", MonetaryAmount.class);
97-
// ClassTester.testHasPublicMethod(type, type,
98-
// "divideAndRemainder", Number.class);
99-
ClassTester.testHasPublicMethod(type, type,
100-
"divideToIntegralValue", MonetaryAmount.class);
101-
ClassTester.testHasPublicMethod(type, type,
102-
"divideToIntegralValue", Number.class);
103-
ClassTester.testHasPublicMethod(type, Class.class,
104-
"getNumberType");
105-
ClassTester.testHasPublicMethod(type, int.class,
106-
"getPrecision");
107-
ClassTester.testHasPublicMethod(type, int.class,
108-
"getScale");
109-
ClassTester.testHasPublicMethod(type, boolean.class,
110-
"isEqualTo", MonetaryAmount.class);
111-
ClassTester.testHasPublicMethod(type, boolean.class,
112-
"isGreaterThan", MonetaryAmount.class);
113-
ClassTester.testHasPublicMethod(type, boolean.class,
114-
"isGreaterThanOrEqualTo", MonetaryAmount.class);
115-
ClassTester.testHasPublicMethod(type, boolean.class,
116-
"isLessThan", MonetaryAmount.class);
117-
ClassTester.testHasPublicMethod(type, boolean.class,
118-
"isLessThanOrEqualTo", MonetaryAmount.class);
119-
ClassTester.testHasPublicMethod(type, boolean.class,
120-
"isNegative");
121-
ClassTester.testHasPublicMethod(type, boolean.class,
122-
"isNegativeOrZero");
123-
124-
ClassTester.testHasPublicMethod(type, boolean.class,
125-
"isNotEqualTo", MonetaryAmount.class);
126-
ClassTester.testHasPublicMethod(type, boolean.class,
127-
"isPositive");
128-
ClassTester.testHasPublicMethod(type, boolean.class,
129-
"isPositiveOrZero");
130-
ClassTester.testHasPublicMethod(type, boolean.class,
131-
"isZero");
132-
ClassTester.testHasPublicMethod(type, type,
133-
"multiply", MonetaryAmount.class);
134-
ClassTester.testHasPublicMethod(type, type,
135-
"multiply", Number.class);
136-
ClassTester.testHasPublicMethod(type, type,
137-
"negate");
138-
ClassTester.testHasPublicMethod(type, type,
139-
"plus");
140-
ClassTester.testHasPublicMethod(type, type,
141-
"pow", int.class);
142-
ClassTester.testHasPublicMethod(type, type,
143-
"remainder", MonetaryAmount.class);
144-
ClassTester.testHasPublicMethod(type, type,
145-
"remainder", Number.class);
146-
ClassTester.testHasPublicMethod(type, type,
147-
"scaleByPowerOfTen", int.class);
148-
ClassTester.testHasPublicMethod(type, int.class,
149-
"signum");
150-
ClassTester.testHasPublicMethod(type, String.class,
151-
"toEngineeringString");
152-
ClassTester.testHasPublicMethod(type, String.class,
153-
"toPlainString");
154-
ClassTester.testHasPublicMethod(type, type,
155-
"ulp");
156-
ClassTester.testHasPublicMethod(type, type,
157-
"with", Number.class);
158-
ClassTester.testHasPublicMethod(type, type,
159-
"with", MonetaryAdjuster.class);
38+
ClassTester.testImmutableOpt(type);
39+
ClassTester.testSerializableOpt(type);
40+
ClassTester.testHasPublicStaticMethodOpt(type, type,
41+
"from", MonetaryAdjuster.class);
16042

16143
MonetaryAmount amt = (MonetaryAmount) TCKTestSetup
16244
.getTestConfiguration().create(type,
16345
"CHF", Double.valueOf(1.50d));
164-
ClassTester.testSerializable(amt);
46+
ClassTester.testSerializableOpt(amt);
16547
}
16648

16749
}

src/main/java/org/javamoney/tck/util/ClassTester.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99
import java.lang.reflect.Modifier;
1010
import java.util.Arrays;
1111

12+
import javax.money.MonetaryAdjuster;
13+
1214
import junit.framework.Assert;
1315

1416
import org.javamoney.tck.TCKValidationException;
1517

1618
public class ClassTester {
1719

20+
private static final StringBuffer warnings = new StringBuffer();
21+
1822
private ClassTester() {
1923

2024
}
@@ -124,6 +128,29 @@ public static void testHasPublicMethod(Class type, Class returnType,
124128
for (Method m : current.getDeclaredMethods()) {
125129
if (returnType.equals(returnType) &&
126130
m.getName().equals(name) &&
131+
((m.getModifiers() & Modifier.PUBLIC) != 0) &&
132+
Arrays.equals(m.getParameterTypes(), paramTypes)) {
133+
return;
134+
}
135+
}
136+
current = current.getSuperclass();
137+
}
138+
throw new TCKValidationException(
139+
"Class must implement method " + name + '('
140+
+ Arrays.toString(paramTypes) + "): "
141+
+ returnType.getName() + ", but does not: "
142+
+ type.getName());
143+
}
144+
145+
public static void testHasPublicStaticMethod(Class type, Class returnType,
146+
String name, Class... paramTypes) {
147+
Class current = type;
148+
while (current != null) {
149+
for (Method m : current.getDeclaredMethods()) {
150+
if (returnType.equals(returnType) &&
151+
m.getName().equals(name) &&
152+
((m.getModifiers() & Modifier.PUBLIC) != 0) &&
153+
((m.getModifiers() & Modifier.STATIC) != 0) &&
127154
Arrays.equals(m.getParameterTypes(), paramTypes)) {
128155
return;
129156
}
@@ -166,6 +193,63 @@ public static void assertValue(Object value, String methodName,
166193
InvocationTargetException {
167194
Method m = instance.getClass().getDeclaredMethod(methodName);
168195
Assert.assertEquals(value, m.invoke(instance));
196+
}
197+
198+
public static boolean testImmutableOpt(Class type) {
199+
try {
200+
testImmutable(type);
201+
return true;
202+
} catch (Exception e) {
203+
warnings.append("Recommendation failed: Class should be immutable: "
204+
+ type.getName() + ", details: " + e.getMessage() + "\n");
205+
return false;
206+
}
207+
}
208+
209+
public static boolean testSerializableOpt(Class type) {
210+
try {
211+
testSerializable(type);
212+
return true;
213+
} catch (Exception e) {
214+
warnings.append("Recommendation failed: Class should be serializable: "
215+
+ type.getName() + ", details: " + e.getMessage() + "\n");
216+
return false;
217+
}
218+
}
219+
220+
public static boolean testHasPublicStaticMethodOpt(Class type,
221+
Class returnType,
222+
String methodName, Class... paramTypes) {
223+
try {
224+
testHasPublicStaticMethod(type, returnType, methodName, paramTypes);
225+
return true;
226+
} catch (Exception e) {
227+
warnings.append("Recommendation failed: Missing method [public static "
228+
+ methodName
229+
+ '('
230+
+ Arrays.toString(paramTypes) + "):" + returnType.getName()
231+
+ "] on: "
232+
+ type.getName() + "\n");
233+
return false;
234+
}
235+
}
236+
237+
public static boolean testSerializableOpt(Object instance) {
238+
try {
239+
testSerializable(instance);
240+
return true;
241+
} catch (Exception e) {
242+
warnings.append("Recommendation failed: Class is serializable, but serialization failed: "
243+
+ instance.getClass().getName() + "\n");
244+
return false;
245+
}
246+
}
247+
248+
public static void resetWarnings() {
249+
warnings.setLength(0);
250+
}
169251

252+
public static String getWarnings() {
253+
return warnings.toString();
170254
}
171255
}

0 commit comments

Comments
 (0)