1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.routing.impl;
17
18 import static java.util.Arrays.asList;
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertSame;
21 import static org.seasar.cubby.action.RequestMethod.GET;
22 import static org.seasar.cubby.action.RequestMethod.POST;
23
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.TreeMap;
28 import java.util.regex.Pattern;
29
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.seasar.cubby.routing.Routing;
33 import org.seasar.cubby.routing.impl.RoutingImpl;
34 import org.seasar.cubby.routing.impl.PathResolverImpl.RoutingKey;
35
36 public class RoutingKeyTest {
37
38 private Routing routing1;
39 private Routing routing1d;
40 private Routing routing2;
41 private Routing routing3;
42 private Routing routing4;
43 private Routing routing5;
44 private Routing routing5d;
45 private Routing routing6;
46 private Routing routing6d;
47
48 @Before
49 public void setupRoutings() throws Exception {
50 routing1 = new RoutingImpl(null, null, null, asList(new String[0]),
51 Pattern.compile("/foo/bar"), GET, null, Integer.MAX_VALUE);
52 routing1d = new RoutingImpl(null, null, null, asList(new String[0]),
53 Pattern.compile("/foo/bar"), GET, null, Integer.MAX_VALUE);
54 routing2 = new RoutingImpl(null, null, null,
55 asList(new String[] { "p1" }), Pattern.compile("/foo/bar/a"),
56 GET, null, Integer.MAX_VALUE);
57 routing3 = new RoutingImpl(null, null, null, asList(new String[] {
58 "p1", "p2" }), Pattern.compile("/foo/bar/bbb"), GET, null,
59 Integer.MAX_VALUE);
60 routing4 = new RoutingImpl(null, null, null, asList(new String[] {
61 "p1", "p2" }), Pattern.compile("/foo/bar/cc"), GET, null,
62 Integer.MAX_VALUE);
63 routing5 = new RoutingImpl(null, null, null, asList(new String[] {
64 "p1", "p2" }), Pattern.compile("/foo/bar/cc"), POST, null,
65 Integer.MAX_VALUE);
66 routing5d = new RoutingImpl(null, null, null, asList(new String[] {
67 "p1", "p2" }), Pattern.compile("/foo/bar/cc"), POST, null,
68 Integer.MAX_VALUE);
69 routing6 = new RoutingImpl(null, null, null, asList(new String[] {
70 "p1", "p2" }), Pattern.compile("/foo/bar/cc/dd"), GET, null, 1);
71 routing6d = new RoutingImpl(null, null, null, asList(new String[] {
72 "p1", "p2" }), Pattern.compile("/foo/bar/cc/dd"), GET, null, 0);
73 }
74
75 @Test
76 public void duplicate() {
77 assertEquals(0, new RoutingKey(routing1).compareTo(new RoutingKey(
78 routing1d)));
79 assertEquals(0, new RoutingKey(routing5).compareTo(new RoutingKey(
80 routing5d)));
81 }
82
83 @Test
84 public void sort() {
85 Map<RoutingKey, Routing> map = new TreeMap<RoutingKey, Routing>();
86 map.put(new RoutingKey(routing3), routing3);
87 map.put(new RoutingKey(routing5), routing5);
88 map.put(new RoutingKey(routing1), routing1);
89 map.put(new RoutingKey(routing4), routing4);
90 map.put(new RoutingKey(routing2), routing2);
91 List<Routing> actualList = new ArrayList<Routing>(asList(new Routing[] {
92 routing1, routing2, routing3, routing4, routing5 }));
93 for (Routing routing : map.values()) {
94 assertSame(actualList.remove(0), routing);
95 }
96 }
97
98 @Test
99 public void sort2() {
100 Map<RoutingKey, Routing> map = new TreeMap<RoutingKey, Routing>();
101 map.put(new RoutingKey(routing3), routing3);
102 map.put(new RoutingKey(routing5), routing5);
103 map.put(new RoutingKey(routing1), routing1);
104 map.put(new RoutingKey(routing4), routing4);
105 map.put(new RoutingKey(routing2), routing2);
106 map.put(new RoutingKey(routing6), routing6);
107 map.put(new RoutingKey(routing6d), routing6d);
108 List<Routing> actualList = new ArrayList<Routing>(asList(new Routing[] {
109 routing6d, routing6, routing1, routing2, routing3, routing4,
110 routing5 }));
111 for (Routing routing : map.values()) {
112 assertSame(actualList.remove(0), routing);
113 }
114 }
115
116 }