/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.locale;
import java.util.Collections;
import java.util.Locale;
import org.hibernate.HibernateException;
import org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory;
import org.hibernate.hql.spi.QueryTranslator;
import org.hibernate.hql.spi.QueryTranslatorFactory;
import org.hibernate.tool.hbm2ddl.SchemaValidator;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* @author Brett Meyer
*/
public class LocaleTest extends BaseNonConfigCoreFunctionalTestCase {
private static final String asciiRegex = "^\\p{ASCII}*$";
private static Locale currentLocale;
@Test
@TestForIssue(jiraKey = "HHH-8579")
public void testAliasWithLocale() {
// Without the HHH-8579 fix, this will generate non-ascii query aliases.
String hql = "from IAmAFoo";
QueryTranslatorFactory ast = new ASTQueryTranslatorFactory();
QueryTranslator queryTranslator = ast.createQueryTranslator(
hql, hql, Collections.EMPTY_MAP, sessionFactory(), null );
queryTranslator.compile( Collections.EMPTY_MAP, false );
String sql = queryTranslator.getSQLString();
assertTrue( sql.matches( asciiRegex ) );
}
@Test
@TestForIssue(jiraKey = "HHH-8765")
public void testMetadataWithLocale() {
try {
// Rather than building TableMetadata and checking for ascii values in table/column names, simply
// attempt to validate.
new SchemaValidator().validate( metadata() );
}
catch (HibernateException e) {
fail("Failed with the Turkish locale, most likely due to the use of String#toLowerCase() within hbm2ddl. "
+ "Search for all instaces and replace with StringHelper#toLowerCase(String)! " + e.getMessage());
}
}
@BeforeClass
public static void beforeClass() {
currentLocale = Locale.getDefault();
// Turkish will generate a "dotless i" when toLowerCase is used on "I".
Locale.setDefault(Locale.forLanguageTag("tr-TR"));
}
@AfterClass
public static void afterClass() {
Locale.setDefault(currentLocale);
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { IAmAFoo.class };
}
}