Przeglądaj źródła

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 lat temu
rodzic
commit
70c1e29036

+ 127
- 9
src/com/dmdirc/commandparser/aliases/CoreAliasDialogModel.java Wyświetl plik

22
 
22
 
23
 package com.dmdirc.commandparser.aliases;
23
 package com.dmdirc.commandparser.aliases;
24
 
24
 
25
+import com.dmdirc.commandparser.validators.CommandNameValidator;
26
+import com.dmdirc.interfaces.CommandController;
25
 import com.dmdirc.interfaces.ui.AliasDialogModel;
27
 import com.dmdirc.interfaces.ui.AliasDialogModel;
26
 import com.dmdirc.interfaces.ui.AliasDialogModelListener;
28
 import com.dmdirc.interfaces.ui.AliasDialogModelListener;
27
 import com.dmdirc.util.collections.ListenerList;
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
 import com.google.common.base.Optional;
36
 import com.google.common.base.Optional;
30
 
37
 
43
  */
50
  */
44
 public class CoreAliasDialogModel implements AliasDialogModel {
51
 public class CoreAliasDialogModel implements AliasDialogModel {
45
 
52
 
53
+    private final CommandController commandController;
46
     private final AliasManager aliasManager;
54
     private final AliasManager aliasManager;
47
     private final AliasFactory factory;
55
     private final AliasFactory factory;
48
     private final ListenerList listeners;
56
     private final ListenerList listeners;
49
     private final Map<String, Alias> aliases;
57
     private final Map<String, Alias> aliases;
50
     private Optional<Alias> selectedAlias;
58
     private Optional<Alias> selectedAlias;
59
+    private String name;
60
+    private int minArgs;
61
+    private String substitution;
51
 
62
 
52
     @Inject
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
         this.aliasManager = aliasManager;
67
         this.aliasManager = aliasManager;
55
         this.factory = factory;
68
         this.factory = factory;
56
         listeners = new ListenerList();
69
         listeners = new ListenerList();
85
     public void editAlias(final String name, final int minArguments, final String substitution) {
98
     public void editAlias(final String name, final int minArguments, final String substitution) {
86
         checkNotNull(name, "Name cannot be null");
99
         checkNotNull(name, "Name cannot be null");
87
         checkArgument(aliases.containsKey(name), "Name must already exist");
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
     @Override
106
     @Override
94
     public void renameAlias(final String oldName, final String newName) {
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
         checkNotNull(oldName, "Oldname cannot be null");
112
         checkNotNull(oldName, "Oldname cannot be null");
96
         checkNotNull(newName, "Newname cannot be null");
113
         checkNotNull(newName, "Newname cannot be null");
97
         checkArgument(aliases.containsKey(oldName), "Old name must exist");
114
         checkArgument(aliases.containsKey(oldName), "Old name must exist");
98
         checkArgument(!aliases.containsKey(newName), "New name must not exist");
115
         checkArgument(!aliases.containsKey(newName), "New name must not exist");
99
         final Alias alias = aliases.get(oldName);
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
     @Override
127
     @Override
111
         }
132
         }
112
         final Alias alias = aliases.get(name);
133
         final Alias alias = aliases.get(name);
113
         aliases.remove(name);
134
         aliases.remove(name);
135
+        if (getSelectedAlias().isPresent() && getSelectedAlias().get().equals(alias)) {
136
+            setSelectedAlias(Optional.<Alias>absent());
137
+        }
114
         listeners.getCallable(AliasDialogModelListener.class).aliasRemoved(alias);
138
         listeners.getCallable(AliasDialogModelListener.class).aliasRemoved(alias);
115
     }
139
     }
116
 
140
 
117
     @Override
141
     @Override
118
     public void save() {
142
     public void save() {
143
+        setSelectedAlias(Optional.<Alias>absent());
119
         for (Alias alias : aliasManager.getAliases()) {
144
         for (Alias alias : aliasManager.getAliases()) {
120
-                aliasManager.removeAlias(alias);
145
+            aliasManager.removeAlias(alias);
121
         }
146
         }
122
         for (Alias alias : aliases.values()) {
147
         for (Alias alias : aliases.values()) {
123
             aliasManager.addAlias(alias);
148
             aliasManager.addAlias(alias);
126
 
151
 
127
     @Override
152
     @Override
128
     public void setSelectedAlias(final Optional<Alias> alias) {
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
         selectedAlias = alias;
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
         listeners.getCallable(AliasDialogModelListener.class).aliasSelectionChanged(selectedAlias);
173
         listeners.getCallable(AliasDialogModelListener.class).aliasSelectionChanged(selectedAlias);
131
     }
174
     }
132
 
175
 
135
         return selectedAlias;
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
     @Override
256
     @Override
139
     public void addListener(final AliasDialogModelListener listener) {
257
     public void addListener(final AliasDialogModelListener listener) {
140
         checkNotNull(listener, "Listener must not be null");
258
         checkNotNull(listener, "Listener must not be null");

+ 51
- 0
src/com/dmdirc/commandparser/aliases/NewAliasValidator.java Wyświetl plik

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 Wyświetl plik

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 Wyświetl plik

23
 package com.dmdirc.interfaces.ui;
23
 package com.dmdirc.interfaces.ui;
24
 
24
 
25
 import com.dmdirc.commandparser.aliases.Alias;
25
 import com.dmdirc.commandparser.aliases.Alias;
26
+import com.dmdirc.util.validators.Validator;
26
 
27
 
27
 import com.google.common.base.Optional;
28
 import com.google.common.base.Optional;
28
 
29
 
101
      */
102
      */
102
     Optional<Alias> getSelectedAlias();
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
      * Adds an alias listener, will be notified of changes to the model.
197
      * Adds an alias listener, will be notified of changes to the model.
106
      *
198
      *

+ 6
- 5
src/com/dmdirc/interfaces/ui/AliasDialogModelListener.java Wyświetl plik

48
     /**
48
     /**
49
      * An alias has been edited.
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
      * An alias has been renamed.
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
      * An alias selection has been changed.
65
      * An alias selection has been changed.

+ 86
- 31
test/com/dmdirc/commandparser/aliases/CoreAliasDialogModelTest.java Wyświetl plik

23
 package com.dmdirc.commandparser.aliases;
23
 package com.dmdirc.commandparser.aliases;
24
 
24
 
25
 import com.dmdirc.commandparser.CommandType;
25
 import com.dmdirc.commandparser.CommandType;
26
+import com.dmdirc.interfaces.CommandController;
26
 import com.dmdirc.interfaces.ui.AliasDialogModelListener;
27
 import com.dmdirc.interfaces.ui.AliasDialogModelListener;
27
 
28
 
28
 import com.google.common.base.Optional;
29
 import com.google.common.base.Optional;
52
     @Mock private AliasManager aliasModel;
53
     @Mock private AliasManager aliasModel;
53
     @Mock private AliasFactory aliasFactory;
54
     @Mock private AliasFactory aliasFactory;
54
     @Mock private AliasDialogModelListener listener;
55
     @Mock private AliasDialogModelListener listener;
56
+    @Mock private CommandController commandController;
55
     private final Alias alias1 = new Alias(CommandType.TYPE_GLOBAL, "alias1", 0, "");
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
     private final Alias alias2Edited = new Alias(CommandType.TYPE_GLOBAL, "alias1", 1, "");
59
     private final Alias alias2Edited = new Alias(CommandType.TYPE_GLOBAL, "alias1", 1, "");
57
     private final Alias alias2 = new Alias(CommandType.TYPE_GLOBAL, "alias2", 0, "");
60
     private final Alias alias2 = new Alias(CommandType.TYPE_GLOBAL, "alias2", 0, "");
58
     private Set<Alias> aliases;
61
     private Set<Alias> aliases;
60
     @Before
63
     @Before
61
     public void setupAliases() {
64
     public void setupAliases() {
62
         aliases = new HashSet<>();
65
         aliases = new HashSet<>();
66
+        when(commandController.getCommandChar()).thenReturn('/');
63
     }
67
     }
64
 
68
 
65
     @Before
69
     @Before
83
         aliases.add(alias1);
87
         aliases.add(alias1);
84
         aliases.add(alias2);
88
         aliases.add(alias2);
85
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 2);
92
         assertEquals(model.getAliases().size(), 2);
88
     }
93
     }
89
 
94
 
92
         aliases.add(alias1);
97
         aliases.add(alias1);
93
         aliases.add(alias2);
98
         aliases.add(alias2);
94
         when(aliasModel.getAliases()).thenReturn(aliases);
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
     @Test
105
     @Test
101
         aliases.add(alias1);
107
         aliases.add(alias1);
102
         aliases.add(alias2);
108
         aliases.add(alias2);
103
         when(aliasModel.getAliases()).thenReturn(aliases);
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
     @Test
115
     @Test
109
     public void testAddAlias() {
116
     public void testAddAlias() {
110
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 0);
120
         assertEquals(model.getAliases().size(), 0);
113
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
121
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
114
         assertEquals(model.getAliases().size(), 1);
122
         assertEquals(model.getAliases().size(), 1);
117
     @Test
125
     @Test
118
     public void testAddAliasListener() {
126
     public void testAddAliasListener() {
119
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         model.addListener(listener);
130
         model.addListener(listener);
122
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
131
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
123
         verify(listener).aliasAdded(alias1);
132
         verify(listener).aliasAdded(alias1);
127
     public void testEditAlias() {
136
     public void testEditAlias() {
128
         aliases.add(alias1);
137
         aliases.add(alias1);
129
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 1);
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
     @Test
148
     @Test
138
     public void testEditAliasListener() {
149
     public void testEditAliasListener() {
139
         aliases.add(alias1);
150
         aliases.add(alias1);
140
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         model.addListener(listener);
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
     @Test
160
     @Test
148
     public void testRenameAlias() {
161
     public void testRenameAlias() {
149
         aliases.add(alias1);
162
         aliases.add(alias1);
150
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 1);
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
     @Test
172
     @Test
159
     public void testRenameAliasListener() {
173
     public void testRenameAliasListener() {
160
         aliases.add(alias1);
174
         aliases.add(alias1);
161
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         model.addListener(listener);
178
         model.addListener(listener);
164
         assertEquals(model.getAliases().size(), 1);
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
     @Test
185
     @Test
172
         aliases.add(alias1);
187
         aliases.add(alias1);
173
         aliases.add(alias2);
188
         aliases.add(alias2);
174
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 2);
192
         assertEquals(model.getAliases().size(), 2);
177
-        model.removeAlias("alias1");
193
+        model.removeAlias(alias1.getName());
178
         assertEquals(model.getAliases().size(), 1);
194
         assertEquals(model.getAliases().size(), 1);
179
-        assertFalse(model.getAlias("alias1").isPresent());
195
+        assertFalse(model.getAlias(alias1.getName()).isPresent());
180
     }
196
     }
181
 
197
 
182
     @Test
198
     @Test
184
         aliases.add(alias1);
200
         aliases.add(alias1);
185
         aliases.add(alias2);
201
         aliases.add(alias2);
186
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         model.addListener(listener);
205
         model.addListener(listener);
189
-        model.removeAlias("alias1");
206
+        model.removeAlias(alias1.getName());
190
         verify(listener).aliasRemoved(alias1);
207
         verify(listener).aliasRemoved(alias1);
191
     }
208
     }
192
 
209
 
195
         aliases.add(alias1);
212
         aliases.add(alias1);
196
         aliases.add(alias2);
213
         aliases.add(alias2);
197
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 2);
217
         assertEquals(model.getAliases().size(), 2);
200
         assertFalse(model.getSelectedAlias().isPresent());
218
         assertFalse(model.getSelectedAlias().isPresent());
201
     }
219
     }
205
         aliases.add(alias1);
223
         aliases.add(alias1);
206
         aliases.add(alias2);
224
         aliases.add(alias2);
207
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 2);
228
         assertEquals(model.getAliases().size(), 2);
210
         assertFalse(model.getSelectedAlias().isPresent());
229
         assertFalse(model.getSelectedAlias().isPresent());
211
         model.setSelectedAlias(Optional.fromNullable(alias2));
230
         model.setSelectedAlias(Optional.fromNullable(alias2));
217
         aliases.add(alias1);
236
         aliases.add(alias1);
218
         aliases.add(alias2);
237
         aliases.add(alias2);
219
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         assertEquals(model.getAliases().size(), 2);
241
         assertEquals(model.getAliases().size(), 2);
222
         assertFalse(model.getSelectedAlias().isPresent());
242
         assertFalse(model.getSelectedAlias().isPresent());
223
         model.setSelectedAlias(Optional.fromNullable(alias2));
243
         model.setSelectedAlias(Optional.fromNullable(alias2));
229
     @Test
249
     @Test
230
     public void testRemoveListener() {
250
     public void testRemoveListener() {
231
         when(aliasModel.getAliases()).thenReturn(aliases);
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
         model.addListener(listener);
254
         model.addListener(listener);
234
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
255
         model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
235
         model.removeListener(listener);
256
         model.removeListener(listener);
238
         verify(listener, never()).aliasAdded(alias2);
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 Wyświetl plik

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 Wyświetl plik

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
+}

Ładowanie…
Anuluj
Zapisz