--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2010 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.databoard.tests;
+
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.ListIterator;\r
+\r
+import junit.framework.TestCase;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.file.FileList;\r
+import org.simantics.databoard.file.IFileList;\r
+
+public class TestFileList1 extends TestCase {
+
+ int length = 1024*10;
+
+ String[] data1array;
+ List<String> data1list;
+ IFileList<String> data1file;
+ Binding data1binding = Bindings.getBindingUnchecked(String.class);
+
+ public void setUp()
+ throws Exception {
+ data1array = new String[length];
+ data1list = new ArrayList<String>(length);
+ for (int i=0; i<length; i++)
+ {
+ String s = "Line "+(i+1);
+ data1array[i] = s;
+ data1list.add( s );
+ }
+
+ data1file = new FileList<String>(File.createTempFile("Tmp", ".tmp"), String.class);
+ data1file.getFile().deleteOnExit();
+ }
+
+ public void tearDown()
+ throws Exception
+ {
+ data1file.close();
+ }
+
+ public void testAppend()
+ throws Exception
+ {
+ // Write
+ data1file.addAll(data1list);
+ assertEquals(length, data1file.size());
+ // Read-Verify
+ int i=0;
+ for (String line : data1file)
+ assertEquals(data1array[i++], line);
+ }
+
+ public void testClear()
+ throws Exception
+ {
+ // Write
+ data1file.addAll(data1list);
+ assertFalse(data1file.isEmpty());
+ assertEquals(length, data1file.size());
+ // Clear all
+ data1file.clear();
+ assertTrue(data1file.isEmpty());
+ assertEquals(0, data1file.size());
+ // Check that file size has truncated
+ assertTrue(data1file.getFile().length()<1024);
+ }
+
+ public void testRemove()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+
+ for (int i=0; i<length; i++)
+ assertEquals(data1array[i], data1file.get(i));
+
+ // remove 10 elements, one by one
+ for (int i=0; i<10; i++) {
+ data1file.remove(10);
+ assertEquals(length-i-1, data1file.size());
+ }
+
+ // check data looks sane
+ for (int i=0; i<10; i++)
+ assertEquals(data1array[i], data1file.get(i));
+ for (int i=20; i<length; i++) {
+ if (i==923)
+ System.out.println("x");
+ Object x = data1file.get(i-10);
+ Object expected = data1file.get(i-10);
+ assertEquals(expected, x);
+ }
+
+ }
+
+ public void testInsertAll()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+ data1file.addAll(0, data1list);
+ for (int i=0; i<length; i++)
+ assertEquals(data1array[i], data1file.get(i));
+ for (int i=0; i<length; i++)
+ assertEquals(data1array[i], data1file.get(i+length));
+ }
+
+ public void testSetAll()
+ throws Exception
+ {
+ List<String> data2 = new ArrayList<String>();
+ for (int i=0; i<500; i++)
+ data2.add( "XYZabc-??-#"+(i+1000000) );
+
+ data1file.clear();
+ ((FileList<String>)data1file).setAll(data2);
+
+ assertEquals(data1file.size(), data2.size());
+ for (int i=0; i<data2.size(); i++)
+ assertEquals(data2.get(i), data1file.get(i));
+
+ ((FileList<String>)data1file).setAll(data1list);
+
+ assertEquals(data1file.size(), data1list.size());
+ for (int i=0; i<data1list.size(); i++)
+ assertEquals(data1list.get(i), data1file.get(i));
+ }
+
+ public void testInsert()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+
+ // int 10 elements, one by one
+ for (int i=0; i<10; i++) {
+ data1file.add(10+i, "XXX"+i);
+ assertEquals(length+i+1, data1file.size());
+ }
+
+ // check data looks sane
+ for (int i=0; i<10; i++)
+ assertEquals(data1array[i], data1file.get(i));
+ for (int i=0; i<10; i++)
+ assertEquals("XXX"+i, data1file.get(i+10));
+ for (int i=20; i<length-10; i++)
+ assertEquals(data1array[i+10], data1file.get(i+20));
+ }
+
+ public void testIterator()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+
+ Iterator<String> iter = data1file.iterator();
+ int i=0;
+ while (iter.hasNext())
+ assertEquals(data1array[i++], iter.next());
+
+ i=100;
+ ListIterator<String> li = data1file.listIterator(100);
+ while (li.hasNext()) {
+ assertEquals(li.nextIndex(), i);
+ assertEquals(data1array[i++], li.next());
+ }
+ assertTrue(i==length);
+
+ i = data1file.size();
+ li = data1file.listIterator(i);
+ while (li.hasPrevious()) {
+ --i;
+ assertEquals(li.previousIndex(), i);
+ assertEquals(data1array[i], li.previous());
+ }
+
+ // Change to smaller objects
+ li = data1file.listIterator();
+ while (li.hasNext()) {
+ li.next();
+ li.set("XXX"+li.nextIndex());
+ }
+ // Verify
+ li = data1file.listIterator(0);
+ while (li.hasNext()) {
+ String value = li.next();
+ assertEquals("XXX"+li.nextIndex(), value);
+ }
+
+ // Change to larger objects
+ li = data1file.listIterator();
+ while (li.hasNext()) {
+ li.next();
+ li.set("ABCDEFG "+li.nextIndex());
+ }
+
+ // Verify
+ li = data1file.listIterator(0);
+ while (li.hasNext()) {
+ String value = li.next();
+ assertEquals("ABCDEFG "+li.nextIndex(), value);
+ }
+ }
+
+ public void testIndexOf()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+
+ assertEquals(2, data1file.indexOf("Line 3"));
+ assertEquals(99, data1file.lastIndexOf("Line 100"));
+ assertEquals(-1, data1file.indexOf("xyz"));
+ assertEquals(-1, data1file.lastIndexOf("xyz"));
+ }
+
+ public void testContains()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+ assertTrue( data1file.contains("Line 5") );
+ assertTrue( data1file.contains("Line 50") );
+ assertFalse( data1file.contains("line 5") );
+ }
+
+ public void testSubList()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+ List<String> subList = data1file.subList(10, 110);
+ assertEquals(100, subList.size());
+ for (int i=0; i<100; i++)
+ assertEquals(data1array[i+10], subList.get(i));
+ }
+
+ public void testToArray()
+ throws Exception
+ {
+ data1file.addAll(data1list);
+ String[] array = data1file.toArray(new String[0]);
+ assertTrue( Arrays.equals(array, data1array) );
+ }
+
+ public void testOpen()
+ throws Exception
+ {
+ File file = data1file.getFile();
+ data1file.addAll(data1list);
+ data1file.close();
+ data1file = new FileList<String>(file, String.class);
+
+ for (int i=0; i<length; i++)
+ assertEquals(data1array[i], data1file.get(i));
+ }
+
+}
+