package com.txtr.hibernatedelta; import java.io.InputStream; import java.util.LinkedHashSet; import java.util.Set; import javax.xml.bind.JAXBContext; import org.junit.Assert; import org.junit.Test; import com.google.common.collect.ImmutableList; import com.txtr.hibernatedelta.model.ExplicitHibernateIndex; import com.txtr.hibernatedelta.model.HibernateColumn; import com.txtr.hibernatedelta.model.HibernateIndexName; import com.txtr.hibernatedelta.model.HibernateIndexNames; import com.txtr.hibernatedelta.model.HibernateTable; public class IndexIdFactoryTest { @Test public void testCopyNames() throws Exception { String table = "table"; HibernateTable newTable = new HibernateTable(table, null, false); newTable.addColumn(createFkColumn("a")); newTable.addColumn(createFkColumn("b")); newTable.addColumn(createFkColumn("c")); ExplicitHibernateIndex index = new ExplicitHibernateIndex(null, true, false, ImmutableList.of("b")); newTable.addExplicitIndex(index); ExplicitHibernateIndex index2 = new ExplicitHibernateIndex(null, true, false, ImmutableList.of("c")); newTable.addExplicitIndex(index2); HibernateIndexNames names = new HibernateIndexNames(); names.getIndexNames().add(new HibernateIndexName("aOld", table, ImmutableList.of("a"))); names.getIndexNames().add(new HibernateIndexName("aIndex", table, ImmutableList.of("b"))); IndexIdFactory.setIndexNames(newTable, names); Assert.assertEquals("aOld", newTable.getColumn("a").getForeignKeyIndexName()); Assert.assertEquals("table1", newTable.getColumn("c").getForeignKeyIndexName()); Assert.assertEquals("aIndex", index.getName()); Assert.assertEquals("table1", index2.getName()); } private HibernateColumn createFkColumn(String name) { return new HibernateColumn(name, "target", false, null, "type", null, null); } @Test(expected = IllegalStateException.class) public void testTestDuplicateIndexNames() throws Exception { assertNoDuplicateNames(getClass().getClassLoader().getResourceAsStream("test_indexNames.xml")); } private void assertNoDuplicateNames(InputStream inputStream) throws Exception { Set<String> names = new LinkedHashSet<String>(); HibernateIndexNames unmarshal = (HibernateIndexNames) JAXBContext.newInstance(HibernateIndexNames.class).createUnmarshaller().unmarshal(inputStream); for (HibernateIndexName indexName : unmarshal.getIndexNames()) { String name = indexName.getName(); if (!names.add(name)) { throw new IllegalStateException("duplicate index name: " + name); } } } }