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.dialog;
017
018 import javax.swing.JTextField;
019
020 import org.springframework.richclient.application.support.DefaultApplicationServices;
021 import org.springframework.richclient.test.SpringRichTestCase;
022 import org.springframework.rules.Rules;
023 import org.springframework.rules.support.DefaultRulesSource;
024
025 /**
026 * @author Peter De Bruycker
027 */
028 public class InputApplicationDialogTests extends SpringRichTestCase {
029 private static final String BUSINESS_FIELD = "name";
030
031 private BusinessObject businessObject;
032
033 protected void doSetUp() {
034 // create business object
035 businessObject = new BusinessObject();
036 }
037
038 public void testInitialEnabledState() {
039 InputApplicationDialog createDialog = createDialog(businessObject, BUSINESS_FIELD);
040 assertEnabledStateReflectsFormModelState(createDialog);
041
042 businessObject.setName("test");
043 assertEnabledStateReflectsFormModelState(createDialog);
044 }
045
046 private void assertEnabledStateReflectsFormModelState(InputApplicationDialog dialog) {
047 assertEquals(dialog.getFormModel().getValidationResults().getHasErrors(), !dialog.isEnabled());
048 }
049
050 private InputApplicationDialog createDialog(BusinessObject businessObject, String field) {
051 InputApplicationDialog dialog = new InputApplicationDialog(businessObject, BUSINESS_FIELD);
052 dialog.createDialog();
053
054 return dialog;
055 }
056
057 public void testConstructor() {
058 InputApplicationDialog dialog = new InputApplicationDialog(businessObject, BUSINESS_FIELD);
059
060 assertNotNull("No FormModel created", dialog.getFormModel());
061 assertEquals("BusinessObject not set on FormModel", businessObject, dialog.getFormModel().getFormObject());
062
063 assertNotNull("No inputField created", dialog.getInputField());
064 assertTrue("Default inputField not a JTextField", dialog.getInputField() instanceof JTextField);
065 }
066
067 public void testEnabledByUserAction() {
068 InputApplicationDialog dialog = createDialog(businessObject, BUSINESS_FIELD);
069
070 assertFalse(dialog.isEnabled());
071
072 dialog.getFormModel().getValueModel(BUSINESS_FIELD).setValue("test");
073 assertEnabledStateReflectsFormModelState(dialog);
074
075 dialog.getFormModel().getValueModel(BUSINESS_FIELD).setValue("");
076 assertEnabledStateReflectsFormModelState(dialog);
077 }
078
079 /**
080 * May be implemented in subclasses that need to register services with the global
081 * application services instance.
082 */
083 protected void registerAdditionalServices( DefaultApplicationServices applicationServices ) {
084 applicationServices.setRulesSource(new BusinessRulesSource());
085 }
086
087 private class BusinessRulesSource extends DefaultRulesSource {
088 public BusinessRulesSource() {
089 Rules rules = new Rules(BusinessObject.class);
090 rules.add(BUSINESS_FIELD, rules.required());
091 addRules(rules);
092 }
093 }
094
095 public class BusinessObject {
096 private String name;
097
098 public String getName() {
099 return name;
100 }
101
102 public void setName(String name) {
103 this.name = name;
104 }
105 }
106 }