1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.cache.interceptor;
18
19 import org.junit.Test;
20
21 import static org.hamcrest.Matchers.*;
22 import static org.junit.Assert.*;
23
24
25
26
27
28
29
30 public class SimpleKeyGeneratorTests {
31
32 private final SimpleKeyGenerator generator = new SimpleKeyGenerator();
33
34
35 @Test
36 public void noValues() {
37 Object k1 = generateKey(new Object[] {});
38 Object k2 = generateKey(new Object[] {});
39 Object k3 = generateKey(new Object[] { "different" });
40 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
41 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
42 assertThat(k1, equalTo(k2));
43 assertThat(k1, not(equalTo(k3)));
44 }
45
46 @Test
47 public void singleValue(){
48 Object k1 = generateKey(new Object[] { "a" });
49 Object k2 = generateKey(new Object[] { "a" });
50 Object k3 = generateKey(new Object[] { "different" });
51 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
52 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
53 assertThat(k1, equalTo(k2));
54 assertThat(k1, not(equalTo(k3)));
55 assertThat(k1, equalTo((Object) "a"));
56 }
57
58 @Test
59 public void multipleValues() {
60 Object k1 = generateKey(new Object[] { "a", 1, "b" });
61 Object k2 = generateKey(new Object[] { "a", 1, "b" });
62 Object k3 = generateKey(new Object[] { "b", 1, "a" });
63 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
64 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
65 assertThat(k1, equalTo(k2));
66 assertThat(k1, not(equalTo(k3)));
67 }
68
69 @Test
70 public void singleNullValue() {
71 Object k1 = generateKey(new Object[] { null });
72 Object k2 = generateKey(new Object[] { null });
73 Object k3 = generateKey(new Object[] { "different" });
74 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
75 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
76 assertThat(k1, equalTo(k2));
77 assertThat(k1, not(equalTo(k3)));
78 assertThat(k1, instanceOf(SimpleKey.class));
79 }
80
81 @Test
82 public void multipleNullValues() {
83 Object k1 = generateKey(new Object[] { "a", null, "b", null });
84 Object k2 = generateKey(new Object[] { "a", null, "b", null });
85 Object k3 = generateKey(new Object[] { "a", null, "b" });
86 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
87 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
88 assertThat(k1, equalTo(k2));
89 assertThat(k1, not(equalTo(k3)));
90 }
91
92 @Test
93 public void plainArray() {
94 Object k1 = generateKey(new Object[] { new String[]{"a", "b"} });
95 Object k2 = generateKey(new Object[] { new String[]{"a", "b"} });
96 Object k3 = generateKey(new Object[] { new String[]{"b", "a"} });
97 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
98 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
99 assertThat(k1, equalTo(k2));
100 assertThat(k1, not(equalTo(k3)));
101 }
102
103 @Test
104 public void arrayWithExtraParameter() {
105 Object k1 = generateKey(new Object[] { new String[]{"a", "b"}, "c" });
106 Object k2 = generateKey(new Object[] { new String[]{"a", "b"}, "c" });
107 Object k3 = generateKey(new Object[] { new String[]{"b", "a"}, "c" });
108 assertThat(k1.hashCode(), equalTo(k2.hashCode()));
109 assertThat(k1.hashCode(), not(equalTo(k3.hashCode())));
110 assertThat(k1, equalTo(k2));
111 assertThat(k1, not(equalTo(k3)));
112 }
113
114
115 private Object generateKey(Object[] arguments) {
116 return this.generator.generate(null, null, arguments);
117 }
118
119 }