Browse Source

Improve CoreAliasdialogModel.

Depends-On: I7ed08f0738e581840b28851d080b06657299d55b
Change-Id: Ic9c0091441d4f7d87ddc96a327f5e5b12b4cf803
Reviewed-on: http://gerrit.dmdirc.com/3571
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Chris Smith <chris@dmdirc.com>
pull/1/head
Greg Holmes 10 years ago
parent
commit
70c1e29036

+ 127
- 9
src/com/dmdirc/commandparser/aliases/CoreAliasDialogModel.java View File

@@ -22,9 +22,16 @@
22 22
 
23 23
 package com.dmdirc.commandparser.aliases;
24 24
 
25
+import com.dmdirc.commandparser.validators.CommandNameValidator;
26
+import com.dmdirc.interfaces.CommandController;
25 27
 import com.dmdirc.interfaces.ui.AliasDialogModel;
26 28
 import com.dmdirc.interfaces.ui.AliasDialogModelListener;
27 29
 import com.dmdirc.util.collections.ListenerList;
30
+import com.dmdirc.util.validators.FileNameValidator;
31
+import com.dmdirc.util.validators.IntegerValidator;
32
+import com.dmdirc.util.validators.NotEmptyValidator;
33
+import com.dmdirc.util.validators.Validator;
34
+import com.dmdirc.util.validators.ValidatorChain;
28 35
 
29 36
 import com.google.common.base.Optional;
30 37
 
@@ -43,14 +50,20 @@ import static com.google.common.base.Preconditions.checkNotNull;
43 50
  */
