001    /*
002     * Copyright 2002-2004 the original author or authors.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.application.config;
017    
018    import java.awt.Color;
019    import java.awt.Image;
020    import java.awt.image.BufferedImage;
021    import java.util.Locale;
022    
023    import javax.swing.Icon;
024    import javax.swing.ImageIcon;
025    
026    import junit.framework.Assert;
027    import junit.framework.TestCase;
028    
029    import org.easymock.EasyMock;
030    import org.springframework.context.MessageSource;
031    import org.springframework.richclient.command.config.CommandButtonIconInfo;
032    import org.springframework.richclient.command.config.CommandButtonLabelInfo;
033    import org.springframework.richclient.command.config.CommandIconConfigurable;
034    import org.springframework.richclient.command.config.CommandLabelConfigurable;
035    import org.springframework.richclient.core.DescriptionConfigurable;
036    import org.springframework.richclient.core.LabelConfigurable;
037    import org.springframework.richclient.core.LabelInfo;
038    import org.springframework.richclient.core.SecurityControllable;
039    import org.springframework.richclient.core.TitleConfigurable;
040    import org.springframework.richclient.image.IconSource;
041    import org.springframework.richclient.image.ImageSource;
042    import org.springframework.richclient.image.config.IconConfigurable;
043    import org.springframework.richclient.image.config.ImageConfigurable;
044    import org.springframework.richclient.security.SecurityController;
045    import org.springframework.richclient.security.SecurityControllerManager;
046    import org.springframework.richclient.test.TestIcon;
047    
048    /**
049     * Provides a suite of unit tests for the
050     * {@link DefaultApplicationObjectConfigurer} class.
051     * 
052     * @author Kevin Stembridge
053     * @since 0.3
054     * 
055     */
056    public class DefaultApplicationObjectConfigurerTests extends TestCase {
057    
058            /**
059             * Creates a new {@code DefaultApplicationObjectConfigurerTests}.
060             */
061            public DefaultApplicationObjectConfigurerTests() {
062                    super();
063            }
064    
065            /**
066             * Confirms that an IllegalArgumentException is thrown if the object to be
067             * configured is not null but the object name is null.
068             */
069            public void testForNullInputToConfigureMethod() {
070    
071                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer();
072    
073                    // should succeed
074                    configurer.configure(null, "bogus");
075    
076                    try {
077                            configurer.configure("bogus", null);
078                            Assert.fail("Should have thrown an IllegalArgumentException for null object name");
079                    }
080                    catch (IllegalArgumentException e) {
081                            // do nothing, test succeeded
082                    }
083    
084            }
085    
086            /**
087             * Confirms that a {@link TitleConfigurable} object will have its title set
088             * correctly, as retrieved from a MessageSource using the key
089             * 'beanName.title'.
090             */
091            public void testConfigureTitleConfigurable() {
092                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
093    
094                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
095    
096                    String objectName = "bogusTitleable";
097                    String messageCode = objectName + ".title";
098                    String message = "bogusTitle";
099    
100                    EasyMock.expect(messageSource.getMessage(messageCode, null, Locale.getDefault())).andReturn(message);
101    
102                    TitleConfigurable configurable = (TitleConfigurable) EasyMock.createMock(TitleConfigurable.class);
103                    configurable.setTitle(message);
104    
105                    EasyMock.replay(messageSource);
106                    EasyMock.replay(configurable);
107    
108                    configurer.configure(configurable, objectName);
109    
110                    EasyMock.verify(messageSource);
111                    EasyMock.verify(configurable);
112            }
113    
114            public void testConfigureTitleConfigurableWithNoTitleFound() {
115                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
116    
117                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
118    
119                    String objectName = "bogusTitleable";
120                    String messageCode = objectName + ".title";
121    
122                    EasyMock.expect(messageSource.getMessage(messageCode, null, Locale.getDefault())).andReturn(null);
123    
124                    TitleConfigurable configurable = (TitleConfigurable) EasyMock.createMock(TitleConfigurable.class);
125    
126                    EasyMock.replay(messageSource);
127                    EasyMock.replay(configurable);
128    
129                    configurer.configure(configurable, objectName);
130    
131                    EasyMock.verify(messageSource);
132                    EasyMock.verify(configurable);
133            }
134    
135            /**
136             * Confirms that a {@link DescriptionConfigurable} object will have its
137             * description and caption set correctly, as retrieved from a MessageSource
138             * using the key 'beanName.description' and 'beanName.caption' respectively.
139             */
140            public void testDescriptionConfigurable() {
141                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
142    
143                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
144    
145                    String objectName = "bogusDescriptionConfigurable";
146                    String descriptionCode = objectName + ".description";
147                    String captionCode = objectName + ".caption";
148                    String description = "bogusDescription";
149                    String caption = "bogusCaption";
150    
151                    EasyMock.expect(messageSource.getMessage(descriptionCode, null, Locale.getDefault())).andReturn(description);
152                    EasyMock.expect(messageSource.getMessage(captionCode, null, Locale.getDefault())).andReturn(caption);
153    
154                    DescriptionConfigurable configurable = (DescriptionConfigurable) EasyMock
155                                    .createMock(DescriptionConfigurable.class);
156                    configurable.setDescription(description);
157                    configurable.setCaption(caption);
158    
159                    EasyMock.replay(messageSource);
160                    EasyMock.replay(configurable);
161    
162                    configurer.configure(configurable, objectName);
163    
164                    EasyMock.verify(messageSource);
165                    EasyMock.verify(configurable);
166            }
167    
168            public void testDescriptionConfigurableWithNoDescriptionFound() {
169                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
170    
171                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
172    
173                    String objectName = "bogusDescriptionConfigurable";
174                    String descriptionCode = objectName + ".description";
175                    String captionCode = objectName + ".caption";
176    
177                    EasyMock.expect(messageSource.getMessage(descriptionCode, null, Locale.getDefault())).andReturn(null);
178                    EasyMock.expect(messageSource.getMessage(captionCode, null, Locale.getDefault())).andReturn(null);
179    
180                    DescriptionConfigurable configurable = (DescriptionConfigurable) EasyMock
181                                    .createMock(DescriptionConfigurable.class);
182    
183                    EasyMock.replay(messageSource);
184                    EasyMock.replay(configurable);
185    
186                    configurer.configure(configurable, objectName);
187    
188                    EasyMock.verify(messageSource);
189                    EasyMock.verify(configurable);
190            }
191    
192            /**
193             * Confirms that a {@link LabelConfigurable} object will have its label set
194             * correctly, as retrieved from a MessageSource using the key
195             * 'beanName.label'.
196             */
197            public void testLabelConfigurable() {
198                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
199    
200                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
201    
202                    String objectName = "bogusLabelable";
203                    String messageCode = objectName + ".label";
204                    String message = "bogusLabelInfo";
205                    LabelInfo expectedLabelInfo = LabelInfo.valueOf(message);
206    
207                    EasyMock.expect(messageSource.getMessage(messageCode, null, Locale.getDefault())).andReturn(message);
208    
209                    LabelConfigurable configurable = (LabelConfigurable) EasyMock.createMock(LabelConfigurable.class);
210                    configurable.setLabelInfo(expectedLabelInfo);
211    
212                    EasyMock.replay(messageSource);
213                    EasyMock.replay(configurable);
214    
215                    configurer.configure(configurable, objectName);
216    
217                    EasyMock.verify(messageSource);
218                    EasyMock.verify(configurable);
219    
220            }
221    
222            public void testLabelConfigurableWithNoLabelFound() {
223                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
224    
225                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
226    
227                    String objectName = "bogusLabelable";
228                    String messageCode = objectName + ".label";
229    
230                    EasyMock.expect(messageSource.getMessage(messageCode, null, Locale.getDefault())).andReturn(null);
231    
232                    LabelConfigurable configurable = (LabelConfigurable) EasyMock.createMock(LabelConfigurable.class);
233    
234                    EasyMock.replay(messageSource);
235                    EasyMock.replay(configurable);
236    
237                    configurer.configure(configurable, objectName);
238    
239                    EasyMock.verify(messageSource);
240                    EasyMock.verify(configurable);
241            }
242    
243            /**
244             * Confirms that a {@link CommandLabelConfigurable} object will have its
245             * label set correctly, as retrieved from a MessageSource using the key
246             * 'beanName.label'.
247             */
248            public void testCommandLabelConfigurable() {
249                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
250    
251                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
252    
253                    String objectName = "bogusLabelable";
254                    String messageCode = objectName + ".label";
255                    String message = "bogusLabelInfo";
256                    CommandButtonLabelInfo expectedLabelInfo = CommandButtonLabelInfo.valueOf(message);
257    
258                    EasyMock.expect(messageSource.getMessage(messageCode, null, Locale.getDefault())).andReturn(message);
259    
260                    CommandLabelConfigurable configurable = (CommandLabelConfigurable) EasyMock
261                                    .createMock(CommandLabelConfigurable.class);
262                    configurable.setLabelInfo(expectedLabelInfo);
263    
264                    EasyMock.replay(messageSource);
265                    EasyMock.replay(configurable);
266    
267                    configurer.configure(configurable, objectName);
268    
269                    EasyMock.verify(messageSource);
270                    EasyMock.verify(configurable);
271    
272            }
273    
274            public void testCommandLabelConfigurableWithNoLabelFound() {
275                    MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
276    
277                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
278    
279                    String objectName = "bogusLabelable";
280                    String messageCode = objectName + ".label";
281    
282                    EasyMock.expect(messageSource.getMessage(messageCode, null, Locale.getDefault())).andReturn(null);
283    
284                    CommandLabelConfigurable configurable = (CommandLabelConfigurable) EasyMock
285                                    .createMock(CommandLabelConfigurable.class);
286    
287                    EasyMock.replay(messageSource);
288                    EasyMock.replay(configurable);
289    
290                    configurer.configure(configurable, objectName);
291    
292                    EasyMock.verify(messageSource);
293                    EasyMock.verify(configurable);
294    
295            }
296    
297            /**
298             * Confirms that a {@link IconConfigurable} object will have its icon set
299             * correctly, if the icon source can find it using the key
300             * 'objectName.icon'.
301             */
302            public void testConfigureIconConfigurable() {
303                    String objectName = "bogusIconConfigurable";
304                    String iconKey = objectName + ".icon";
305                    Icon expectedIcon = new TestIcon(Color.GREEN);
306    
307                    // Create the required mock objects
308                    IconSource iconSource = (IconSource) EasyMock.createMock(IconSource.class);
309                    IconConfigurable configurable = (IconConfigurable) EasyMock.createMock(IconConfigurable.class);
310    
311                    // Create the configurer with the mock icon source
312                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, null, iconSource,
313                                    null);
314    
315                    // Set the expectations for the mock objects. For the first run, we
316                    // don't want the icon
317                    // source to be able to find the icon, so setIcon should be called with
318                    // a null value.
319                    EasyMock.expect(iconSource.getIcon(iconKey)).andReturn(expectedIcon);
320                    configurable.setIcon(expectedIcon);
321    
322                    EasyMock.replay(iconSource);
323                    EasyMock.replay(configurable);
324    
325                    configurer.configure(configurable, objectName);
326    
327                    EasyMock.verify(iconSource);
328                    EasyMock.verify(configurable);
329            }
330    
331            public void testConfigureIconConfigurableWithNoIconFound() {
332                    String objectName = "undefinedIconConfigurable";
333                    String iconKey = objectName + ".icon";
334    
335                    // Create the required mock objects
336                    IconSource iconSource = (IconSource) EasyMock.createMock(IconSource.class);
337                    IconConfigurable configurable = (IconConfigurable) EasyMock.createMock(IconConfigurable.class);
338    
339                    // Create the configurer with the mock icon source
340                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, null, iconSource,
341                                    null);
342    
343                    // Set the expectations for the mock objects. For the first run, we
344                    // don't want the icon
345                    // source to be able to find the icon, so setIcon should be called with
346                    // a null value.
347                    EasyMock.expect(iconSource.getIcon(iconKey)).andReturn(null);
348    
349                    EasyMock.replay(iconSource);
350                    EasyMock.replay(configurable);
351    
352                    configurer.configure(configurable, objectName);
353    
354                    EasyMock.verify(iconSource);
355                    EasyMock.verify(configurable);
356            }
357    
358            /**
359             * Confirms that a {@link CommandIconConfigurable} object will have its
360             * icons set correctly.
361             */
362            public void testCommandIconConfigurable() {
363    
364                    String objectName = "bogusCommandIconConfigurable";
365                    String iconKey = objectName + ".icon";
366                    String disabledIconKey = objectName + ".disabledIcon";
367                    String selectedIconKey = objectName + ".selectedIcon";
368                    String rolloverIconKey = objectName + ".rolloverIcon";
369                    String pressedIconKey = objectName + ".pressedIcon";
370                    String largeIconKey = objectName + ".large.icon";
371                    String disabledLargeIconKey = objectName + ".large.disabledIcon";
372                    String selectedLargeIconKey = objectName + ".large.selectedIcon";
373                    String rolloverLargeIconKey = objectName + ".large.rolloverIcon";
374                    String pressedLargeIconKey = objectName + ".large.pressedIcon";
375    
376                    Icon expectedIcon = new ImageIcon();
377                    Icon expectedSelectedIcon = new ImageIcon();
378                    Icon expectedRolloverIcon = new ImageIcon();
379                    Icon expectedDisabledIcon = new ImageIcon();
380                    Icon expectedPressedIcon = new ImageIcon();
381    
382                    Icon expectedLargeIcon = new ImageIcon();
383                    Icon expectedSelectedLargeIcon = new ImageIcon();
384                    Icon expectedRolloverLargeIcon = new ImageIcon();
385                    Icon expectedDisabledLargeIcon = new ImageIcon();
386                    Icon expectedPressedLargeIcon = new ImageIcon();
387    
388                    CommandButtonIconInfo expectedIconInfo = new CommandButtonIconInfo(expectedIcon, expectedSelectedIcon,
389                                    expectedRolloverIcon, expectedDisabledIcon, expectedPressedIcon);
390    
391                    CommandButtonIconInfo expectedLargeIconInfo = new CommandButtonIconInfo(expectedLargeIcon,
392                                    expectedSelectedLargeIcon, expectedRolloverLargeIcon, expectedDisabledLargeIcon,
393                                    expectedPressedLargeIcon);
394    
395                    // Create the required mock objects
396                    IconSource iconSource = (IconSource) EasyMock.createMock(IconSource.class);
397                    CommandIconConfigurable configurable = (CommandIconConfigurable) EasyMock
398                                    .createMock(CommandIconConfigurable.class);
399    
400                    // Create the configurer with the mock icon source
401                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, null, iconSource,
402                                    null);
403    
404                    EasyMock.expect(iconSource.getIcon(iconKey)).andReturn(expectedIcon);
405                    EasyMock.expect(iconSource.getIcon(disabledIconKey)).andReturn(expectedDisabledIcon);
406                    EasyMock.expect(iconSource.getIcon(selectedIconKey)).andReturn(expectedSelectedIcon);
407                    EasyMock.expect(iconSource.getIcon(rolloverIconKey)).andReturn(expectedRolloverIcon);
408                    EasyMock.expect(iconSource.getIcon(pressedIconKey)).andReturn(expectedPressedIcon);
409                    EasyMock.expect(iconSource.getIcon(largeIconKey)).andReturn(expectedLargeIcon);
410                    EasyMock.expect(iconSource.getIcon(disabledLargeIconKey)).andReturn(expectedDisabledLargeIcon);
411                    EasyMock.expect(iconSource.getIcon(selectedLargeIconKey)).andReturn(expectedSelectedLargeIcon);
412                    EasyMock.expect(iconSource.getIcon(rolloverLargeIconKey)).andReturn(expectedRolloverLargeIcon);
413                    EasyMock.expect(iconSource.getIcon(pressedLargeIconKey)).andReturn(expectedPressedLargeIcon);
414                    configurable.setIconInfo(expectedIconInfo);
415                    configurable.setLargeIconInfo(expectedLargeIconInfo);
416    
417                    EasyMock.replay(iconSource);
418                    EasyMock.replay(configurable);
419    
420                    configurer.configure(configurable, objectName);
421    
422                    EasyMock.verify(iconSource);
423                    EasyMock.verify(configurable);
424    
425                    // Reset the mock objects for the next test
426                    EasyMock.reset(iconSource);
427                    EasyMock.reset(configurable);
428    
429                    // Set the expectations. This time the loadOptionalIcons will be set to
430                    // false.
431                    configurer.setLoadOptionalIcons(false);
432                    expectedIconInfo = new CommandButtonIconInfo(expectedIcon);
433                    expectedLargeIconInfo = new CommandButtonIconInfo(expectedLargeIcon);
434                    EasyMock.expect(iconSource.getIcon(iconKey)).andReturn(expectedIcon);
435                    EasyMock.expect(iconSource.getIcon(largeIconKey)).andReturn(expectedLargeIcon);
436                    configurable.setIconInfo(expectedIconInfo);
437                    configurable.setLargeIconInfo(expectedLargeIconInfo);
438    
439                    EasyMock.replay(iconSource);
440                    EasyMock.replay(configurable);
441    
442                    configurer.configure(configurable, objectName);
443    
444                    EasyMock.verify(iconSource);
445                    EasyMock.verify(configurable);
446            }
447            
448            public void testCommandIconConfigurableWithNoIconFound() {
449    
450                    String objectName = "bogusCommandIconConfigurable";
451                    String iconKey = objectName + ".icon";
452                    String largeIconKey = objectName + ".large.icon";
453    
454                    // Create the required mock objects
455                    IconSource iconSource = (IconSource) EasyMock.createMock(IconSource.class);
456                    CommandIconConfigurable configurable = (CommandIconConfigurable) EasyMock
457                                    .createMock(CommandIconConfigurable.class);
458    
459                    // Create the configurer with the mock icon source
460                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, null, iconSource,
461                                    null);
462    
463                    EasyMock.expect(iconSource.getIcon(iconKey)).andReturn(null);
464                    EasyMock.expect(iconSource.getIcon(largeIconKey)).andReturn(null);
465    
466                    EasyMock.replay(iconSource);
467                    EasyMock.replay(configurable);
468    
469                    configurer.configure(configurable, objectName);
470    
471                    EasyMock.verify(iconSource);
472                    EasyMock.verify(configurable);
473            }
474    
475            /**
476             * Confirms that a {@link ImageConfigurable} object will have its image set
477             * correctly, if the image source can find it using the key
478             * 'objectName.image'.
479             */
480            public void testImageConfigurable() {
481    
482                    String objectName = "bogusImageConfigurable";
483                    String iconKey = objectName + ".image";
484                    Image expectedImage = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
485    
486                    // Create the required mock objects
487                    ImageSource imageSource = (ImageSource) EasyMock.createMock(ImageSource.class);
488                    ImageConfigurable configurable = (ImageConfigurable) EasyMock.createMock(ImageConfigurable.class);
489    
490                    // Create the configurer with the mock image source
491                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, imageSource, null,
492                                    null);
493    
494                    EasyMock.expect(imageSource.getImage(iconKey)).andReturn(expectedImage);
495                    configurable.setImage(expectedImage);
496    
497                    EasyMock.replay(imageSource);
498                    EasyMock.replay(configurable);
499    
500                    configurer.configure(configurable, objectName);
501    
502                    EasyMock.verify(imageSource);
503                    EasyMock.verify(configurable);
504    
505            }
506    
507            public void testImageConfigurableWithNoImageFound() {
508                    String objectName = "bogusImageConfigurable";
509                    String iconKey = objectName + ".image";
510    
511                    // Create the required mock objects
512                    ImageSource imageSource = (ImageSource) EasyMock.createMock(ImageSource.class);
513                    ImageConfigurable configurable = (ImageConfigurable) EasyMock.createMock(ImageConfigurable.class);
514    
515                    // Create the configurer with the mock image source
516                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, imageSource, null,
517                                    null);
518    
519                    EasyMock.expect(imageSource.getImage(iconKey)).andReturn(null);
520    
521                    EasyMock.replay(imageSource);
522                    EasyMock.replay(configurable);
523    
524                    configurer.configure(configurable, objectName);
525    
526                    EasyMock.verify(imageSource);
527                    EasyMock.verify(configurable);
528    
529            }
530    
531            /**
532             * Confirms that a {@link SecurityControllable} object will have its
533             * security controller set correctly, as retrieved from a MessageSource
534             * using the key 'beanName.label'.
535             */
536            public void testSecurityControllable() {
537    
538                    String objectName = "bogusSecurityControllable";
539                    String securityControllerId = "bogusSecurityControllerId";
540    
541                    // create the required mock objects
542                    SecurityControllerManager controllerManager = (SecurityControllerManager) EasyMock
543                                    .createMock(SecurityControllerManager.class);
544                    SecurityControllable controllable = (SecurityControllable) EasyMock.createMock(SecurityControllable.class);
545                    SecurityController controller = (SecurityController) EasyMock.createMock(SecurityController.class);
546    
547                    // Create the configurer with the mock security controller manager
548                    DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(null, null, null,
549                                    controllerManager);
550    
551                    // Set the expectations for this run. The security controller manager
552                    // has not been provided
553                    // with the controller for the given controller id yet so we don't
554                    // expect the controllable
555                    // to be added to the controllerManager as a controlled object
556                    EasyMock.expect(controllable.getSecurityControllerId()).andReturn(securityControllerId);
557                    EasyMock.expect(controllerManager.getSecurityController(securityControllerId)).andReturn(null);
558    
559                    // switch to replay mode...
560                    EasyMock.replay(controllable);
561                    EasyMock.replay(controllerManager);
562                    EasyMock.replay(controller);
563    
564                    // run the test...
565                    configurer.configure(controllable, objectName);
566    
567                    // and verify the results...
568                    EasyMock.verify(controllable);
569                    EasyMock.verify(controllerManager);
570                    EasyMock.verify(controller);
571    
572                    // reset the mocks for the next part of the test
573                    EasyMock.reset(controllable);
574                    EasyMock.reset(controllerManager);
575                    EasyMock.reset(controller);
576    
577                    // Set the expectations for the next test. This time we want the
578                    // controller manager to find
579                    // the controller for the given id and we expect the controllable to be
580                    // added to the
581                    // controller manager as a controlled object
582                    EasyMock.expect(controllable.getSecurityControllerId()).andReturn(securityControllerId);
583                    EasyMock.expect(controllerManager.getSecurityController(securityControllerId)).andReturn(controller);
584                    controller.addControlledObject(controllable);
585    
586                    // switch to replay mode...
587                    EasyMock.replay(controllable);
588                    EasyMock.replay(controllerManager);
589                    EasyMock.replay(controller);
590    
591                    // run the test...
592                    configurer.configure(controllable, objectName);
593    
594                    // and verify the results
595                    EasyMock.verify(controllable);
596                    EasyMock.verify(controllerManager);
597                    EasyMock.verify(controller);
598    
599            }
600    
601    }