001    /*
002     * Copyright 2002-2007 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.form.builder;
017    
018    import javax.swing.JComponent;
019    import javax.swing.JLabel;
020    import javax.swing.JTextArea;
021    import javax.swing.JTextField;
022    
023    import org.easymock.EasyMock;
024    import org.springframework.binding.form.FormModel;
025    import org.springframework.binding.form.support.DefaultFormModel;
026    import org.springframework.richclient.factory.ComponentFactory;
027    import org.springframework.richclient.form.binding.BindingFactory;
028    import org.springframework.richclient.form.binding.swing.SwingBindingFactory;
029    import org.springframework.richclient.test.SpringRichTestCase;
030    
031    /**
032     * Skeleton Testcase for <code>AbstractFormBuilder</code>.
033     * 
034     * @author Peter De Bruycker
035     */
036    public abstract class AbstractFormBuilderTestCase extends SpringRichTestCase {
037            private AbstractFormBuilder formBuilder;
038            private FormModel formModel;
039            private ComponentFactory mockComponentFactory;
040            private FormComponentInterceptorFactory mockInterceptorFactory;
041            
042            public void testCreateTextArea() {
043                    final JTextArea textArea = new JTextArea();
044                    
045                    EasyMock.expect(mockComponentFactory.createTextArea(5, 40)).andReturn(textArea);
046    
047                    EasyMock.replay(mockComponentFactory);
048                    
049                    JComponent result = formBuilder.createTextArea("property");
050                    assertSame(textArea, result);
051                    
052                    EasyMock.verify(mockComponentFactory);
053            }
054            
055            public void testCreateLabelWithNullInterceptor() {
056                    final JLabel label = new JLabel("test-label");
057                    
058                    EasyMock.expect(mockComponentFactory.createLabel("")).andReturn(label);
059                    EasyMock.expect(mockInterceptorFactory.getInterceptor(formModel)).andReturn(null);
060    
061                    EasyMock.replay(mockComponentFactory);
062                    EasyMock.replay(mockInterceptorFactory);
063                    
064                    JTextField component = new JTextField();
065                    formBuilder.createLabelFor("property", component);
066                    
067                    EasyMock.verify(mockComponentFactory);
068                    EasyMock.verify(mockInterceptorFactory);
069            }
070            
071            public void testCreateLabel() {
072                    final JLabel label = new JLabel("test-label");
073                    
074                    EasyMock.expect(mockComponentFactory.createLabel("")).andReturn(label);
075                    
076                    FormComponentInterceptor mockInterceptor= (FormComponentInterceptor) EasyMock.createMock(FormComponentInterceptor.class);
077                    mockInterceptor.processLabel("property", label);
078                    
079                    EasyMock.expect(mockInterceptorFactory.getInterceptor(formModel)).andReturn(mockInterceptor);
080    
081                    EasyMock.replay(mockComponentFactory);
082                    EasyMock.replay(mockInterceptorFactory);
083                    EasyMock.replay(mockInterceptor);
084                    
085                    JTextField component = new JTextField();
086                    JLabel result = formBuilder.createLabelFor("property", component);
087                    
088                    assertSame(label, result);
089                    assertNotNull("createLabelFor cannot return null", result);
090                    assertEquals(component, result.getLabelFor());
091                    
092                    EasyMock.verify(mockComponentFactory);
093                    EasyMock.verify(mockInterceptorFactory);
094                    EasyMock.verify(mockInterceptor);
095            }
096            
097            protected final void doSetUp() throws Exception {
098                    formModel = new DefaultFormModel(new TestBean());
099                    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    }