44 51
 public class CoreAliasDialogModel implements AliasDialogModel {
45 52
 
53
+    private final CommandController commandController;
46 54
     private final AliasManager aliasManager;
47 55
     private final AliasFactory factory;
48 56
     private final ListenerList listeners;
49 57
     private final Map<String, Alias> aliases;
50 58
     private Optional<Alias> selectedAlias;
59
+    private String name;
60
+    private int minArgs;
61
+    private String substitution;
51 62
 
52 63
     @Inject
53
-    public CoreAliasDialogModel(final AliasManager aliasManager, final AliasFactory factory) {
64
+    public CoreAliasDialogModel(final AliasManager aliasManager, final AliasFactory factory,
65
+            final CommandController commandController) {
66
+        this.commandController = commandController;
54 67
         this.aliasManager = aliasManager;
55 68
         this.factory = factory;
56 69
         listeners = new ListenerList();
@@ -85,22 +98,30 @@ public class CoreAliasDialogModel implements AliasDialogModel {
85 98
     public void editAlias(final String name, final int minArguments, final String substitution) {
86 99
         checkNotNull(name, "Name cannot be null");
87 100
         checkArgument(aliases.containsKey(name), "Name must already exist");
88
-        final Alias alias = factory.createAlias(name, minArguments, substitution);
89
-        aliases.put(name, alias);
90
-        listeners.getCallable(AliasDialogModelListener.class).aliasEdited(name);
101
+        final Alias newAlias = factory.createAlias(name, minArguments, substitution);
102
+        final Alias oldAlias = aliases.put(name, newAlias);
103
+        listeners.getCallable(AliasDialogModelListener.class).aliasEdited(oldAlias, newAlias);
91 104
     }
92 105
 
93 106
     @Override
94 107
     public void renameAlias(final String oldName, final String newName) {
108
+        renameAlias(oldName, newName, false);
109
+    }
110
+
111
+    public void renameAlias(final String oldName, final String newName, final boolean selection) {
95 112
         checkNotNull(oldName, "Oldname cannot be null");
96 113
         checkNotNull(newName, "Newname cannot be null");
97 114
         checkArgument(aliases.containsKey(oldName), "Old name must exist");
98 115
         checkArgument(!aliases.containsKey(newName), "New name must not exist");
99 116
         final Alias alias = aliases.get(oldName);
100
-        aliases.remove(oldName);
101
-        aliases.put(newName, new Alias(alias.getType(), newName, alias.getMinArguments(),
102
-                alias.getSubstitution()));
103
-        listeners.getCallable(AliasDialogModelListener.class).aliasRenamed(oldName, newName);
117
+        final Alias newAlias = factory.createAlias(newName, alias.getMinArguments(),
118
+                alias.getSubstitution());
119
+        final Alias oldAlias = aliases.remove(oldName);
120
+        aliases.put(newName, newAlias);
121
+        if (!selection) {
122
+            setSelectedAlias(Optional.fromNullable(aliases.get(newName)));
123
+        }
124
+        listeners.getCallable(AliasDialogModelListener.class).aliasRenamed(oldAlias, newAlias);
104 125
     }
105 126
 
106 127
     @Override
@@ -111,13 +132,17 @@ public class CoreAliasDialogModel implements AliasDialogModel {
111 132
         }
112 133
         final Alias alias = aliases.get(name);
113 134
         aliases.remove(name);
135
+        if (getSelectedAlias().isPresent() && getSelectedAlias().get().equals(alias)) {
136
+            setSelectedAlias(Optional.<Alias>absent());
137
+        }
114 138
         listeners.getCallable(AliasDialogModelListener.class).aliasRemoved(alias);
115 139
     }
116 140
 
117 141
     @Override
118 142
     public void save() {
143
+        setSelectedAlias(Optional.<Alias>absent());
119 144
         for (Alias alias : aliasManager.getAliases()) {
120
-                aliasManager.removeAlias(alias);
145
+            aliasManager.removeAlias(alias);
121 146
         }
122 147
         for (Alias alias : aliases.values()) {
123 148
             aliasManager.addAlias(alias);
@@ -126,7 +151,25 @@ public class CoreAliasDialogModel implements AliasDialogModel {
126 151
 
127 152
     @Override
128 153
     public void setSelectedAlias(final Optional<Alias> alias) {
154
+        if (selectedAlias.isPresent()) {
155
+            if (selectedAlias.get().getMinArguments() != minArgs
156
+                    || !selectedAlias.get().getSubstitution().equals(substitution)) {
157
+                editAlias(selectedAlias.get().getName(), minArgs, substitution);
158
+            }
159
+            if (!selectedAlias.get().getName().equals(name)) {
160
+                renameAlias(selectedAlias.get().getName(), name, true);
161
+            }
162
+        }
129 163
         selectedAlias = alias;
164
+        if (alias.isPresent()) {
165
+            name = alias.get().getName();
166
+            minArgs = alias.get().getMinArguments();
167
+            substitution = alias.get().getSubstitution();
168
+        } else {
169
+            name = null;
170
+            minArgs = -1;
171
+            substitution = null;
172
+        }
130 173
         listeners.getCallable(AliasDialogModelListener.class).aliasSelectionChanged(selectedAlias);
131 174
     }
132 175
 
@@ -135,6 +178,81 @@ public class CoreAliasDialogModel implements AliasDialogModel {
135 178
         return selectedAlias;
136 179
     }
137 180
 
181
+    @Override
182
+    public String getSelectedAliasName() {
183
+        return name;
184
+    }
185
+
186
+    @Override
187
+    public int getSelectedAliasMininumArguments() {
188
+        return minArgs;
189
+    }
190
+
191
+    @Override
192
+    public String getSelectedAliasSubstitution() {
193
+        return substitution;
194
+    }
195
+
196
+    @Override
197
+    public void setSelectedAliasName(final String aliasName) {
198
+        this.name = aliasName;
199
+    }
200
+
201
+    @Override
202
+    public void setSelectedAliasMinimumArguments(final int minArgs) {
203
+        this.minArgs = minArgs;
204
+    }
205
+
206
+    @Override
207
+    public void setSelectedAliasSubstitution(final String substitution) {
208
+        this.substitution = substitution;
209
+    }
210
+
211
+    @Override
212
+    public boolean isCommandValid() {
213
+        return selectedAlias.isPresent() && !getCommandValidator().validate(name).isFailure();
214
+    }
215
+
216
+    @Override
217
+    public boolean isMinimumArgumentsValid() {
218
+        return selectedAlias.isPresent() && !getMinimumArgumentsValidator().validate(minArgs).
219
+                isFailure();
220
+    }
221
+
222
+    @Override
223
+    public boolean isSubstitutionValid() {
224
+        return selectedAlias.isPresent() && !getSubstitutionValidator().validate(substitution).
225
+                isFailure();
226
+    }
227
+
228
+    @Override
229
+    public Validator<String> getCommandValidator() {
230
+        return ValidatorChain.<String>builder()
231
+                .addValidator(new CommandNameValidator(commandController.getCommandChar()))
232
+                .addValidator(new FileNameValidator())
233
+                .addValidator(new RenameAliasValidator(this))
234
+                .build();
235
+    }
236
+
237
+    @Override
238
+    public Validator<String> getNewCommandValidator() {
239
+        return ValidatorChain.<String>builder()
240
+                .addValidator(new CommandNameValidator(commandController.getCommandChar()))
241
+                .addValidator(new FileNameValidator())
242
+                .addValidator(new NewAliasValidator(this))
243
+                .build();
244
+    }
245
+
246
+    @Override
247
+    public Validator<Integer> getMinimumArgumentsValidator() {
248
+        return new IntegerValidator(0, Integer.MAX_VALUE);
249
+    }
250
+
251
+    @Override
252
+    public Validator<String> getSubstitutionValidator() {
253
+        return new NotEmptyValidator();
254
+    }
255
+
138 256
     @Override
139 257
     public void addListener(final AliasDialogModelListener listener) {
140 258
         checkNotNull(listener, "Listener must not be null");

+ 51
- 0
src/com/dmdirc/commandparser/aliases/NewAliasValidator.java View File

@@ -0,0 +1,51 @@
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.commandparser.aliases;
24
+
25
+import com.dmdirc.interfaces.ui.AliasDialogModel;
26
+import com.dmdirc.util.validators.ValidationResponse;
27
+import com.dmdirc.util.validators.Validator;
28
+
29
+/**
30
+ * Validates an alias name ensuring its uniqueness.
31
+ */
32
+public class NewAliasValidator implements Validator<String> {
33
+
34
+    /** Model to containing aliases to validate. */
35
+    private final AliasDialogModel aliases;
36
+
37
+    public NewAliasValidator(final AliasDialogModel aliases) {
38
+        this.aliases = aliases;
39
+    }
40
+
41
+    @Override
42
+    public ValidationResponse validate(final String object) {
43
+        for (Alias targetAlias : aliases.getAliases()) {
44
+            if (targetAlias.getName().equalsIgnoreCase(object)) {
45
+                return new ValidationResponse("Alias names must be unique");
46
+            }
47
+        }
48
+        return new ValidationResponse();
49
+    }
50
+
51
+}

+ 57
- 0
src/com/dmdirc/commandparser/aliases/RenameAliasValidator.java View File

@@ -0,0 +1,57 @@
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.commandparser.aliases;
24
+
25
+import com.dmdirc.interfaces.ui.AliasDialogModel;
26
+import com.dmdirc.util.validators.ValidationResponse;
27
+import com.dmdirc.util.validators.Validator;
28
+
29
+/**
30
+ * Validates the uniqueness of an alias name, taking into account the selected alias.
31
+ */
32
+public class RenameAliasValidator implements Validator<String> {
33
+
34
+    private final AliasDialogModel model;
35
+
36
+    public RenameAliasValidator(final AliasDialogModel model) {
37
+        this.model = model;
38
+    }
39
+
40
+    @Override
41
+    public ValidationResponse validate(final String object) {
42
+        for (Alias targetAlias : model.getAliases()) {
43
+            if (model.getSelectedAlias().isPresent()) {
44
+                if (targetAlias != model.getSelectedAlias().get()
45
+                        && targetAlias.getName().equalsIgnoreCase(object)) {
46
+                    return new ValidationResponse("Alias names must be unique");
47
+                }
48
+            } else {
49
+                if (targetAlias.getName().equalsIgnoreCase(object)) {
50
+                    return new ValidationResponse("Alias names must be unique");
51
+                }
52
+            }
53
+        }
54
+        return new ValidationResponse();
55
+    }
56
+
57
+}

+ 92
- 0
src/com/dmdirc/interfaces/ui/AliasDialogModel.java View File

@@ -23,6 +23,7 @@
23 23
 package com.dmdirc.interfaces.ui;
24 24
 
25 25
 import com.dmdirc.commandparser.aliases.Alias;
26
+import com.dmdirc.util.validators.Validator;
26 27
 
27 28
 import com.google.common.base.Optional;
28 29
 
@@ -101,6 +102,97 @@ public interface AliasDialogModel {
101 102
      */
102 103
     Optional<Alias> getSelectedAlias();
103 104
 
105
+    /**
106
+     * Gets the name of the selected alias.
107
+     *
108
+     * @return Selected alias name
109
+     */
110
+    String getSelectedAliasName();
111
+
112
+    /**
113
+     * Gets the minimum arguments of the selected alias.
114
+     *
115
+     * @return Selected alias minimum arguments
116
+     */
117
+    int getSelectedAliasMininumArguments();
118
+
119
+    /**
120
+     * Gets the substitution of the selected alias.
121
+     *
122
+     * @return Selected alias substitution
123
+     */
124
+    String getSelectedAliasSubstitution();
125
+
126
+    /**
127
+     * Sets the name of the selected alias.
128
+     *
129
+     * @param aliasName New name
130
+     */
131
+    void setSelectedAliasName(final String aliasName);
132
+
133
+    /**
134
+     * Sets the minimum arguments of the selected alias.
135
+     *
136
+     * @param minArgs New minimum arguments
137
+     */
138
+    void setSelectedAliasMinimumArguments(final int minArgs);
139
+
140
+    /**
141
+     * Sets the substitution of the selected alias.
142
+     *
143
+     * @param substitution New substitution
144
+     */
145
+    void setSelectedAliasSubstitution(final String substitution);
146
+
147
+    /**
148
+     * Tests whether the current command is valid.
149
+     *
150
+     * @return true if valid
151
+     */
152
+    boolean isCommandValid();
153
+
154
+    /**
155
+     * Tests whether the current minimum arguments is valid.
156
+     *
157
+     * @return true if valid
158
+     */
159
+    boolean isMinimumArgumentsValid();
160
+
161
+    /**
162
+     * Tests whether the current substitution is valid.
163
+     *
164
+     * @return true if valid
165
+     */
166
+    boolean isSubstitutionValid();
167
+
168
+    /**
169
+     * Gets a validator for changing the command of an existing alias.
170
+     *
171
+     * @return Command name validator
172
+     */
173
+    Validator<String> getCommandValidator();
174
+
175
+    /**
176
+     * Gets a validator for the command of a new alias.
177
+     *
178
+     * @return Command name validator
179
+     */
180
+    Validator<String> getNewCommandValidator();
181
+
182
+    /**
183
+     * Gets a validator for the minimum arguments of an alias.
184
+     *
185
+     * @return Arguments validator
186
+     */
187
+    Validator<Integer> getMinimumArgumentsValidator();
188
+
189
+    /**
190
+     * Gets a validator for the substitution of an alias.
191
+     *
192
+     * @return Substitution validator
193
+     */
194
+    Validator<String> getSubstitutionValidator();
195
+
104 196
     /**
105 197
      * Adds an alias listener, will be notified of changes to the model.
106 198
      *

+ 6
- 5
src/com/dmdirc/interfaces/ui/AliasDialogModelListener.java View File

@@ -48,17 +48,18 @@ public interface AliasDialogModelListener {
48 48
     /**
49 49
      * An alias has been edited.
50 50
      *
51
-     * @param name Name of the alias that was edited
51
+     * @param oldAlias Old alias
52
+     * @param newAlias New alias
52 53
      */
53
-    void aliasEdited(String name);
54
+    void aliasEdited(Alias oldAlias, Alias newAlias);
54 55
 
55 56
     /**
56 57
      * An alias has been renamed.
57 58
      *
58
-     * @param oldName Old name of the alias
59
-     * @param newName New name of the alias
59
+     * @param oldAlias Old alias
60
+     * @param newAlias New alias
60 61
      */
61
-    void aliasRenamed(String oldName, String newName);
62
+    void aliasRenamed(Alias oldAlias, Alias newAlias);
62 63
 
63 64
     /**
64 65
      * An alias selection has been changed.

+ 86
- 31
test/com/dmdirc/commandparser/aliases/CoreAliasDialogModelTest.java View File

@@ -23,6 +23,7 @@
23 23
 package com.dmdirc.commandparser.aliases;
24 24
 
25 25
 import com.dmdirc.commandparser.CommandType;
26
+import com.dmdirc.interfaces.CommandController;
26 27
 import com.dmdirc.interfaces.ui.AliasDialogModelListener;
27 28
 
28 29
 import com.google.common.base.Optional;
@@ -52,7 +53,9 @@ public class CoreAliasDialogModelTest {
52 53
     @Mock private AliasManager aliasModel;
53 54
     @Mock private AliasFactory aliasFactory;
54 55
     @Mock private AliasDialogModelListener listener;
56
+    @Mock private CommandController commandController;
55 57
     private final Alias alias1 = new Alias(CommandType.TYPE_GLOBAL, "alias1", 0, "");
58
+    private final Alias alias1Edited = new Alias(CommandType.TYPE_GLOBAL, "alias2", 0, "");
56 59
     private final Alias alias2Edited = new Alias(CommandType.TYPE_GLOBAL, "alias1", 1, "");
57 60
     private final Alias alias2 = new Alias(CommandType.TYPE_GLOBAL, "alias2", 0, "");
58 61
     private Set<Alias> aliases;
@@ -60,6 +63,7 @@ public class CoreAliasDialogModelTest {
60 63
     @Before
61 64
     public void setupAliases() {
62 65
         aliases = new HashSet<>();
66
+        when(commandController.getCommandChar()).thenReturn('/');
63 67
     }
64 68
 
65 69
     @Before
@@ -83,7 +87,8 @@ public class CoreAliasDialogModelTest {
83 87
         aliases.add(alias1);
84 88
         aliases.add(alias2);
85 89
         when(aliasModel.getAliases()).thenReturn(aliases);
86
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
90
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
91
+                commandController);
87 92
         assertEquals(model.getAliases().size(), 2);
88 93
     }
89 94
 
@@ -92,8 +97,9 @@ public class CoreAliasDialogModelTest {
92 97
         aliases.add(alias1);
93 98
         aliases.add(alias2);
94 99
         when(aliasModel.getAliases()).thenReturn(aliases);
95
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
96
-        assertEquals(model.getAlias("alias1").get(), alias1);
100
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
101
+                commandController);
102
+        assertEquals(model.getAlias(alias1.getName()).get(), alias1);
97 103
     }
98 104
 
99 105
     @Test
@@ -101,14 +107,16 @@ public class CoreAliasDialogModelTest {
101 107
         aliases.add(alias1);
102 108
         aliases.add(alias2);
103 109
         when(aliasModel.getAliases()).thenReturn(aliases);
104
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
105
-        assertFalse(model.getAlias("alias3").isPresent());
110
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
111
+                commandController);
112
+        assertFalse(model.getAlias("test").isPresent());
106 113
     }
107 114
 
108 115
     @Test
109 116
     public void testAddAlias() {
110 117
         when(aliasModel.getAliases()).thenReturn(aliases);
111
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
118
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
119
+                commandController);
112 120
         assertEquals(model.getAliases().size(), 0);
113 121
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
114 122
         assertEquals(model.getAliases().size(), 1);
@@ -117,7 +125,8 @@ public class CoreAliasDialogModelTest {
117 125
     @Test
118 126
     public void testAddAliasListener() {
119 127
         when(aliasModel.getAliases()).thenReturn(aliases);
120
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
128
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
129
+                commandController);
121 130
         model.addListener(listener);
122 131
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
123 132
         verify(listener).aliasAdded(alias1);
@@ -127,44 +136,50 @@ public class CoreAliasDialogModelTest {
127 136
     public void testEditAlias() {
128 137
         aliases.add(alias1);
129 138
         when(aliasModel.getAliases()).thenReturn(aliases);
130
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
139
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
140
+                commandController);
131 141
         assertEquals(model.getAliases().size(), 1);
132
-        assertEquals(model.getAlias("alias1").get().getMinArguments(), 0);
133
-        model.editAlias("alias1", alias2Edited.getMinArguments(), alias2Edited.getSubstitution());
134
-        assertEquals(model.getAlias("alias1").get().getMinArguments(), 1);
142
+        assertEquals(model.getAlias(alias2Edited.getName()).get().getMinArguments(), 0);
143
+        model.editAlias(alias1.getName(), alias2Edited.getMinArguments(), alias2Edited.
144
+                getSubstitution());
145
+        assertEquals(model.getAlias(alias1.getName()).get().getMinArguments(), 1);
135 146
     }
136 147
 
137 148
     @Test
138 149
     public void testEditAliasListener() {
139 150
         aliases.add(alias1);
140 151
         when(aliasModel.getAliases()).thenReturn(aliases);
141
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
152
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
153
+                commandController);
142 154
         model.addListener(listener);
143
-        model.editAlias("alias1", alias2Edited.getMinArguments(), alias2Edited.getSubstitution());
144
-        verify(listener).aliasEdited("alias1");
155
+        model.editAlias(alias1.getName(), alias2Edited.getMinArguments(), alias2Edited.
156
+                getSubstitution());
157
+        verify(listener).aliasEdited(alias1, alias2Edited);
145 158
     }
146 159
 
147 160
     @Test
148 161
     public void testRenameAlias() {
149 162
         aliases.add(alias1);
150 163
         when(aliasModel.getAliases()).thenReturn(aliases);
151
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
164
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
165
+                commandController);
152 166
         assertEquals(model.getAliases().size(), 1);
153
-        assertEquals(model.getAlias("alias1").get(), alias1);
154
-        model.renameAlias("alias1", "alias2");
155
-        assertEquals(model.getAlias("alias2").get(), alias2);
167
+        assertEquals(model.getAlias(alias1.getName()).get(), alias1);
168
+        model.renameAlias(alias1.getName(), alias1Edited.getName());
169
+        assertEquals(model.getAlias(alias1Edited.getName()).get(), alias2);
156 170
     }
157 171
 
158 172
     @Test
159 173
     public void testRenameAliasListener() {
160 174
         aliases.add(alias1);
161 175
         when(aliasModel.getAliases()).thenReturn(aliases);
162
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
176
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
177
+                commandController);
163 178
         model.addListener(listener);
164 179
         assertEquals(model.getAliases().size(), 1);
165
-        assertEquals(model.getAlias("alias1").get(), alias1);
166
-        model.renameAlias("alias1", "alias2");
167
-        verify(listener).aliasRenamed("alias1", "alias2");
180
+        assertEquals(model.getAlias(alias1.getName()).get(), alias1);
181
+        model.renameAlias(alias1.getName(), alias1Edited.getName());
182
+        verify(listener).aliasRenamed(alias1, alias1Edited);
168 183
     }
169 184
 
170 185
     @Test
@@ -172,11 +187,12 @@ public class CoreAliasDialogModelTest {
172 187
         aliases.add(alias1);
173 188
         aliases.add(alias2);
174 189
         when(aliasModel.getAliases()).thenReturn(aliases);
175
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
190
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
191
+                commandController);
176 192
         assertEquals(model.getAliases().size(), 2);
177
-        model.removeAlias("alias1");
193
+        model.removeAlias(alias1.getName());
178 194
         assertEquals(model.getAliases().size(), 1);
179
-        assertFalse(model.getAlias("alias1").isPresent());
195
+        assertFalse(model.getAlias(alias1.getName()).isPresent());
180 196
     }
181 197
 
182 198
     @Test
@@ -184,9 +200,10 @@ public class CoreAliasDialogModelTest {
184 200
         aliases.add(alias1);
185 201
         aliases.add(alias2);
186 202
         when(aliasModel.getAliases()).thenReturn(aliases);
187
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
203
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
204
+                commandController);
188 205
         model.addListener(listener);
189
-        model.removeAlias("alias1");
206
+        model.removeAlias(alias1.getName());
190 207
         verify(listener).aliasRemoved(alias1);
191 208
     }
192 209
 
@@ -195,7 +212,8 @@ public class CoreAliasDialogModelTest {
195 212
         aliases.add(alias1);
196 213
         aliases.add(alias2);
197 214
         when(aliasModel.getAliases()).thenReturn(aliases);
198
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
215
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
216
+                commandController);
199 217
         assertEquals(model.getAliases().size(), 2);
200 218
         assertFalse(model.getSelectedAlias().isPresent());
201 219
     }
@@ -205,7 +223,8 @@ public class CoreAliasDialogModelTest {
205 223
         aliases.add(alias1);
206 224
         aliases.add(alias2);
207 225
         when(aliasModel.getAliases()).thenReturn(aliases);
208
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
226
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
227
+                commandController);
209 228
         assertEquals(model.getAliases().size(), 2);
210 229
         assertFalse(model.getSelectedAlias().isPresent());
211 230
         model.setSelectedAlias(Optional.fromNullable(alias2));
@@ -217,7 +236,8 @@ public class CoreAliasDialogModelTest {
217 236
         aliases.add(alias1);
218 237
         aliases.add(alias2);
219 238
         when(aliasModel.getAliases()).thenReturn(aliases);
220
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
239
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
240
+                commandController);
221 241
         assertEquals(model.getAliases().size(), 2);
222 242
         assertFalse(model.getSelectedAlias().isPresent());
223 243
         model.setSelectedAlias(Optional.fromNullable(alias2));
@@ -229,7 +249,8 @@ public class CoreAliasDialogModelTest {
229 249
     @Test
230 250
     public void testRemoveListener() {
231 251
         when(aliasModel.getAliases()).thenReturn(aliases);
232
-        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory);
252
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
253
+                commandController);
233 254
         model.addListener(listener);
234 255
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
235 256
         model.removeListener(listener);
@@ -238,4 +259,38 @@ public class CoreAliasDialogModelTest {
238 259
         verify(listener, never()).aliasAdded(alias2);
239 260
     }
240 261
 
262
+    @Test
263
+    public void testRenameSelectedAlias() {
264
+        aliases.add(alias1);
265
+        when(aliasModel.getAliases()).thenReturn(aliases);
266
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
267
+                commandController);
268
+        assertEquals(model.getAliases().size(), 1);
269
+        assertEquals(model.getAlias(alias1.getName()).get(), alias1);
270
+        model.setSelectedAlias(Optional.fromNullable(alias1));
271
+        model.setSelectedAliasName(alias1Edited.getName());
272
+        model.setSelectedAliasMinimumArguments(alias1Edited.getMinArguments());
273
+        model.setSelectedAliasSubstitution(alias1Edited.getSubstitution());
274
+        model.setSelectedAlias(Optional.<Alias>absent());
275
+        assertEquals(model.getAlias(alias1Edited.getName()).get(), alias2);
276
+    }
277
+
278
+    @Test
279
+    public void testEditSelectedAlias() {
280
+        aliases.add(alias1);
281
+        when(aliasModel.getAliases()).thenReturn(aliases);
282
+        final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
283
+                commandController);
284
+        assertEquals(model.getAliases().size(), 1);
285
+        assertEquals(model.getAlias(alias1.getName()).get(), alias1);
286
+        model.setSelectedAlias(Optional.fromNullable(alias1));
287
+        model.setSelectedAliasMinimumArguments(alias2Edited.getMinArguments());
288
+        model.setSelectedAliasSubstitution(alias2Edited.getSubstitution());
289
+        model.setSelectedAlias(Optional.<Alias>absent());
290
+        final Alias alias = model.getAlias(alias1.getName()).get();
291
+        assertEquals(alias.getName(), alias2Edited.getName());
292
+        assertEquals(alias.getMinArguments(), alias2Edited.getMinArguments());
293
+        assertEquals(alias.getSubstitution(), alias2Edited.getSubstitution());
294
+    }
295
+
241 296
 }

+ 65
- 0
test/com/dmdirc/commandparser/aliases/NewAliasValidatorTest.java View File

@@ -0,0 +1,65 @@
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.commandparser.aliases;
24
+
25
+import com.dmdirc.interfaces.ui.AliasDialogModel;
26
+
27
+import org.junit.Before;
28
+import org.junit.Test;
29
+import org.junit.runner.RunWith;
30
+import org.mockito.Mock;
31
+import org.mockito.runners.MockitoJUnitRunner;
32
+
33
+import clover.com.google.common.collect.Lists;
34
+
35
+import static org.junit.Assert.assertFalse;
36
+import static org.junit.Assert.assertTrue;
37
+import static org.mockito.Mockito.when;
38
+
39
+@RunWith(MockitoJUnitRunner.class)
40
+public class NewAliasValidatorTest {
41
+
42
+    @Mock private AliasDialogModel model;
43
+    @Mock private Alias alias1;
44
+    @Mock private Alias alias2;
45
+
46
+    @Before
47
+    public void setupModel() {
48
+        when(model.getAliases()).thenReturn(Lists.newArrayList(alias1, alias2));
49
+        when(alias1.getName()).thenReturn("alias1");
50
+        when(alias2.getName()).thenReturn("alias2");
51
+    }
52
+
53
+    @Test
54
+    public void testDuplicateName() {
55
+        final NewAliasValidator instance = new NewAliasValidator(model);
56
+        assertTrue(instance.validate("alias1").isFailure());
57
+    }
58
+
59
+    @Test
60
+    public void testUniqueName() {
61
+        final NewAliasValidator instance = new NewAliasValidator(model);
62
+        assertFalse(instance.validate("alias3").isFailure());
63
+    }
64
+
65
+}

+ 76
- 0
test/com/dmdirc/commandparser/aliases/RenameAliasValidatorTest.java View File

@@ -0,0 +1,76 @@
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.commandparser.aliases;
24
+
25
+import com.dmdirc.interfaces.ui.AliasDialogModel;
26
+
27
+import com.google.common.base.Optional;
28
+
29
+import org.junit.Before;
30
+import org.junit.Test;
31
+import org.junit.runner.RunWith;
32
+import org.mockito.Mock;
33
+import org.mockito.runners.MockitoJUnitRunner;
34
+
35
+import clover.com.google.common.collect.Lists;
36
+
37
+import static org.junit.Assert.assertFalse;
38
+import static org.junit.Assert.assertTrue;
39
+import static org.mockito.Mockito.when;
40
+
41
+@RunWith(MockitoJUnitRunner.class)
42
+public class RenameAliasValidatorTest {
43
+
44
+    @Mock private AliasDialogModel model;
45
+    @Mock private Alias alias1;
46
+    @Mock private Alias alias2;
47
+
48
+    @Before
49
+    public void setupModel() {
50
+        when(alias1.getName()).thenReturn("alias1");
51
+        when(alias2.getName()).thenReturn("alias2");
52
+        when(model.getAliases()).thenReturn(Lists.newArrayList(alias1, alias2));
53
+    }
54
+
55
+    @Test
56
+    public void testRenameSelected() {
57
+        when(model.getSelectedAlias()).thenReturn(Optional.fromNullable(alias1));
58
+        when(model.getSelectedAliasName()).thenReturn("alias1");
59
+        final RenameAliasValidator instance = new RenameAliasValidator(model);
60
+        assertFalse(instance.validate("alias1").isFailure());
61
+        assertTrue(instance.validate("alias2").isFailure());
62
+        assertFalse(instance.validate("test").isFailure());
63
+
64
+    }
65
+
66
+    @Test
67
+    public void testRenameNonSelected() {
68
+        when(model.getSelectedAlias()).thenReturn(Optional.<Alias>absent());
69
+        when(model.getSelectedAliasName()).thenReturn(null);
70
+        final RenameAliasValidator instance = new RenameAliasValidator(model);
71
+        assertTrue(instance.validate("alias1").isFailure());
72
+        assertTrue(instance.validate("alias2").isFailure());
73
+        assertFalse(instance.validate("test").isFailure());
74
+    }
75
+
76
+}

Loading…
Cancel
Save