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
35
36
37
38 package com.gargoylesoftware.base.objectstore;
39
40 import java.util.ArrayList;
41 import java.util.Collections;
42 import java.util.HashMap;
43 import java.util.List;
44 import java.util.Map;
45 import junit.framework.TestCase;
46
47 /***
48 * Tests for DispatchingObjectStore
49 *
50 * @version $Revision: 1.7 $
51 * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
52 */
53 public class DispatchingObjectStoreTest extends TestCase {
54
55 private static class CommandA extends ObjectStoreCommand {
56
57 private static final long serialVersionUID = 1L;
58 }
59
60
61 /***
62 * A fake object store for testing purposes
63 */
64 public static class ObjectStoreA extends ObjectStore {
65 /*** Create one */
66 public ObjectStoreA() {}
67 private final List list_ = new ArrayList();
68 /***
69 * Execute the command
70 * @param command The command to execute
71 * @return The list
72 */
73 protected Object executeImpl( final ObjectStoreCommand command ) {
74 list_.add(command);
75 return list_;
76 }
77 }
78
79
80 /***
81 * Create an instance
82 * @param name The name of the test
83 */
84 public DispatchingObjectStoreTest( final String name ) {
85 super(name);
86 }
87
88
89 /***
90 * Test the dispatching logic
91 */
92 public void testDispatch() {
93
94 final Map map = new HashMap(3);
95 map.put( CommandA.class, ObjectStoreA.class );
96
97 final DispatchingObjectStore store
98 = new DispatchingObjectStore(map, Collections.EMPTY_MAP);
99 final ObjectStoreCommand command = new CommandA();
100
101 final List list = (List)store.execute(command);
102
103 assertEquals( "list.size", 1, list.size() );
104 assertSame( command, list.get(0) );
105 }
106
107
108 /***
109 * Try passing null into the constructor
110 */
111 public void testConstructor_Null() {
112 try {
113 new DispatchingObjectStore(null, Collections.EMPTY_MAP);
114 fail("Expected exception");
115 }
116 catch( final NullPointerException e ) {
117
118 }
119 }
120
121
122 /***
123 * Try to dispatch a command for which we haven't defined a store.
124 */
125 public void testExecute_NotFound() {
126 final ObjectStore store
127 = new DispatchingObjectStore(new HashMap(3), Collections.EMPTY_MAP);
128 try {
129 store.execute( new CommandA() );
130 fail("Expected exception");
131 }
132 catch( ObjectStoreCommandNotSupportedException e ) {
133
134 }
135 }
136
137
138 /***
139 * Make sure that findStore() is being called
140 */
141 public void testFindStore() {
142
143 final List list = new ArrayList();
144
145 final DispatchingObjectStore store = new DispatchingObjectStore(Collections.EMPTY_MAP) {
146 protected ObjectStore findStore( final ObjectStoreCommand command ) {
147 list.add(command);
148 return new ObjectStoreA();
149 }
150 };
151 final ObjectStoreCommand command = new CommandA();
152
153 store.execute(command);
154
155 assertEquals( "list.size", 1, list.size() );
156 assertSame( command, list.get(0) );
157 }
158 }