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.observable;
011:
012: import java.util.Arrays;
013: import java.util.List;
014:
015: import junit.framework.TestCase;
016:
017: import org.eclipse.core.databinding.observable.Diffs;
018: import org.eclipse.core.databinding.observable.list.ListDiff;
019: import org.eclipse.core.databinding.observable.list.ListDiffEntry;
020:
021: /**
022: * @since 1.1
023: */
024: public class Diffs_ListDiffTests extends TestCase {
025: public void testListDiffEntryToStringDoesNotThrowNPEForNullListDiffEntry() {
026: ListDiffEntry entry = new ListDiffEntry() {
027: public Object getElement() {
028: return null;
029: }
030:
031: public int getPosition() {
032: return 0;
033: }
034:
035: public boolean isAddition() {
036: return false;
037: }
038: };
039:
040: try {
041: entry.toString();
042: assertTrue(true);
043: } catch (NullPointerException e) {
044: fail("NPE was thrown.");
045: }
046: }
047:
048: public void testListDiffToStringDoesNotThrowNPEForNullListDiff() {
049: ListDiff diff = new ListDiff() {
050: public ListDiffEntry[] getDifferences() {
051: return null;
052: }
053: };
054:
055: try {
056: diff.toString();
057: assertTrue(true);
058: } catch (NullPointerException e) {
059: fail("NPE was thrown.");
060: }
061: }
062:
063: public void testListDiffToStringDoesNotThrowNPEForNullListDiffEntry() {
064: ListDiff diff = new ListDiff() {
065: public ListDiffEntry[] getDifferences() {
066: return new ListDiffEntry[1];
067: }
068: };
069:
070: try {
071: diff.toString();
072: assertTrue(true);
073: } catch (NullPointerException e) {
074: fail("NPE was thrown.");
075: }
076: }
077:
078: public void testDiffScenario1() throws Exception {
079: ListDiff diff = diff(null, null);
080: assertEquals(0, diff.getDifferences().length);
081: }
082:
083: private ListDiff diff(String[] oldArray, String[] newArray) {
084: List a = Arrays.asList((oldArray != null) ? oldArray
085: : new String[] {});
086: List b = Arrays.asList((newArray != null) ? newArray
087: : new String[] {});
088:
089: return Diffs.computeListDiff(a, b);
090: }
091:
092: public void testDiffScenario2() throws Exception {
093: ListDiff diff = diff(new String[] { "a" }, null);
094: assertEquals(1, diff.getDifferences().length);
095: assertEntry(diff.getDifferences()[0], false, 0, "a");
096: }
097:
098: public void testDiffScenario3() throws Exception {
099: ListDiff diff = diff(null, new String[] { "a" });
100: assertEquals(1, diff.getDifferences().length);
101: assertEntry(diff.getDifferences()[0], true, 0, "a");
102: }
103:
104: public void testDiffScenario4() throws Exception {
105: ListDiff diff = diff(new String[] { "a" }, new String[] { "a" });
106:
107: assertEquals(0, diff.getDifferences().length);
108: }
109:
110: public void testDiffScenario5() throws Exception {
111: ListDiff diff = diff(new String[] { "a" }, new String[] { "b" });
112: assertEquals(2, diff.getDifferences().length);
113:
114: assertEntry(diff.getDifferences()[0], true, 0, "b");
115: assertEntry(diff.getDifferences()[1], false, 1, "a");
116: }
117:
118: public void testDiffScenario6() throws Exception {
119: ListDiff diff = diff(new String[] { "a" }, new String[] { "a",
120: "b" });
121:
122: assertEquals(1, diff.getDifferences().length);
123: assertEntry(diff.getDifferences()[0], true, 1, "b");
124: }
125:
126: public void testDiffScenario7() throws Exception {
127: ListDiff diff = diff(new String[] { "a" }, new String[] { "b",
128: "a" });
129:
130: assertEquals(1, diff.getDifferences().length);
131: assertEntry(diff.getDifferences()[0], true, 0, "b");
132: }
133:
134: public void testDiffScenario8() throws Exception {
135: ListDiff diff = diff(new String[] { "a" }, new String[] { "b",
136: "b" });
137:
138: assertEquals(3, diff.getDifferences().length);
139: assertEntry(diff.getDifferences()[0], true, 0, "b");
140: assertEntry(diff.getDifferences()[1], true, 1, "b");
141: assertEntry(diff.getDifferences()[2], false, 2, "a");
142: }
143:
144: public void testDiffScenario9() throws Exception {
145: ListDiff diff = diff(new String[] { "a" }, new String[] { "a",
146: "b", "c" });
147:
148: assertEquals(2, diff.getDifferences().length);
149: assertEntry(diff.getDifferences()[0], true, 1, "b");
150: assertEntry(diff.getDifferences()[1], true, 2, "c");
151: }
152:
153: public void testDiffScenario10() throws Exception {
154: ListDiff diff = diff(new String[] { "b" }, new String[] { "a",
155: "b", "c" });
156:
157: assertEquals(2, diff.getDifferences().length);
158: assertEntry(diff.getDifferences()[0], true, 0, "a");
159: assertEntry(diff.getDifferences()[1], true, 2, "c");
160: }
161:
162: public void testDiffScenario11() throws Exception {
163: ListDiff diff = diff(new String[] { "c" }, new String[] { "a",
164: "b", "c" });
165:
166: assertEquals(2, diff.getDifferences().length);
167: assertEntry(diff.getDifferences()[0], true, 0, "a");
168: assertEntry(diff.getDifferences()[1], true, 1, "b");
169: }
170:
171: public void testDiffScenario12() throws Exception {
172: ListDiff diff = diff(new String[] { "a", "b", "c" },
173: new String[] { "a", "b", "c" });
174:
175: assertEquals(0, diff.getDifferences().length);
176: }
177:
178: public void testDiffScenario13() throws Exception {
179: ListDiff diff = diff(new String[] { "a", "b", "c" },
180: new String[] { "b", "c" });
181:
182: assertEquals(1, diff.getDifferences().length);
183: assertEntry(diff.getDifferences()[0], false, 0, "a");
184: }
185:
186: public void testDiffScenarios14() throws Exception {
187: ListDiff diff = diff(new String[] { "a", "b", "c" },
188: new String[] { "a", "c" });
189:
190: assertEquals(1, diff.getDifferences().length);
191: assertEntry(diff.getDifferences()[0], false, 1, "b");
192: }
193:
194: public void testDiffScenarios15() throws Exception {
195: ListDiff diff = diff(new String[] { "a", "b", "c" },
196: new String[] { "a", "b" });
197:
198: assertEquals(1, diff.getDifferences().length);
199: assertEntry(diff.getDifferences()[0], false, 2, "c");
200: }
201:
202: public void testDiffScenarios16() throws Exception {
203: ListDiff diff = diff(new String[] { "a", "b", "c" },
204: new String[] { "c", "b", "a" });
205:
206: assertEquals(4, diff.getDifferences().length);
207: assertEntry(diff.getDifferences()[0], false, 2, "c");
208: assertEntry(diff.getDifferences()[1], true, 0, "c");
209: assertEntry(diff.getDifferences()[2], false, 2, "b");
210: assertEntry(diff.getDifferences()[3], true, 1, "b");
211: }
212:
213: public void testDiffScenarios17() throws Exception {
214: ListDiff diff = diff(new String[] { "a", "b", "c" },
215: new String[] { "c", "b" });
216:
217: assertEquals(3, diff.getDifferences().length);
218: assertEntry(diff.getDifferences()[0], false, 0, "a");
219: assertEntry(diff.getDifferences()[1], false, 1, "c");
220: assertEntry(diff.getDifferences()[2], true, 0, "c");
221: }
222:
223: private static void assertEntry(ListDiffEntry entry,
224: boolean addition, int position, String element) {
225: assertEquals("addition", addition, entry.isAddition());
226: assertEquals("position", position, entry.getPosition());
227: assertEquals("element", element, entry.getElement());
228: }
229: }
|