1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.rssaggregator.generator;
35
36 import static org.junit.Assert.assertEquals;
37 import static org.junit.Assert.assertNotNull;
38 import static org.junit.Assert.assertTrue;
39 import static org.junit.Assert.fail;
40 import info.magnolia.module.ModuleRegistry;
41 import info.magnolia.module.ModuleRegistryImpl;
42 import info.magnolia.module.model.ModuleDefinition;
43 import info.magnolia.module.rssaggregator.RSSAggregator;
44 import info.magnolia.test.ComponentsTestUtil;
45
46 import java.util.Hashtable;
47 import java.util.List;
48 import java.util.Map;
49
50 import org.junit.After;
51 import org.junit.Before;
52 import org.junit.Test;
53
54 import com.sun.syndication.feed.synd.SyndEntry;
55 import com.sun.syndication.feed.synd.SyndFeed;
56
57
58
59
60
61
62 public class FeedGeneratorResolverTest {
63
64 private FeedGeneratorResolver resolver;
65 private Map<String, String[]> parameters;
66 private ModuleRegistry moduleRegistery;
67
68 @Before
69 public void setUp() {
70 parameters = new Hashtable<String, String[]>();
71 ModuleDefinition def = new ModuleDefinition();
72 def.setClassName(RSSAggregator.class.getCanonicalName());
73 moduleRegistery = new ModuleRegistryImpl();
74 moduleRegistery.registerModuleDefinition("rssaggregator", def);
75 moduleRegistery.registerModuleInstance("rssaggregator", new RSSAggregator());
76 ComponentsTestUtil.setInstance(ModuleRegistry.class, moduleRegistery);
77 resolver = new FeedGeneratorResolver(moduleRegistery,new RSSModuleFeedGenerator());
78 }
79
80 @After
81 public void tearDown() {
82 moduleRegistery = null;
83 ComponentsTestUtil.clear();
84 }
85
86 @Test
87 public void testResolve() {
88
89 parameters.put("generatorName", new String[]{"testGenerator"});
90 parameters.put("testValue", new String[]{"blah"});
91 RSSAggregator module = (RSSAggregator) moduleRegistery.getModuleInstance("rssaggregator");
92 assertNotNull(module);
93 module.addFeedGenerator("testGenerator", new TestableFeedGenerator());
94 FeedGenerator generator = resolver.resolve(parameters);
95 assertNotNull(generator);
96 assertTrue(generator instanceof TestableFeedGenerator);
97 assertEquals("blah", ((TestableFeedGenerator) generator).getTestValue());
98 }
99
100 @Test
101 public void testResolve_throwsExceptionWhenUnresolvable() {
102 parameters.put("generatorName", new String[]{"no-factory-registered-for-this-generator"});
103
104 try {
105 resolver.resolve(parameters);
106 fail("FeedGeneratorConstructionException expected");
107 } catch (FeedGeneratorConstructionException exception) {
108 assertNotNull(exception.getMessage());
109 }
110 }
111
112 public static class TestableFeedGenerator extends AbstractSyndFeedGenerator implements Cloneable {
113
114 private String testValue;
115
116 public void setTestValue(String testValue) {
117 this.testValue = testValue;
118 }
119
120 @Override
121 public void setFeedInfo(SyndFeed feed) {
122 throw new UnsupportedOperationException("Not implemented");
123 }
124
125 public String getTestValue() {
126 return testValue;
127 }
128
129 @Override
130 public List<SyndEntry> loadFeedEntries() {
131 throw new UnsupportedOperationException("Not implemented");
132 }
133
134 @Override
135 public Object clone() throws CloneNotSupportedException {
136 return super.clone();
137 }
138 }
139 }