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.internal.databinding.conversion;
011:
012: import junit.framework.TestCase;
013:
014: import org.eclipse.core.databinding.conversion.IConverter;
015:
016: /**
017: * @since 1.1
018: */
019: public abstract class NumberToNumberTestHarness extends TestCase {
020:
021: /**
022: * Invoked when a to primitive validator is needed.
023: *
024: * @param fromType
025: * @return validator, <code>null</code> if the type does not have a primitive form
026: */
027: protected abstract IConverter doGetToPrimitiveValidator(
028: Class fromType);
029:
030: /**
031: * Invoked when a to boxed validator is needed.
032: *
033: * @param fromType
034: * @return
035: */
036: protected abstract IConverter doGetToBoxedTypeValidator(
037: Class fromType);
038:
039: /**
040: * Invoked when the type is needed.
041: *
042: * @param primitive
043: * @return type, <code>null</code> if the type does not have a primitive form
044: */
045: protected abstract Class doGetToType(boolean primitive);
046:
047: /**
048: * Invoked when an out of range number is needed to use for conversion.
049: *
050: * @return out of range number of <code>null</code> if the type has no bounds
051: */
052: protected abstract Number doGetOutOfRangeNumber();
053:
054: public void testFromType() throws Exception {
055: Class from = Integer.class;
056: assertEquals(from, doGetToBoxedTypeValidator(from)
057: .getFromType());
058: }
059:
060: public void testToTypeIsPrimitive() throws Exception {
061: Class toType = doGetToType(true);
062:
063: if (toType == null) {
064: //return if there is no primitive type
065: return;
066: }
067: assertEquals("to type was not of the correct type", toType,
068: doGetToPrimitiveValidator(Integer.class).getToType());
069: assertTrue("to type was not primitive", toType.isPrimitive());
070: }
071:
072: public void testToTypeIsBoxedType() throws Exception {
073: Class toType = doGetToType(false);
074: assertEquals(toType, doGetToBoxedTypeValidator(Integer.class)
075: .getToType());
076: assertFalse(toType.isPrimitive());
077: }
078:
079: public void testValidConversion() throws Exception {
080: Integer value = new Integer(1);
081: Number result = (Number) doGetToBoxedTypeValidator(
082: Integer.class).convert(value);
083:
084: assertNotNull("result was null", result);
085:
086: // regardless if the converter is for the primitive value the returned
087: // value will be the boxed type
088: assertEquals(doGetToType(false), result.getClass());
089: assertEquals(value, new Integer(result.intValue()));
090: }
091:
092: public void testOutOfRangeConversion() throws Exception {
093: Number outOfRange = doGetOutOfRangeNumber();
094:
095: if (outOfRange == null) {
096: //the number does not have bounds (e.g. BigInteger or BigDecimal)
097: return;
098: }
099: try {
100: doGetToBoxedTypeValidator(Integer.class)
101: .convert(outOfRange);
102: fail("exception should have been thrown");
103: } catch (IllegalArgumentException e) {
104: }
105: }
106:
107: public void testConvertNullValueForPrimitiveThrowsIllegalArgumentException()
108: throws Exception {
109: if (doGetToType(true) == null) {
110: //return if primitive is not supported
111:
112: return;
113: }
114:
115: try {
116: doGetToPrimitiveValidator(Integer.class).convert(null);
117: fail("exception should have been thrown");
118: } catch (IllegalArgumentException e) {
119: }
120: }
121:
122: public void testConvertNullValueForBoxedTypeReturnsNull()
123: throws Exception {
124: assertNull(doGetToBoxedTypeValidator(Integer.class).convert(
125: null));
126: }
127:
128: public void testNonNumberThrowsIllegalArgumentException()
129: throws Exception {
130: try {
131: doGetToBoxedTypeValidator(Integer.class).convert("");
132: fail("exception should have been thrown");
133: } catch (IllegalArgumentException e) {
134: }
135: }
136: }
|