001: /*
002: * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.binding.tests;
032:
033: import java.lang.reflect.InvocationTargetException;
034:
035: import javax.swing.JTextField;
036: import javax.swing.SwingUtilities;
037:
038: import junit.framework.TestCase;
039:
040: import com.jgoodies.binding.adapter.Bindings;
041: import com.jgoodies.binding.adapter.TextComponentConnector;
042: import com.jgoodies.binding.tests.value.ToUpperCaseStringHolder;
043: import com.jgoodies.binding.value.ValueHolder;
044: import com.jgoodies.binding.value.ValueModel;
045:
046: /**
047: * A test case for class {@link TextComponentConnector}.
048: *
049: * @author Karsten Lentzsch
050: * @version $Revision: 1.3 $
051: */
052: public final class TextComponentConnectorTest extends TestCase {
053:
054: // Constructor Tests ******************************************************
055:
056: public void testConstructorRejectsNullParameters() {
057: ValueModel subject = new ValueHolder();
058: JTextField textField = new JTextField();
059: try {
060: new TextComponentConnector(null, textField);
061: fail("Constructor failed to reject null subject.");
062: } catch (NullPointerException ex) {
063: // The expected behavior
064: }
065: try {
066: new TextComponentConnector(subject, (JTextField) null);
067: fail("Constructor failed to reject null text field.");
068: } catch (NullPointerException ex) {
069: // The expected behavior
070: }
071: }
072:
073: public void testConstructorLeavesSubjectAndTextFieldUnchanged() {
074: String subjectText = "subjectText";
075: String fieldText = "fieldText";
076: ValueModel subject = new ValueHolder(subjectText);
077: JTextField textField = new JTextField(fieldText);
078: new TextComponentConnector(subject, textField);
079: assertEquals(
080: "The constructor must not change the subject value.",
081: subjectText, subject.getValue());
082: assertEquals(
083: "The constructor must not change the text field text.",
084: fieldText, textField.getText());
085: }
086:
087: public void testBindingsUpdatesTextFieldText() {
088: String subjectText = "subjectText";
089: String fieldText = "fieldText";
090: ValueModel subject = new ValueHolder(subjectText);
091: JTextField textField = new JTextField(fieldText);
092: Bindings.bind(textField, subject);
093: assertEquals(
094: "The #bind method must not change the subject value.",
095: subjectText, subject.getValue());
096: assertEquals(
097: "The #bind method must change the text field text.",
098: subjectText, textField.getText());
099: }
100:
101: // Synchronization ********************************************************
102:
103: public void testSubjectChangeUpdatesTextComponent() {
104: String subjectText = "subjectText";
105: String fieldText = "fieldText";
106: ValueModel subject = new ValueHolder(subjectText);
107: JTextField textField = new JTextField(fieldText);
108: Bindings.bind(textField, subject);
109: subject.setValue("newSubjectText");
110: assertEquals("Failed to update the text component.", subject
111: .getValue(), textField.getText());
112: }
113:
114: public void testTextComponentChangeUpdatesSubject() {
115: String subjectText = "subjectText";
116: String fieldText = "fieldText";
117: ValueModel subject = new ValueHolder(subjectText);
118: JTextField textField = new JTextField(fieldText);
119: Bindings.bind(textField, subject);
120: textField.setText("newFieldText");
121: assertEquals("Failed to update the text component.", textField
122: .getText(), subject.getValue());
123: }
124:
125: public void testTextComponentChangeHonorsSubjectModifications() {
126: String subjectText = "subjectText";
127: String fieldText = "fieldText";
128: final ValueModel subject = new ToUpperCaseStringHolder();
129: subject.setValue(subjectText);
130: final JTextField textField = new JTextField(fieldText);
131: Bindings.bind(textField, subject);
132: textField.setText("newFieldText");
133: try {
134: SwingUtilities.invokeAndWait(new Runnable() {
135: public void run() {
136: assertEquals(
137: "Failed to honor the subject modifications.",
138: subject.getValue(), textField.getText());
139: }
140: });
141: } catch (InterruptedException e) {
142: e.printStackTrace();
143: } catch (InvocationTargetException e) {
144: e.printStackTrace();
145: }
146: }
147:
148: }
|