001: /*******************************************************************************
002: * Copyright (c) 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: ******************************************************************************/package org.eclipse.core.tests.databinding;
011:
012: import java.math.BigDecimal;
013: import java.math.BigInteger;
014: import java.util.Date;
015:
016: import org.eclipse.core.databinding.UpdateValueStrategy;
017: import org.eclipse.core.databinding.observable.value.IObservableValue;
018: import org.eclipse.core.databinding.observable.value.WritableValue;
019: import org.eclipse.core.databinding.validation.IValidator;
020: import org.eclipse.core.internal.databinding.validation.NumberToByteValidator;
021: import org.eclipse.core.internal.databinding.validation.NumberToDoubleValidator;
022: import org.eclipse.core.internal.databinding.validation.NumberToFloatValidator;
023: import org.eclipse.core.internal.databinding.validation.NumberToIntegerValidator;
024: import org.eclipse.core.internal.databinding.validation.NumberToLongValidator;
025: import org.eclipse.core.internal.databinding.validation.NumberToShortValidator;
026: import org.eclipse.core.internal.databinding.validation.NumberToUnboundedNumberValidator;
027: import org.eclipse.core.internal.databinding.validation.StringToByteValidator;
028: import org.eclipse.core.internal.databinding.validation.StringToDateValidator;
029: import org.eclipse.core.internal.databinding.validation.StringToDoubleValidator;
030: import org.eclipse.core.internal.databinding.validation.StringToFloatValidator;
031: import org.eclipse.core.internal.databinding.validation.StringToIntegerValidator;
032: import org.eclipse.core.internal.databinding.validation.StringToLongValidator;
033: import org.eclipse.core.internal.databinding.validation.StringToShortValidator;
034: import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
035:
036: /**
037: * @since 1.1
038: */
039: public class UpdateValueStrategyTest extends
040: AbstractDefaultRealmTestCase {
041: public void testDefaultValidatorForStringToInteger()
042: throws Exception {
043: assertDefaultValidator(String.class, Integer.class,
044: StringToIntegerValidator.class);
045: }
046:
047: public void testDefaultValidatorForStringToIntegerPrimitive()
048: throws Exception {
049: assertDefaultValidator(String.class, Integer.TYPE,
050: StringToIntegerValidator.class);
051: }
052:
053: public void testDefaultValidatorForStringToLong() throws Exception {
054: assertDefaultValidator(String.class, Long.class,
055: StringToLongValidator.class);
056: }
057:
058: public void testDefaultValidatorForStringToLongPrimitive()
059: throws Exception {
060: assertDefaultValidator(String.class, Long.TYPE,
061: StringToLongValidator.class);
062: }
063:
064: public void testDefaultValidatorForStringToFloat() throws Exception {
065: assertDefaultValidator(String.class, Float.class,
066: StringToFloatValidator.class);
067: }
068:
069: public void testDefaultValidatorForStringToFloatPrimitive()
070: throws Exception {
071: assertDefaultValidator(String.class, Float.TYPE,
072: StringToFloatValidator.class);
073: }
074:
075: public void testDefaultValidatorForStringToDouble()
076: throws Exception {
077: assertDefaultValidator(String.class, Double.class,
078: StringToDoubleValidator.class);
079: }
080:
081: public void testDefaultValidatorForStringToDoublePrimitive()
082: throws Exception {
083: assertDefaultValidator(String.class, Double.TYPE,
084: StringToDoubleValidator.class);
085: }
086:
087: public void testDefaultValidatorForStringToByte() throws Exception {
088: assertDefaultValidator(String.class, Byte.class,
089: StringToByteValidator.class);
090: }
091:
092: public void testDefaultValidatorForStringToBytePrimitive()
093: throws Exception {
094: assertDefaultValidator(String.class, Byte.TYPE,
095: StringToByteValidator.class);
096: }
097:
098: public void testDefaultValidatorForStringToShort() throws Exception {
099: assertDefaultValidator(String.class, Short.class,
100: StringToShortValidator.class);
101: }
102:
103: public void testDefaultValidatorForStringToShortPrimitive()
104: throws Exception {
105: assertDefaultValidator(String.class, Short.TYPE,
106: StringToShortValidator.class);
107: }
108:
109: public void testDefaultValidatorForStringToDate() throws Exception {
110: assertDefaultValidator(String.class, Date.class,
111: StringToDateValidator.class);
112: }
113:
114: public void testDefaultValidatorForNumberToByte() throws Exception {
115: assertDefaultValidator(Integer.class, Byte.class,
116: NumberToByteValidator.class);
117: }
118:
119: public void testDefaultValidatorForNumberToShort() throws Exception {
120: assertDefaultValidator(Integer.class, Short.class,
121: NumberToShortValidator.class);
122: }
123:
124: public void testDefaultValidatorForNumberToInteger()
125: throws Exception {
126: assertDefaultValidator(Short.class, Integer.class,
127: NumberToIntegerValidator.class);
128: }
129:
130: public void testDefaultValidatorForNumberToLong() throws Exception {
131: assertDefaultValidator(Short.class, Long.class,
132: NumberToLongValidator.class);
133: }
134:
135: public void testDefaultValidatorForNumberToFloat() throws Exception {
136: assertDefaultValidator(Short.class, Float.class,
137: NumberToFloatValidator.class);
138: }
139:
140: public void testDefaultValidatorForNumberToDouble()
141: throws Exception {
142: assertDefaultValidator(Short.class, Double.class,
143: NumberToDoubleValidator.class);
144: }
145:
146: public void testDefaultValidatorForNumberToBigInteger()
147: throws Exception {
148: assertDefaultValidator(Short.class, BigInteger.class,
149: NumberToUnboundedNumberValidator.class);
150: }
151:
152: public void testDefaultValidatorForNumberToBigDecimal()
153: throws Exception {
154: assertDefaultValidator(Short.class, BigDecimal.class,
155: NumberToUnboundedNumberValidator.class);
156: }
157:
158: public void testCachesDefaultedValidators() throws Exception {
159: WritableValue source = WritableValue
160: .withValueType(String.class);
161: WritableValue destination = WritableValue
162: .withValueType(Integer.class);
163:
164: UpdateValueStrategyStub strategy = new UpdateValueStrategyStub();
165: strategy.fillDefaults(source, destination);
166:
167: IValidator validator = strategy.validator;
168: assertNotNull(validator);
169:
170: strategy = new UpdateValueStrategyStub();
171: strategy.fillDefaults(source, destination);
172:
173: assertSame(validator, strategy.validator);
174: }
175:
176: private void assertDefaultValidator(Class fromType, Class toType,
177: Class validatorType) {
178: WritableValue source = WritableValue.withValueType(fromType);
179: WritableValue destination = WritableValue.withValueType(toType);
180:
181: UpdateValueStrategyStub strategy = new UpdateValueStrategyStub();
182: strategy.fillDefaults(source, destination);
183:
184: IValidator validator = strategy.validator;
185: assertNotNull("validator not null", validator);
186: assertTrue("converter instanceof " + validatorType,
187: validatorType.isInstance(validator));
188: }
189:
190: class UpdateValueStrategyStub extends UpdateValueStrategy {
191: IValidator validator;
192:
193: protected void fillDefaults(IObservableValue source,
194: IObservableValue destination) {
195: super .fillDefaults(source, destination);
196: }
197:
198: /* (non-Javadoc)
199: * @see org.eclipse.core.databinding.UpdateValueStrategy#createValidator(java.lang.Object, java.lang.Object)
200: */
201: protected IValidator createValidator(Object fromType,
202: Object toType) {
203: validator = super.createValidator(fromType, toType);
204: return validator;
205: }
206: }
207: }
|