Skip to content

Commit d0268f9

Browse files
committed
Add test for AbstractDelegateConverter
1 parent 31d0d72 commit d0268f9

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package org.scijava.convert;
2+
3+
import static org.junit.Assert.assertSame;
4+
import static org.junit.Assert.assertTrue;
5+
6+
import org.junit.After;
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
import org.scijava.Context;
10+
import org.scijava.plugin.Plugin;
11+
12+
13+
public class DelegateConverterTest {
14+
private Context context;
15+
16+
@Before
17+
public void setUp() {
18+
context = new Context();
19+
}
20+
21+
@After
22+
public void tearDown() {
23+
context.dispose();
24+
context = null;
25+
}
26+
27+
@Test
28+
public void testDelegateConverters() {
29+
ConvertService convertService = context.getService(ConvertService.class);
30+
31+
// Test conversion from AType to BType
32+
AType a = new AType();
33+
assertTrue(convertService.supports(a, BType.class));
34+
BType b = convertService.convert(a, BType.class);
35+
assertSame(BType.class, b.getClass());
36+
37+
// Test conversion from BType to CType
38+
assertTrue(convertService.supports(b, CType.class));
39+
CType c = convertService.convert(b, CType.class);
40+
assertSame(CType.class, c.getClass());
41+
42+
// Test chained conversion
43+
assertTrue(convertService.supports(a, CType.class));
44+
CType converted = convertService.convert(a, CType.class);
45+
assertSame(c.getClass(), converted.getClass());
46+
}
47+
48+
public static class AType {
49+
// empty class
50+
}
51+
52+
public static class BType {
53+
// empty class
54+
}
55+
56+
public static class CType {
57+
// empty class
58+
}
59+
60+
@Plugin(type=Converter.class)
61+
public static class ABConverter extends AbstractConverter<AType, BType> {
62+
63+
@SuppressWarnings("unchecked")
64+
@Override
65+
public <T> T convert(Object src, Class<T> dest) {
66+
return (T) new BType();
67+
}
68+
69+
@Override
70+
public Class<BType> getOutputType() {
71+
return BType.class;
72+
}
73+
74+
@Override
75+
public Class<AType> getInputType() {
76+
return AType.class;
77+
}
78+
}
79+
80+
@Plugin(type=Converter.class)
81+
public static class BCConverter extends AbstractConverter<BType, CType> {
82+
83+
@SuppressWarnings("unchecked")
84+
@Override
85+
public <T> T convert(Object src, Class<T> dest) {
86+
return (T) new CType();
87+
}
88+
89+
@Override
90+
public Class<CType> getOutputType() {
91+
return CType.class;
92+
}
93+
94+
@Override
95+
public Class<BType> getInputType() {
96+
return BType.class;
97+
}
98+
}
99+
100+
@Plugin(type=Converter.class)
101+
public static class DelegateConverter extends AbstractDelegateConverter<AType, BType, CType> {
102+
103+
@Override
104+
public Class<CType> getOutputType() {
105+
return CType.class;
106+
}
107+
108+
@Override
109+
public Class<AType> getInputType() {
110+
return AType.class;
111+
}
112+
113+
@Override
114+
protected Class<BType> getDelegateType() {
115+
return BType.class;
116+
}
117+
}
118+
}

0 commit comments

Comments
 (0)