HHH-12357 - NamingHelper uses system default encoding
Add replicating test case
This commit is contained in:
parent
b599c770af
commit
5653262812
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.boot.model.naming;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||
import org.hibernate.test.util.ReflectionUtil;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExternalResource;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class NamingHelperTest extends BaseUnitTestCase {
|
||||
|
||||
@Rule
|
||||
public DefaultCharset defaultCharset = new DefaultCharset();
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-12357")
|
||||
public void generateHashedFkName() {
|
||||
Identifier booksDe = new Identifier( "Bücher", false );
|
||||
Identifier authorsDe = new Identifier( "Autoren", false );
|
||||
Identifier authorId = new Identifier( "autor_id", false );
|
||||
|
||||
defaultCharset.set( StandardCharsets.ISO_8859_1 );
|
||||
|
||||
String fkNameLatin1 = NamingHelper.INSTANCE.generateHashedFkName( "FK", booksDe, authorsDe, authorId );
|
||||
|
||||
assertEquals( "FKpvm24wh1qwbmx6xjcbc7uv5f7", fkNameLatin1 );
|
||||
|
||||
defaultCharset.set( StandardCharsets.UTF_8 );
|
||||
|
||||
String fkNameUtf8 = NamingHelper.INSTANCE.generateHashedFkName( "FK", booksDe, authorsDe, authorId );
|
||||
|
||||
assertEquals( "FKdgopp1hqnm8c1o6sfbb3tbeh", fkNameUtf8 );
|
||||
}
|
||||
|
||||
public static class DefaultCharset extends ExternalResource {
|
||||
|
||||
private Charset prev;
|
||||
|
||||
@Override
|
||||
protected void before() {
|
||||
prev = ReflectionUtil.getStaticFieldValue( Charset.class, "defaultCharset" );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void after() {
|
||||
set( prev );
|
||||
}
|
||||
|
||||
public void set(Charset charset) {
|
||||
ReflectionUtil.setStaticField( Charset.class, "defaultCharset", charset );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -48,6 +48,22 @@ public class ReflectionUtil {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a field value from a given class
|
||||
* @param target Class whose field is being read
|
||||
* @param name field name
|
||||
* @return field value
|
||||
*/
|
||||
public static <T> T getStaticFieldValue(Class<?> target, String name) {
|
||||
try {
|
||||
Field field = getField(target, name);
|
||||
return (T) field.get( null );
|
||||
}
|
||||
catch ( IllegalAccessException e ) {
|
||||
throw new IllegalArgumentException( "Cannot set field " + name, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set target Object field to a certain value
|
||||
* @param target Object whose field is being set
|
||||
|
@ -79,6 +95,22 @@ public class ReflectionUtil {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set target Class field to a certain value
|
||||
* @param target Class whose field is being set
|
||||
* @param fieldName Class field name to set
|
||||
* @param value the new value for the given field
|
||||
*/
|
||||
public static void setStaticField(Class<?> target, String fieldName, Object value) {
|
||||
try {
|
||||
Field field = getField(target, fieldName);
|
||||
field.set( null, value );
|
||||
}
|
||||
catch ( IllegalAccessException e ) {
|
||||
throw new IllegalArgumentException("Field " + fieldName + " could not be set", e );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* New target Object instance using the given arguments
|
||||
* @param constructorSupplier constructor supplier
|
||||
|
|
Loading…
Reference in New Issue