001    package org.springframework.richclient.form;
002    
003    import java.text.Collator;
004    
005    import java.util.Collections;
006    import java.util.Map;
007    
008    import junit.framework.TestCase;
009    
010    import org.springframework.richclient.form.binding.swing.ComboBoxBinder;
011    
012    public class DefaultFormUIProviderTests extends TestCase {
013        private SimplePanel panel;
014        private Map context;
015    
016        public void testGetComponent() {
017            DefaultFormUIProvider formUIProvider = new DefaultFormUIProvider(panel);
018    
019            assertSame(panel, formUIProvider.getControl());
020            assertEquals(panel.getStringField(), formUIProvider.getComponent("stringProperty"));
021            assertEquals(panel.getComboBox(), formUIProvider.getComponent("comboProperty"));
022            assertEquals(panel.getCheckBox(), formUIProvider.getComponent("booleanProperty"));
023            
024            // find nested components
025            assertEquals(panel.getNestedField(), formUIProvider.getComponent("nestedField"));
026        }
027    
028        public void testBind() {
029            DefaultFormUIProvider formUIProvider = new DefaultFormUIProvider(panel);
030    
031            TestableBindingFactory bindingFactory = new TestableBindingFactory();
032    
033            String[] properties = { "stringProperty", "comboProperty", "booleanProperty" };
034            formUIProvider.setProperties(properties);
035    
036            formUIProvider.setContext("comboProperty", context);
037    
038            formUIProvider.bind(bindingFactory, null);
039            assertEquals(3, bindingFactory.getBindControlCount());
040    
041            // string property
042            assertEquals("stringProperty", bindingFactory.getPropertyPaths().get(0));
043            assertEquals(panel.getStringField(), bindingFactory.getControls().get(0));
044            assertEquals(Collections.EMPTY_MAP, bindingFactory.getContexts().get(0));
045    
046            // combo property
047            assertEquals("comboProperty", bindingFactory.getPropertyPaths().get(1));
048            assertEquals(panel.getComboBox(), bindingFactory.getControls().get(1));
049            assertEquals(context, bindingFactory.getContexts().get(1));
050    
051            // boolean property
052            assertEquals("booleanProperty", bindingFactory.getPropertyPaths().get(2));
053            assertEquals(panel.getCheckBox(), bindingFactory.getControls().get(2));
054            assertEquals(Collections.EMPTY_MAP, bindingFactory.getContexts().get(2));
055        }
056    
057        protected void setUp() throws Exception {
058            panel = new SimplePanel();
059    
060            context = Collections.singletonMap(ComboBoxBinder.COMPARATOR_KEY, Collator.getInstance());
061        }
062    
063        public void testSetAndGetContext() {
064            DefaultFormUIProvider formUIProvider = new DefaultFormUIProvider(panel);
065    
066            formUIProvider.setContext("comboProperty", context);
067    
068            assertEquals(context, formUIProvider.getContext("comboProperty"));
069    
070            assertNotNull("if no context provided, must return empty map", formUIProvider.getContext("stringProperty"));
071            assertTrue("if no context provided, must return empty map", 
072                       formUIProvider.getContext("stringProperty").isEmpty());
073        }
074    }