001: /*
002: * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
003: */
004: package com.tc.util;
005:
006: import com.tc.test.TCTestCase;
007:
008: /**
009: * Unit test for {@link SettableValue}.
010: */
011: public class SettableValueTest extends TCTestCase {
012:
013: public void testBasics() throws Exception {
014: SettableValue value = new SettableValue();
015:
016: assertFalse(value.isSet());
017: assertNull(value.value());
018:
019: value.set(null);
020: assertTrue(value.isSet());
021: assertNull(value.value());
022:
023: Integer i = new Integer(3);
024:
025: value.set(i);
026: assertTrue(value.isSet());
027: assertSame(i, value.value());
028:
029: value.set(null);
030: assertTrue(value.isSet());
031: assertNull(value.value());
032:
033: value.unset();
034: assertFalse(value.isSet());
035: assertNull(value.value());
036: }
037:
038: public void testDefaultValue() {
039: SettableValue value = new SettableValue();
040: Object actualValue = new Object();
041: Object defaultValue = new Object();
042: assertFalse(actualValue.equals(defaultValue));
043: assertSame(defaultValue, value.value(defaultValue));
044:
045: value.set(actualValue);
046: assertSame(actualValue, value.value(defaultValue));
047:
048: value.unset();
049: assertSame(defaultValue, value.value(defaultValue));
050:
051: }
052:
053: public void testSerialization() throws Exception {
054: SettableValue value = new SettableValue();
055:
056: SerializationTestUtil.testSerializationAndEquals(value);
057: }
058:
059: public void testEquals() throws Exception {
060: SettableValue[] values = new SettableValue[7];
061: for (int i = 0; i < values.length; ++i)
062: values[i] = new SettableValue();
063:
064: values[0].set(new Integer(5));
065: values[1].set(null);
066: values[3].set(new Integer(5));
067: values[4].set(new Integer(6));
068: values[5].set(null);
069:
070: checkEquals(values, 0, new int[] { 0, 3 });
071: checkEquals(values, 1, new int[] { 1, 5 });
072: checkEquals(values, 2, new int[] { 2, 6 });
073: checkEquals(values, 3, new int[] { 3, 0 });
074: checkEquals(values, 4, new int[] { 4 });
075: checkEquals(values, 5, new int[] { 5, 1 });
076: checkEquals(values, 6, new int[] { 6, 2 });
077:
078: for (int i = 0; i < values.length; ++i) {
079: assertEquals(values[i], values[i].clone());
080: }
081:
082: assertFalse(values[0].equals(null));
083: assertFalse(values[0].equals(new Integer(5)));
084: assertFalse(values[0].equals("foo"));
085: }
086:
087: public void testClone() throws Exception {
088: SettableValue unset = new SettableValue();
089: SettableValue setToNull = new SettableValue();
090: SettableValue setToValue = new SettableValue();
091:
092: setToNull.set(null);
093: setToValue.set("foo");
094:
095: SettableValue unsetClone = (SettableValue) unset.clone();
096: assertEquals(unset, unsetClone);
097: assertFalse(unset == unsetClone);
098:
099: SettableValue setToNullClone = (SettableValue) setToNull
100: .clone();
101: assertEquals(setToNull, setToNullClone);
102: assertFalse(setToNull == setToNullClone);
103:
104: SettableValue setToValueClone = (SettableValue) setToValue
105: .clone();
106: assertEquals(setToValue, setToValueClone);
107: assertFalse(setToValue == setToValueClone);
108: }
109:
110: private void checkEquals(SettableValue[] values, int index,
111: int[] equalsIndices) throws Exception {
112: for (int i = 0; i < values.length; ++i) {
113: boolean equals = values[i].equals(values[index]);
114: boolean shouldEqual = isIn(equalsIndices, i);
115:
116: assertEquals("For value " + i + ":", shouldEqual, equals);
117: if (shouldEqual) {
118: assertEquals("For value " + i + ":", values[index]
119: .hashCode(), values[i].hashCode());
120: }
121: }
122: }
123:
124: private boolean isIn(int[] search, int theValue) {
125: for (int i = 0; i < search.length; ++i) {
126: if (search[i] == theValue)
127: return true;
128: }
129: return false;
130: }
131:
132: }
|