From d6f22a2af48f83d63b5381118d2029797458194e Mon Sep 17 00:00:00 2001
From: Ludovic Pouzenc <ludovic@pouzenc.fr>
Date: Sat, 20 Sep 2014 09:17:18 +0200
Subject: Early development stages (before SCM) : WIP_1

Early development stages (before SCM) : WIP_2

Early development stages (before SCM) : WIP_3

Early development stages (before SCM) : WIP_4

Early development stages (before SCM) : WIP_6

Early development stages (before SCM) : WIP_7

Early development stages (before SCM) : WIP_8

Adds documentation folder as an Eclipse project.
Adds README for github.

Decent source tree by tuning Eclise project's location

One forgetten file while movign everything :)

Adding Copyright, licencing (GPL v3), correcting README
---
 .../data/io/filters/MVDataCombinerTest.java        | 148 +++++++++++++++++++++
 1 file changed, 148 insertions(+)
 create mode 100644 src/core/JUTests/data/io/filters/MVDataCombinerTest.java

(limited to 'src/core/JUTests/data/io')

diff --git a/src/core/JUTests/data/io/filters/MVDataCombinerTest.java b/src/core/JUTests/data/io/filters/MVDataCombinerTest.java
new file mode 100644
index 0000000..5d32dd8
--- /dev/null
+++ b/src/core/JUTests/data/io/filters/MVDataCombinerTest.java
@@ -0,0 +1,148 @@
+package data.io.filters;
+
+import static org.junit.Assert.*;
+
+import java.util.Iterator;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import data.MVDataEntry;
+import data.filters.MVDataCombiner;
+import data.filters.MVDataCombiner.MVDataCombineMode;
+import data.io.MVDataReader;
+import data.io.stub.StubDataReader;
+
+public class MVDataCombinerTest {
+	
+	@Rule
+	public ExpectedException exception = ExpectedException.none();
+	
+	@Test
+	public void testOutOfOrderCase() {
+		// Test Data
+		MVDataEntry e10 = new MVDataEntry("line2");
+		e10.getAttrValPairs().put("merge", "e10");
+		MVDataEntry e11 = new MVDataEntry("line1");
+		e11.getAttrValPairs().put("merge", "e11");
+		
+		MVDataEntry e21 = new MVDataEntry("line2");
+		e21.getAttrValPairs().put("merge", "e21");
+
+		MVDataEntry[][] fakeEntries = new MVDataEntry[][] {
+				new MVDataEntry[] { e10, e11 },
+				new MVDataEntry[] { e21 },
+		};
+
+		MVDataCombineMode mergeModes[] = new MVDataCombineMode[]{
+				MVDataCombineMode.PRIMARY_SOURCE,
+				MVDataCombineMode.MERGE_APPEND,
+		};
+		
+		// Expected results
+		MVDataEntry line1 = new MVDataEntry(e10);
+		line1.mergeValues(true, e21);
+		
+		MVDataEntry expected[] = new MVDataEntry[] {
+				line1,
+				null /* Should throw UnsupportedOperationException() before comparing */
+		};
+		
+		// Test run
+		exception.expect(UnsupportedOperationException.class);
+		doCombineTest(expected, fakeEntries, mergeModes);
+	}
+	
+
+	@Test
+	public void testGeneralCase() {
+		
+		// Test Data
+		MVDataEntry e10 = new MVDataEntry("line3");
+		e10.getAttrValPairs().put("from1", "e10");
+		e10.getAttrValPairs().put("merge", "e10");
+		MVDataEntry e11 = new MVDataEntry("line4");
+		e11.getAttrValPairs().put("from1", "e11");
+		e11.getAttrValPairs().put("merge", "e11");
+		
+		MVDataEntry e20 = new MVDataEntry("line1");
+		e20.getAttrValPairs().put("from2", "e20");
+		e20.getAttrValPairs().put("merge", "e20");
+		MVDataEntry e21 = new MVDataEntry("line2");
+		e21.getAttrValPairs().put("from2", "e21");
+		e21.getAttrValPairs().put("merge", "e21");
+		MVDataEntry e22 = new MVDataEntry("line3");
+		e22.getAttrValPairs().put("from2", "e22");
+		e22.getAttrValPairs().put("merge", "e22");
+		
+		MVDataEntry e30 = new MVDataEntry("line2");
+		e30.getAttrValPairs().put("from3", "e30");
+		e30.getAttrValPairs().put("merge", "e30");
+		
+		
+		MVDataEntry[][] fakeEntries = new MVDataEntry[][] {
+				new MVDataEntry[] { e10, e11 },
+				new MVDataEntry[] { e20, e21, e22 },
+				new MVDataEntry[] { e30 },
+		};
+		
+		MVDataCombineMode mergeModes[] = new MVDataCombineMode[]{
+				MVDataCombineMode.PRIMARY_SOURCE,
+				MVDataCombineMode.MERGE_REPLACE,
+				MVDataCombineMode.MERGE_APPEND,
+		};
+		
+		// Expected results
+		MVDataEntry line1 = new MVDataEntry(e20);
+		
+		MVDataEntry line2 = new MVDataEntry(e21);
+		line2.mergeValues(true, e30);
+		
+		MVDataEntry line3 = new MVDataEntry(e10);
+		line3.mergeValues(false, e22);
+		
+		MVDataEntry line4 = new MVDataEntry(e11);
+		
+		MVDataEntry expected[] = new MVDataEntry[] {
+				line1,line2,line3,line4
+		};
+		
+		// Test run
+		doCombineTest(expected, fakeEntries, mergeModes);
+	}
+
+	// TODO : test all Combine modes
+
+	/**
+	 * Helper function to factorise Combiner tests.
+	 * @param expected
+	 * @param fakeEntries
+	 * @param mergeModes
+	 */
+	public void doCombineTest(MVDataEntry expected[], MVDataEntry[][] fakeEntries, MVDataCombineMode mergeModes[]) {
+		// Test init		
+		MVDataReader readers[] = new MVDataReader[fakeEntries.length];
+		for (int i = 0; i < fakeEntries.length; i++) {
+			readers[i] = new StubDataReader("fakeReader"+i,fakeEntries[i]);
+		}
+
+		MVDataCombiner combiner = new MVDataCombiner("combiner", readers, mergeModes);
+		
+		// Test twice to check if asking a new iterator "rewinds" correctly
+		for (int i=0;i<2;i++) {
+			//System.out.println("Loop " + (i+1));
+			
+			Iterator<MVDataEntry> combinerIt = combiner.iterator();
+			for (int j = 0; j < expected.length; j++) {
+				assertTrue(combinerIt.hasNext());
+				MVDataEntry item = combinerIt.next();
+				//System.out.println(expected[i]);
+				//System.out.println(item);
+				//System.out.println();
+				assertEquals(expected[j], item);
+			}
+			assertFalse(combinerIt.hasNext());
+		}
+	}
+}
-- 
cgit v1.2.3