Browse Source

Add tests for prefix mode mamager.

Change-Id: I66662eddf73c570a0f59e4ffd0f84ab5da15d195
Reviewed-on: http://gerrit.dmdirc.com/3958
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
changes/58/3958/2
Chris Smith 9 years ago
parent
commit
1ec843d735

+ 6
- 1
src/com/dmdirc/parser/irc/PrefixModeManager.java View File

@@ -115,7 +115,7 @@ public class PrefixModeManager {
115 115
     }
116 116
 
117 117
     /**
118
-     * Adds a new mode.
118
+     * Adds a new mode. Modes must be added in increasing order of importance.
119 119
      *
120 120
      * @param mode The mode that appears in mode strings (e.g. 'o').
121 121
      * @param prefix The prefix that is used to show a user has the mode (e.g. '@')
@@ -198,6 +198,11 @@ public class PrefixModeManager {
198 198
             }
199 199
             result.append(existingMode);
200 200
         }
201
+
202
+        if (!found) {
203
+            result.append(mode);
204
+        }
205
+
201 206
         return result.toString();
202 207
     }
203 208
 }

+ 177
- 0
test/com/dmdirc/parser/irc/PrefixModeManagerTest.java View File

@@ -0,0 +1,177 @@
1
+/*
2
+ * Copyright (c) 2006-2014 DMDirc Developers
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to deal
6
+ * in the Software without restriction, including without limitation the rights
7
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ * copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in
12
+ * all copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ * SOFTWARE.
21
+ */
22
+
23
+package com.dmdirc.parser.irc;
24
+
25
+import org.junit.Before;
26
+import org.junit.Test;
27
+
28
+import static org.junit.Assert.assertEquals;
29
+import static org.junit.Assert.assertFalse;
30
+import static org.junit.Assert.assertTrue;
31
+
32
+public class PrefixModeManagerTest {
33
+
34
+    private PrefixModeManager manager;
35
+
36
+    @Before
37
+    public void setup() {
38
+        manager = new PrefixModeManager();
39
+    }
40
+
41
+    @Test
42
+    public void testGetModeFor() {
43
+        manager.add('m', '/');
44
+        assertEquals('m', manager.getModeFor('/'));
45
+    }
46
+
47
+    @Test
48
+    public void testGetPrefixFor() {
49
+        manager.add('m', '/');
50
+        assertEquals('/', manager.getPrefixFor('m'));
51
+    }
52
+
53
+    @Test
54
+    public void testIsPrefixMode() {
55
+        manager.add('m', '/');
56
+        assertTrue(manager.isPrefixMode('m'));
57
+        assertFalse(manager.isPrefixMode('/'));
58
+        assertFalse(manager.isPrefixMode('o'));
59
+    }
60
+
61
+    @Test
62
+    public void testIsPrefix() {
63
+        manager.add('m', '/');
64
+        assertFalse(manager.isPrefix('m'));
65
+        assertTrue(manager.isPrefix('/'));
66
+        assertFalse(manager.isPrefix('+'));
67
+    }
68
+
69
+    @Test
70
+    public void testGetPrefixesFor() {
71
+        manager.add('m', '/');
72
+        manager.add('n', '+');
73
+        assertEquals("//++//", manager.getPrefixesFor("mmnnmm"));
74
+        assertEquals("", manager.getPrefixesFor(""));
75
+        assertEquals("/", manager.getPrefixesFor("m"));
76
+        assertEquals("+/", manager.getPrefixesFor("nm"));
77
+    }
78
+
79
+    @Test
80
+    public void testGetModes() {
81
+        assertEquals(0, manager.getModes().size());
82
+        manager.add('m', '/');
83
+        assertEquals(1, manager.getModes().size());
84
+        assertTrue(manager.getModes().contains('m'));
85
+        manager.add('n', '+');
86
+        assertEquals(2, manager.getModes().size());
87
+        assertTrue(manager.getModes().contains('m'));
88
+        assertTrue(manager.getModes().contains('n'));
89
+        manager.clear();
90
+        assertEquals(0, manager.getModes().size());
91
+    }
92
+
93
+    @Test
94
+    public void testIsOpped() {
95
+        assertFalse(manager.isOpped(""));
96
+        manager.add('k', '_');
97
+
98
+        // If there isn't a 'v' mode, then any mode equals opped
99
+        assertFalse(manager.isOpped(""));
100
+        assertTrue(manager.isOpped("k"));
101
+
102
+        manager.add('v', '+');
103
+        assertFalse(manager.isOpped(""));
104
+        assertFalse(manager.isOpped("k"));
105
+        assertFalse(manager.isOpped("v"));
106
+
107
+        manager.add('o', '@');
108
+        assertFalse(manager.isOpped(""));
109
+        assertFalse(manager.isOpped("k"));
110
+        assertFalse(manager.isOpped("v"));
111
+        assertTrue(manager.isOpped("o"));
112
+
113
+        manager.add('z', '*');
114
+        assertFalse(manager.isOpped(""));
115
+        assertFalse(manager.isOpped("k"));
116
+        assertFalse(manager.isOpped("v"));
117
+        assertTrue(manager.isOpped("o"));
118
+        assertTrue(manager.isOpped("z"));
119
+    }
120
+
121
+    @Test
122
+    public void testInsertMode() {
123
+        manager.add('m', '/');
124
+        manager.add('n', '+');
125
+        manager.add('o', '@');
126
+
127
+        // Already exist in modes
128
+        assertEquals("mn", manager.insertMode("mn", 'm'));
129
+        assertEquals("m", manager.insertMode("m", 'm'));
130
+
131
+        // Most important ones go at the start
132
+        assertEquals("om", manager.insertMode("m", 'o'));
133
+        assertEquals("nm", manager.insertMode("m", 'n'));
134
+        assertEquals("onm", manager.insertMode("nm", 'o'));
135
+
136
+        // Inserting elsewhere
137
+        assertEquals("om", manager.insertMode("o", 'm'));
138
+        assertEquals("onm", manager.insertMode("on", 'm'));
139
+        assertEquals("onm", manager.insertMode("om", 'n'));
140
+        assertEquals("nm", manager.insertMode("n", 'm'));
141
+
142
+        // Build up a string from scratch
143
+        assertEquals("onm",
144
+                manager.insertMode(manager.insertMode(manager.insertMode("", 'n'), 'm'), 'o'));
145
+    }
146
+
147
+    @Test
148
+    public void testCompareImportantModes() {
149
+        // No modes, must be equal
150
+        assertEquals(0, manager.compareImportantModes("", ""));
151
+
152
+        manager.add('m', '/');
153
+        assertEquals(0, manager.compareImportantModes("", ""));
154
+        assertTrue(manager.compareImportantModes("m", "") > 0);
155
+        assertTrue(manager.compareImportantModes("", "m") < 0);
156
+
157
+        manager.add('n', '+');
158
+        assertEquals(0, manager.compareImportantModes("", ""));
159
+        assertTrue(manager.compareImportantModes("m", "") > 0);
160
+        assertTrue(manager.compareImportantModes("", "m") < 0);
161
+        assertTrue(manager.compareImportantModes("n", "") > 0);
162
+        assertTrue(manager.compareImportantModes("", "n") < 0);
163
+        assertTrue(manager.compareImportantModes("n", "m") > 0);
164
+        assertTrue(manager.compareImportantModes("m", "n") < 0);
165
+        assertTrue(manager.compareImportantModes("nm", "m") > 0);
166
+        assertTrue(manager.compareImportantModes("m", "nm") < 0);
167
+
168
+        manager.add('o', '@');
169
+        assertEquals(0, manager.compareImportantModes("", ""));
170
+        assertTrue(manager.compareImportantModes("nm", "m") > 0);
171
+        assertTrue(manager.compareImportantModes("m", "nm") < 0);
172
+        assertTrue(manager.compareImportantModes("o", "nm") > 0);
173
+        assertTrue(manager.compareImportantModes("nm", "om") < 0);
174
+        assertTrue(manager.compareImportantModes("nm", "on") < 0);
175
+    }
176
+
177
+}

Loading…
Cancel
Save