1   /*
2    * Copyright 2002-2004 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package org.springframework.richclient.application.config;
17  
18  import java.awt.Color;
19  import java.awt.Image;
20  import java.awt.image.BufferedImage;
21  import java.util.Locale;
22  
23  import javax.swing.Icon;
24  import javax.swing.ImageIcon;
25  
26  import junit.framework.Assert;
27  import junit.framework.TestCase;
28  
29  import org.easymock.EasyMock;
30  import org.springframework.context.MessageSource;
31  import org.springframework.richclient.command.config.CommandButtonIconInfo;
32  import org.springframework.richclient.command.config.CommandButtonLabelInfo;
33  import org.springframework.richclient.command.config.CommandIconConfigurable;
34  import org.springframework.richclient.command.config.CommandLabelConfigurable;
35  import org.springframework.richclient.core.DescriptionConfigurable;
36  import org.springframework.richclient.core.LabelConfigurable;
37  import org.springframework.richclient.core.LabelInfo;
38  import org.springframework.richclient.core.SecurityControllable;
39  import org.springframework.richclient.core.TitleConfigurable;
40  import org.springframework.richclient.image.IconSource;
41  import org.springframework.richclient.image.ImageSource;
42  import org.springframework.richclient.image.config.IconConfigurable;
43  import org.springframework.richclient.image.config.ImageConfigurable;
44  import org.springframework.richclient.security.SecurityController;
45  import org.springframework.richclient.security.SecurityControllerManager;
46  import org.springframework.richclient.test.TestIcon;
47  
48  /**
49   * Provides a suite of unit tests for the
50   * {@link DefaultApplicationObjectConfigurer} class.
51   * 
52   * @author Kevin Stembridge
53   * @since 0.3
54   * 
55   */
56  public class DefaultApplicationObjectConfigurerTests extends TestCase {
57  
58  	/**
59  	 * Creates a new {@code DefaultApplicationObjectConfigurerTests}.
60  	 */
61  	public DefaultApplicationObjectConfigurerTests() {
62  		super();
63  	}
64  
65  	/**
66  	 * Confirms that an IllegalArgumentException is thrown if the object to be
67  	 * configured is not null but the object name is null.
68  	 */
69  	public void testForNullInputToConfigureMethod() {
70  
71  		DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer();
72  
73  		// should succeed
74  		configurer.configure(null, "bogus");
75  
76  		try {
77  			configurer.configure("bogus", null);
78  			Assert.fail("Should have thrown an IllegalArgumentException for null object name");
79  		}
80  		catch (IllegalArgumentException e) {
81  			// do nothing, test succeeded
82  		}
83  
84  	}
85  
86  	/**
87  	 * Confirms that a {@link TitleConfigurable} object will have its title set
88  	 * correctly, as retrieved from a MessageSource using the key
89  	 * 'beanName.title'.
90  	 */
91  	public void testConfigureTitleConfigurable() {
92  		MessageSource messageSource = (MessageSource) EasyMock.createMock(MessageSource.class);
93  
94  		DefaultApplicationObjectConfigurer configurer = new DefaultApplicationObjectConfigurer(messageSource);
95  
96  		String objectName = "bogusTitleable";
97  		String messageCode = objectName + ".title";
98  		String message = "bogusTitle";
99  
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 }