// Copyright (c) 2003-present, Jodd Team (http://jodd.org)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package jodd.db.oom.naming;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TableNamingStrategyTest {
@Test
public void testEntityNameToTableName() {
assertEquals("FOO_BOO_ZOO", convertClassNameToTableName("FooBooZoo", true));
assertEquals("foo_boo_zoo", convertClassNameToTableName("FooBooZoo", false));
assertEquals("FOO", convertClassNameToTableName("Foo", true));
assertEquals("foo", convertClassNameToTableName("Foo", false));
assertEquals("", convertClassNameToTableName("", true));
assertEquals("", convertClassNameToTableName("", false));
assertEquals("TABLE_NAMING_STRATEGY_TEST", convertClassNameToTableName(this.getClass(), true));
assertEquals("table_naming_strategy_test", convertClassNameToTableName(this.getClass(), false));
assertEquals("QWE_FOO_BOO_ZOO", convertClassNameToTableName("FooBooZoo", "QWE_", null, true));
assertEquals("qwe_foo_boo_zoo", convertClassNameToTableName("FooBooZoo", "QWE_", null, false));
assertEquals("QWE_FOO_BOO_ZOO_XXX", convertClassNameToTableName("FooBooZoo", "QWE_", "_XXX", true));
assertEquals("qwe_foo_boo_zoo_xxx", convertClassNameToTableName("FooBooZoo", "QWE_", "_XXX", false));
assertEquals("QWE_FOO", convertClassNameToTableName("Foo", "QWE_", null, true));
assertEquals("qwe_foo", convertClassNameToTableName("Foo", "QWE_", null, false));
assertEquals("FOO_RED", convertClassNameToTableName("Foo", null, "_RED", true));
assertEquals("foo_red", convertClassNameToTableName("Foo", null, "_RED", false));
assertEquals("qwe_", convertClassNameToTableName("", "QWE_", null, false));
assertEquals("QWE_", convertClassNameToTableName("", "QWE_", null, true));
assertEquals("QWE__XXX", convertClassNameToTableName("", "QWE_", "_XXX", true));
assertEquals("qwe__xxx", convertClassNameToTableName("", "QWE_", "_XXX", false));
assertEquals("_XXX", convertClassNameToTableName("", null, "_XXX", true));
assertEquals("_xxx", convertClassNameToTableName("", null, "_XXX", false));
assertEquals("QWE_TABLE_NAMING_STRATEGY_TEST", convertClassNameToTableName(this.getClass(), "QWE_", null, true));
assertEquals("qwe_table_naming_strategy_test", convertClassNameToTableName(this.getClass(), "QWE_", null, false));
}
@Test
public void testEntityNameToTableName2() {
TableNamingStrategy tns = new TableNamingStrategy();
assertEquals("JODD_USER", tns.convertEntityNameToTableName("JoddUser"));
tns.setPrefix("PRE_");
assertEquals("PRE_JODD_USER", tns.convertEntityNameToTableName("JoddUser"));
tns.setSuffix("_suf");
assertEquals("PRE_JODD_USER_SUF", tns.convertEntityNameToTableName("JoddUser"));
tns.setUppercase(false);
assertEquals("pre_jodd_user_suf", tns.convertEntityNameToTableName("JoddUser"));
tns.setChangeCase(false);
assertEquals("PRE_jodd_user_suf", tns.convertEntityNameToTableName("JoddUser"));
tns.setSplitCamelCase(false);
assertEquals("PRE_JoddUser_suf", tns.convertEntityNameToTableName("JoddUser"));
tns.setPrefix(null);
tns.setSuffix(null);
assertEquals("JoddUser", tns.convertEntityNameToTableName("JoddUser"));
}
@Test
public void testSpecialEntityNameToTableName() {
assertEquals("FOO_BOO_ZOO", convertClassNameToTableName("FooBooZoo$xxx", true));
assertEquals("foo_boo_zoo", convertClassNameToTableName("FooBooZoo$xxx", false));
assertEquals("qwe_foo_boo_zoo_xxx", convertClassNameToTableName("FooBooZoo$xxx", "QWE_", "_XXX", false));
}
@Test
public void testTableNameToEntityName() {
assertEquals("FooBooZoo", convertTableNameToClassName("FOO_BOO_ZOO", null, null));
assertEquals("FooBooZoo", convertTableNameToClassName("foo_boo_zoo", null, null));
assertEquals("FooBooZoo", convertTableNameToClassName("FOO_BOO_ZOO_", null, null));
assertEquals("FooBooZoo", convertTableNameToClassName("foo_boo_zoo_", null, null));
assertEquals("Foo", convertTableNameToClassName("FOO", null, null));
assertEquals("Foo", convertTableNameToClassName("foo", null, null));
assertEquals("", convertTableNameToClassName("", null, null));
assertEquals("FooBooZoo", convertTableNameToClassName("QWE_FOO_BOO_ZOO", "QWE_", null));
assertEquals("FooBooZoo", convertTableNameToClassName("QWE_foo_boo_zoo", "QWE_", null));
assertEquals("FooBooZoo", convertTableNameToClassName("QWE_FOO_BOO_ZOO_", "QWE_", null));
assertEquals("FooBooZoo", convertTableNameToClassName("QWE_foo_boo_zoo_", "QWE_", null));
assertEquals("Foo", convertTableNameToClassName("QWE_FOO", "QWE_", null));
assertEquals("Foo", convertTableNameToClassName("QWE_foo", "QWE_", null));
assertEquals("Boo", convertTableNameToClassName("BOO", "QWE_", null));
assertEquals("Boo", convertTableNameToClassName("boo", "QWE_", null));
assertEquals("", convertTableNameToClassName("", "QWE_", null));
assertEquals("FooBoo", convertTableNameToClassName("QWE_FOO_BOO_ZOO", "QWE_", "_ZOO"));
assertEquals("FooBoo", convertTableNameToClassName("QWE_foo_boo_ZOO", "QWE_", "_ZOO"));
assertEquals("QweFooBoo", convertTableNameToClassName("QWE_FOO_BOO_ZOO_", null, "_ZOO_"));
assertEquals("QweFooBoo", convertTableNameToClassName("qwe_foo_boo_ZOO_", null, "_ZOO_"));
assertEquals("Qwe", convertTableNameToClassName("QWE_FOO", null, "_FOO"));
assertEquals("Qwe", convertTableNameToClassName("qwe_FOO", null, "_FOO"));
assertEquals("Boo", convertTableNameToClassName("BOO", "QWE_", "_XXX"));
assertEquals("Boo", convertTableNameToClassName("boo", "QWE_", "_XXX"));
assertEquals("", convertTableNameToClassName("", "QWE_", "_XXX"));
}
@Test
public void testTableNameToEntityName2() {
TableNamingStrategy tns = new TableNamingStrategy();
assertEquals("JoddUser", tns.convertTableNameToEntityName("JODD_USER"));
assertEquals("JoddUser", tns.convertTableNameToEntityName("jodd_user"));
tns.setPrefix("PRE_");
assertEquals("JoddUser", tns.convertTableNameToEntityName("JODD_USER"));
assertEquals("JoddUser", tns.convertTableNameToEntityName("PRE_JODD_USER"));
assertEquals("JoddUser", tns.convertTableNameToEntityName("PRE_jodd_user"));
tns.setSuffix("_suf");
assertEquals("JoddUser", tns.convertTableNameToEntityName("PRE_JODD_USER"));
assertEquals("JoddUser", tns.convertTableNameToEntityName("PRE_JODD_USER_suf"));
assertEquals("JoddUser", tns.convertTableNameToEntityName("PRE_jodd_user_suf"));
assertEquals("Jodduser", tns.convertTableNameToEntityName("PRE_JoddUser_suf"));
tns.setSplitCamelCase(false);
assertEquals("JoddUser", tns.convertTableNameToEntityName("PRE_JoddUser_suf"));
tns.setSuffix(null);
tns.setPrefix(null);
assertEquals("JoddUser", tns.convertTableNameToEntityName("JoddUser"));
}
@Test
public void testApplyToTableName() {
TableNamingStrategy tns = new TableNamingStrategy();
assertEquals("JODD_USER", tns.applyToTableName("JODD_USER"));
assertEquals("JODD", tns.applyToTableName("joDd"));
tns.setPrefix("SUP_");
assertEquals("SUP_JODD_USER", tns.applyToTableName("JODD_USER"));
assertEquals("SUP_JODD_USER", tns.applyToTableName("SUP_JODD_USER"));
assertEquals("SUP_JODD", tns.applyToTableName("joDd"));
tns.setSuffix("_EX");
assertEquals("SUP_JODD_USER_EX", tns.applyToTableName("JODD_USER"));
assertEquals("SUP_JODD_USER_EX", tns.applyToTableName("SUP_JODD_USER_EX"));
tns.setLowercase(true);
assertEquals("sup_jodd_user_ex", tns.applyToTableName("SUP_JODD_USER_EX"));
}
@Test
public void testApplyToColumnName() {
ColumnNamingStrategy cns = new ColumnNamingStrategy();
assertEquals("JODD_USER", cns.applyToColumnName("JODD_USER"));
assertEquals("JODD", cns.applyToColumnName("joDd"));
cns.setLowercase(true);
assertEquals("sup_jodd_user_ex", cns.applyToColumnName("SUP_JODD_USER_EX"));
}
// ---------------------------------------------------------------- tools
static String convertClassNameToTableName(Class clazz, boolean toUpperCase) {
return convertClassNameToTableName(clazz, null, null, toUpperCase);
}
static String convertClassNameToTableName(Class clazz, String tablePrefix, String tableSuffix, boolean toUpperCase) {
return convertClassNameToTableName(clazz.getSimpleName(), tablePrefix, tableSuffix, toUpperCase);
}
static String convertClassNameToTableName(String className, boolean toUpperCase) {
return convertClassNameToTableName(className, null, null, toUpperCase);
}
static String convertClassNameToTableName(String className, String tablePrefix, String tableSuffix, boolean toUpperCase) {
TableNamingStrategy tableNamingStrategy = new TableNamingStrategy();
tableNamingStrategy.setPrefix(tablePrefix);
tableNamingStrategy.setSuffix(tableSuffix);
tableNamingStrategy.setChangeCase(true);
tableNamingStrategy.setUppercase(toUpperCase);
return tableNamingStrategy.convertEntityNameToTableName(className);
}
static String convertTableNameToClassName(String tableName, String tablePrefix, String tableSuffix) {
TableNamingStrategy tableNamingStrategy = new TableNamingStrategy();
tableNamingStrategy.setPrefix(tablePrefix);
tableNamingStrategy.setSuffix(tableSuffix);
return tableNamingStrategy.convertTableNameToEntityName(tableName);
}
}