/******************************************************************************* * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation ******************************************************************************/ package org.reuseware.sokan.test.indexer.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import org.junit.Test; import org.reuseware.sokan.ID; import org.reuseware.sokan.IndexMetaData; import org.reuseware.sokan.IndexRow; import org.reuseware.sokan.index.util.CoreUtil; import org.reuseware.sokan.index.util.IndexUtil; import org.reuseware.sokan.index.util.ResourceUtil; import org.reuseware.sokan.test.indexer.AbstractIndexer; import org.reuseware.sokan.test.indexer.list.A3Indexer; import org.reuseware.sokan.test.indexer.list.B3Indexer; import org.reuseware.sokan.test.indexer.tree.B8Indexer; import org.reuseware.sokan.test.indexer.tree.C8Indexer; import org.reuseware.sokan.test.indexer.tree.D8Indexer; import org.reuseware.sokan.test.util.TestData; import org.reuseware.sokan.test.util.TestUtil; public class MultiPhaseCommitTestCase { private static final TestData data = TestData.INSTANCE; @Test public void testDependencyOrder() throws IOException { ID id = ResourceUtil.idFrom(TestUtil.fileAsURI(data.a6)); IndexRow row = IndexUtil.INSTANCE.getIndex(id); IndexMetaData metaData = row.getMetaData(); String a3 = new A3Indexer().myName; String b3 = new B3Indexer().myName; String a3BeforeB3 = a3 + AbstractIndexer.BEFORE + b3; assertEquals(AbstractIndexer.INVOKED, metaData.getSingle(a3)); assertEquals(AbstractIndexer.INVOKED, metaData.getSingle(b3)); assertEquals(true, Boolean.parseBoolean(metaData.getSingle(a3BeforeB3))); // 20, if artifacts only in folder 'trivial' and 'list' got indexed // 33, if artifacts in 'trivial', 'list' and 'binaryList' got indexed // what is the correct number to check for here? // String allA3 = AbstractIndexer.ALL + a3; // int actual = Integer.parseInt(metaData.getSingle(allA3)); // assertTrue(actual == 20 || actual == 33); } @Test public void testAlphabeticOrder() throws IOException { ID id = ResourceUtil.idFrom(TestUtil.fileAsURI(data.a6)); IndexRow row = IndexUtil.INSTANCE.getIndex(id); IndexMetaData metaData = row.getMetaData(); String b8 = new B8Indexer().myName; String c8 = new C8Indexer().myName; String d8 = new D8Indexer().myName; String b3BeforeC8 = b8 + AbstractIndexer.BEFORE + c8; String d3BeforeC8 = d8 + AbstractIndexer.BEFORE + c8; String b8TimeStamp = b8 + AbstractIndexer.TIMESTAMP; String c8TimeStamp = c8 + AbstractIndexer.TIMESTAMP; String d8TimeStamp = d8 + AbstractIndexer.TIMESTAMP; assertEquals(AbstractIndexer.INVOKED, metaData.getSingle(b8)); assertEquals(AbstractIndexer.INVOKED, metaData.getSingle(c8)); assertEquals(AbstractIndexer.INVOKED, metaData.getSingle(d8)); // false, because B8, C8, D8 get invoked in one indexing phase assertEquals(false, Boolean .parseBoolean(metaData.getSingle(b3BeforeC8))); assertEquals(false, Boolean .parseBoolean(metaData.getSingle(d3BeforeC8))); // only time stamps can indicate the order. String b8Time = metaData.getSingle(b8TimeStamp); String c8Time = metaData.getSingle(c8TimeStamp); String d8Time = metaData.getSingle(d8TimeStamp); assertTrue(-1 == TestUtil.compareDate(b8Time, c8Time)); assertTrue(-1 == TestUtil.compareDate(c8Time, d8Time)); CoreUtil.print(row); } }