1   /*
2    * Copyright 2002-2007 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.form.builder;
17  
18  import javax.swing.JComponent;
19  import javax.swing.JLabel;
20  import javax.swing.JTextArea;
21  import javax.swing.JTextField;
22  
23  import org.easymock.EasyMock;
24  import org.springframework.binding.form.FormModel;
25  import org.springframework.binding.form.support.DefaultFormModel;
26  import org.springframework.richclient.factory.ComponentFactory;
27  import org.springframework.richclient.form.binding.BindingFactory;
28  import org.springframework.richclient.form.binding.swing.SwingBindingFactory;
29  import org.springframework.richclient.test.SpringRichTestCase;
30  
31  /**
32   * Skeleton Testcase for <code>AbstractFormBuilder</code>.
33   * 
34   * @author Peter De Bruycker
35   */
36  public abstract class AbstractFormBuilderTestCase extends SpringRichTestCase {
37  	private AbstractFormBuilder formBuilder;
38  	private FormModel formModel;
39  	private ComponentFactory mockComponentFactory;
40  	private FormComponentInterceptorFactory mockInterceptorFactory;
41  	
42  	public void testCreateTextArea() {
43  		final JTextArea textArea = new JTextArea();
44  		
45  		EasyMock.expect(mockComponentFactory.createTextArea(5, 40)).andReturn(textArea);
46  
47  		EasyMock.replay(mockComponentFactory);
48  		
49  		JComponent result = formBuilder.createTextArea("property");
50  		assertSame(textArea, result);
51  		
52  		EasyMock.verify(mockComponentFactory);
53  	}
54  	
55  	public void testCreateLabelWithNullInterceptor() {
56  		final JLabel label = new JLabel("test-label");
57  		
58  		EasyMock.expect(mockComponentFactory.createLabel("")).andReturn(label);
59  		EasyMock.expect(mockInterceptorFactory.getInterceptor(formModel)).andReturn(null);
60  
61  		EasyMock.replay(mockComponentFactory);
62  		EasyMock.replay(mockInterceptorFactory);
63  		
64  		JTextField component = new JTextField();
65  		formBuilder.createLabelFor("property", component);
66  		
67  		EasyMock.verify(mockComponentFactory);
68  		EasyMock.verify(mockInterceptorFactory);
69  	}
70  	
71  	public void testCreateLabel() {
72  		final JLabel label = new JLabel("test-label");
73  		
74  		EasyMock.expect(mockComponentFactory.createLabel("")).andReturn(label);
75  		
76  		FormComponentInterceptor mockInterceptor= (FormComponentInterceptor) EasyMock.createMock(FormComponentInterceptor.class);
77  		mockInterceptor.processLabel("property", label);
78  		
79  		EasyMock.expect(mockInterceptorFactory.getInterceptor(formModel)).andReturn(mockInterceptor);
80  
81  		EasyMock.replay(mockComponentFactory);
82  		EasyMock.replay(mockInterceptorFactory);
83  		EasyMock.replay(mockInterceptor);
84  		
85  		JTextField component = new JTextField();
86  		JLabel result = formBuilder.createLabelFor("property", component);
87  		
88  		assertSame(label, result);
89  		assertNotNull("createLabelFor cannot return null", result);
90  		assertEquals(component, result.getLabelFor());
91  		
92  		EasyMock.verify(mockComponentFactory);
93  		EasyMock.verify(mockInterceptorFactory);
94  		EasyMock.verify(mockInterceptor);
95  	}
96  	
97  	protected final void doSetUp() throws Exception {
98  		formModel = new DefaultFormModel(new TestBean());
99  		BindingFactory bindingFactory= new SwingBindingFactory(formModel);
100 		
101 		formBuilder = createFormBuilder(bindingFactory);
102 		assertNotNull("formBuilder cannot be null", formBuilder);
103 		
104 		mockComponentFactory= (ComponentFactory) EasyMock.createMock(ComponentFactory.class);
105 		formBuilder.setComponentFactory(mockComponentFactory);
106 		
107 		mockInterceptorFactory = (FormComponentInterceptorFactory) EasyMock.createMock(FormComponentInterceptorFactory.class);
108 		formBuilder.setFormComponentInterceptorFactory(mockInterceptorFactory);
109 		
110 		additionalSetUp();
111 	}
112 	
113 	protected abstract AbstractFormBuilder createFormBuilder(BindingFactory bindingFactory);
114 
115 	protected void additionalSetUp() throws Exception {
116 		
117 	}
118 }