/* * Created on 2004-12-01 * */ package org.hibernate.tool.test.jdbc2cfg; import java.sql.Types; import java.util.ArrayList; import java.util.List; import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy; import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy; import org.hibernate.cfg.reveng.ReverseEngineeringSettings; import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; import org.hibernate.cfg.reveng.TableIdentifier; import org.hibernate.mapping.Column; import org.junit.Assert; import org.junit.Test; /** * @author max * @author koen * */ public class DefaultReverseEngineeringStrategyTest { ReverseEngineeringStrategy rns = new DefaultReverseEngineeringStrategy(); @Test public void testColumnKeepCase() { Assert.assertEquals("name", rns.columnToPropertyName(null, "name") ); Assert.assertEquals("nameIsValid", rns.columnToPropertyName(null, "nameIsValid") ); } @Test public void testColumnUpperToLower() { Assert.assertEquals("name", rns.columnToPropertyName(null, "NAME") ); Assert.assertEquals("name", rns.columnToPropertyName(null, "Name") ); } @Test public void testColumnRemoveChars() { Assert.assertEquals("name", rns.columnToPropertyName(null, "_Name") ); Assert.assertEquals("name", rns.columnToPropertyName(null, "_name") ); Assert.assertEquals("name", rns.columnToPropertyName(null, "_name") ); } @Test public void testColumnToCamelCase() { Assert.assertEquals("labelForField", rns.columnToPropertyName(null, "LABEL_FOR_FIELD") ); Assert.assertEquals("nameToMe", rns.columnToPropertyName(null, "_name-To-Me") ); } @Test public void testColumnChangeCamelCase() { Assert.assertEquals("labelForField", rns.columnToPropertyName(null, "LabelForField") ); } @Test public void testTableKeepCase() { Assert.assertEquals("SickPatients", rns.tableToClassName(new TableIdentifier("SickPatients") ) ); } @Test public void testTableUpperToLower() { Assert.assertEquals("Patients", rns.tableToClassName(new TableIdentifier("PATIENTS") ) ); Assert.assertEquals("Patients", rns.tableToClassName(new TableIdentifier("patients") ) ); } @Test public void testTableRemoveChars() { Assert.assertEquals("Patients", rns.tableToClassName(new TableIdentifier("_Patients") ) ); Assert.assertEquals("Patients", rns.tableToClassName(new TableIdentifier("_patients") ) ); Assert.assertEquals("Patients", rns.tableToClassName(new TableIdentifier("_patients") ) ); Assert.assertEquals("PatientInterventions", rns.tableToClassName(new TableIdentifier("_PATIENT_INTERVENTIONS") ) ); } @Test public void testTableToCamelCase() { Assert.assertEquals("SickPatients", rns.tableToClassName(new TableIdentifier("Sick_Patients") ) ); Assert.assertEquals("SickPatients", rns.tableToClassName(new TableIdentifier("_Sick-Patients") ) ); } @Test public void testTableKeepCamelCase() { Assert.assertEquals("SickPatients", rns.tableToClassName(new TableIdentifier("SickPatients") ) ); } @Test public void testBasicForeignKeyNames() { Assert.assertEquals("products", rns.foreignKeyToCollectionName("something", new TableIdentifier("product"), null, new TableIdentifier("order"), null, true ) ); Assert.assertEquals("willies", rns.foreignKeyToCollectionName("something", new TableIdentifier("willy"), null, new TableIdentifier("order"), null, true ) ); Assert.assertEquals("boxes", rns.foreignKeyToCollectionName("something", new TableIdentifier("box"), null, new TableIdentifier("order"), null, true ) ); Assert.assertEquals("order", rns.foreignKeyToEntityName("something", new TableIdentifier("product"), null, new TableIdentifier("order"), null, true ) ); } @Test public void testCustomClassNameStrategyWithCollectionName() { ReverseEngineeringStrategy custom = new DelegatingReverseEngineeringStrategy(new DefaultReverseEngineeringStrategy()) { public String tableToClassName(TableIdentifier tableIdentifier) { return super.tableToClassName( tableIdentifier ) + "Impl"; } }; custom.setSettings( new ReverseEngineeringSettings(custom) ); TableIdentifier productTable = new TableIdentifier("product"); Assert.assertEquals("ProductImpl", custom.tableToClassName( productTable )); Assert.assertEquals("productImpls", custom.foreignKeyToCollectionName("something", productTable, null, new TableIdentifier("order"), null, true ) ); /*assertEquals("willies", custom.foreignKeyToCollectionName("something", new TableIdentifier("willy"), null, new TableIdentifier("order"), null, true ) ); assertEquals("boxes", custom.foreignKeyToCollectionName("something", new TableIdentifier("box"), null, new TableIdentifier("order"), null, true ) ); assertEquals("order", custom.foreignKeyToEntityName("something", productTable, null, new TableIdentifier("order"), null, true ) );*/ } @Test public void testForeignKeyNamesToPropertyNames() { String fkName = "something"; TableIdentifier fromTable = new TableIdentifier("company"); List<Column> fromColumns = new ArrayList<Column>(); TableIdentifier toTable = new TableIdentifier("address"); List<Column> toColumns = new ArrayList<Column>(); Assert.assertEquals("address", rns.foreignKeyToEntityName(fkName, fromTable, fromColumns, toTable, toColumns, true) ); Assert.assertEquals("companies", rns.foreignKeyToCollectionName(fkName, fromTable, fromColumns, toTable, toColumns, true) ); fkName = "billing"; fromColumns.clear(); fromColumns.add(new Column("bill_adr") ); Assert.assertEquals("addressByBillAdr", rns.foreignKeyToEntityName(fkName, fromTable, fromColumns, toTable, toColumns, false) ); Assert.assertEquals("companiesForBillAdr", rns.foreignKeyToCollectionName(fkName, fromTable, fromColumns, toTable, toColumns, false) ); fromColumns.add(new Column("bill_adrtype") ); Assert.assertEquals("addressByBilling", rns.foreignKeyToEntityName(fkName, fromTable, fromColumns, toTable, toColumns, false) ); Assert.assertEquals("companiesForBilling", rns.foreignKeyToCollectionName(fkName, fromTable, fromColumns, toTable, toColumns, false) ); } @Test public void testPreferredTypes() { Assert.assertEquals("int",rns.columnToHibernateTypeName(null, "bogus",Types.INTEGER,0,0,0, false, false)); Assert.assertEquals("because nullable it should not be int", "java.lang.Integer",rns.columnToHibernateTypeName(null, "bogus",Types.INTEGER,0,0,0, true, false)); Assert.assertEquals("java.lang.Integer",rns.columnToHibernateTypeName(null, "bogus",Types.NUMERIC,0,9,0, true, false)); Assert.assertEquals("java.lang.Integer",rns.columnToHibernateTypeName(null, "bogus",Types.INTEGER,0,0,0, true, false)); Assert.assertEquals("serializable",rns.columnToHibernateTypeName(new TableIdentifier("sdf"), "bogus",-567,0,0,0, false, false)); Assert.assertEquals("string",rns.columnToHibernateTypeName(new TableIdentifier("sdf"), "bogus",12,0,0,0, false, false)); } @Test public void testReservedKeywordsHandling() { Assert.assertEquals("class_", rns.columnToPropertyName(new TableIdentifier("blah"), "class")); } }