blob: e1e003d0ab1edd55bb82afbfea9953d4f68bd99c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
*
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* - Martin Vojtek - 2.6 - Initial implementation
******************************************************************************/
package org.eclipse.persistence.testing.moxy.unit.jaxb.compiler.builder.helper;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import mockit.Deencapsulation;
import mockit.Expectations;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
import mockit.Tested;
import mockit.integration.junit4.JMockit;
import org.eclipse.persistence.exceptions.JAXBException;
import org.eclipse.persistence.internal.helper.TransformerHelper;
import org.eclipse.persistence.jaxb.compiler.builder.helper.TransformerReflectionHelper;
import org.eclipse.persistence.jaxb.javamodel.Helper;
import org.eclipse.persistence.jaxb.javamodel.JavaClass;
import org.eclipse.persistence.jaxb.javamodel.JavaMethod;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests TransformerReflection methods.
*
* @author Martin Vojtek
*
*/
@RunWith(JMockit.class)
public class TransformerReflectionHelperTestCase {
@Tested TransformerReflectionHelper transformerReflectionHelper;
@Mocked Helper helper;
@Before
public void init() {
this.transformerReflectionHelper = new TransformerReflectionHelper(helper);
}
@Test
public void getReturnTypeForWriteTransformationMethodTransformer(final @Mocked TransformerHelper transformerHelper, final @Mocked JavaClass writerClass, final @Mocked JavaClass expectedReturnType) {
final String transformerMethodName = "transformerMethodName";
new MockUp<TransformerReflectionHelper>() {
@Mock
protected TransformerHelper getTransformerHelper() {
return transformerHelper;
}
@Mock
private JavaClass getReturnTypeForWriteTransformationMethod(String methodName, JavaClass writerClass, boolean isSetTransformerClass) throws JAXBException {
return expectedReturnType;
}
};
new Expectations() {{
transformerHelper.getTransformerMethodName(); result = transformerMethodName;
}};
JavaClass returnType = Deencapsulation.invoke(transformerReflectionHelper, "getReturnTypeForWriteTransformationMethodTransformer", writerClass);
assertSame(expectedReturnType, returnType);
}
@Test
public void getReturnTypeForWriteTransformationMethod(final @Mocked JavaClass writerClass, final @Mocked JavaClass expectedReturnType) {
final String methodName = "methodName";
new MockUp<TransformerReflectionHelper>() {
@Mock
private JavaClass getReturnTypeForWriteTransformationMethod(String methodName, JavaClass writerClass, boolean isSetTransformerClass) throws JAXBException {
return expectedReturnType;
}
};
JavaClass returnType = Deencapsulation.invoke(transformerReflectionHelper, "getReturnTypeForWriteTransformationMethod", methodName, writerClass);
assertSame(expectedReturnType, returnType);
}
@Test
public void getReturnTypeForWriteTransformationMethod_isSetTransformerClass(final @Mocked TransformerHelper transformerHelper, final @Mocked JavaClass writerClass, final @Mocked JavaClass expectedReturnType, final @Mocked JavaMethod javaMethod) {
final String methodName = "methodName";
final boolean isSetTransformerClass = false;
new Expectations(TransformerReflectionHelper.class) {{
List<Class[]> classes = new ArrayList<>();
Class[] classes1 = new Class[0];
classes.add(classes1);
Class[] classes2 = new Class[0];
classes.add(classes2);
Deencapsulation.invoke(transformerReflectionHelper, "getTransformerHelper"); result = transformerHelper;
transformerHelper.getTransformerMethodParameters(isSetTransformerClass); result = classes;
JavaClass[] javaClasses = new JavaClass[0];
helper.getJavaClassArray(classes1); result = javaClasses;
writerClass.getDeclaredMethod(methodName, javaClasses); result = null;
helper.getJavaClassArray(classes2); result = javaClasses;
writerClass.getDeclaredMethod(methodName, javaClasses); result = javaMethod;
javaMethod.getReturnType(); result = expectedReturnType;
}};
JavaClass returnType = Deencapsulation.invoke(transformerReflectionHelper, "getReturnTypeForWriteTransformationMethod", methodName, writerClass, isSetTransformerClass);
assertSame(expectedReturnType, returnType);
}
@Test
public void getReturnTypeForWriteTransformationMethod_throwsJAXBException(final @Mocked TransformerHelper transformerHelper, final @Mocked JavaClass writerClass) {
final String methodName = "methodName";
final boolean isSetTransformerClass = false;
new Expectations(TransformerReflectionHelper.class) {{
List<Class[]> classes = new ArrayList<>();
Class[] classes1 = new Class[0];
classes.add(classes1);
Class[] classes2 = new Class[0];
classes.add(classes2);
Deencapsulation.invoke(transformerReflectionHelper, "getTransformerHelper"); result = transformerHelper;
transformerHelper.getTransformerMethodParameters(isSetTransformerClass); result = classes;
JavaClass[] javaClasses = new JavaClass[0];
helper.getJavaClassArray(classes1); result = javaClasses;
writerClass.getDeclaredMethod(methodName, javaClasses); result = null;
helper.getJavaClassArray(classes2); result = javaClasses;
writerClass.getDeclaredMethod(methodName, javaClasses); result = null;
}};
try {
Deencapsulation.invoke(transformerReflectionHelper, "getReturnTypeForWriteTransformationMethod", methodName, writerClass, isSetTransformerClass);
fail("Expected JAXBException.");
} catch (JAXBException expected) {
}
}
}