/**
* Copyright 2006-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mybatis.generator.api.dom.java;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import static org.junit.Assert.*;
public class MethodTest {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
@Test
public void testConstructor() {
Method method = new Method();
assertNotNull(method);
assertEquals("bar", method.getName());
}
@Test
public void testConstructorByName() {
Method method = new Method("foo");
assertNotNull(method);
assertEquals("foo", method.getName());
}
@Test
public void testConstructorByMethod() {
Method original = new Method("foo");
original.setConstructor(false);
original.setVisibility(JavaVisibility.PUBLIC);
original.setStatic(true);
original.setSynchronized(true);
original.setFinal(true);
FullyQualifiedJavaType listType = FullyQualifiedJavaType.getNewListInstance();
listType.addTypeArgument(FullyQualifiedJavaType.getStringInstance());
FullyQualifiedJavaType typeT = new FullyQualifiedJavaType("T");
original.addTypeParameter(new TypeParameter("T", Collections.singletonList(listType)));
original.addParameter(new Parameter(typeT, "t"));
original.setReturnType(typeT);
original.addBodyLine("return t;");
Method method = new Method(original);
assertNotNull(method);
assertEquals("foo", method.getName());
assertEquals(false, method.isConstructor());
assertEquals(JavaVisibility.PUBLIC, method.getVisibility());
assertEquals(true, method.isStatic());
assertEquals(true, method.isSynchronized());
assertEquals(true, method.isFinal());
assertEquals(1, method.getParameters().size());
assertEquals("t", method.getParameters().get(0).getName());
assertEquals("T", method.getParameters().get(0).getType().getShortName());
assertEquals(1, method.getTypeParameters().size());
assertEquals("T", method.getTypeParameters().get(0).getName());
assertEquals(1, method.getBodyLines().size());
assertEquals("return t;", method.getBodyLines().get(0));
}
@Test
public void testAddBodyLines() {
Method method = new Method();
assertEquals(0, method.getBodyLines().size());
method.addBodyLine("// test1");
assertEquals(1, method.getBodyLines().size());
assertEquals("// test1", method.getBodyLines().get(0));
method.addBodyLine(0, "// test0");
assertEquals(2, method.getBodyLines().size());
assertEquals("// test0", method.getBodyLines().get(0));
method.addBodyLines(Arrays.asList("// test2", "// test3"));
assertEquals(4, method.getBodyLines().size());
assertEquals("// test2", method.getBodyLines().get(2));
assertEquals("// test3", method.getBodyLines().get(3));
method.addBodyLines(3, Arrays.asList("// test2.1", "// test2.2"));
assertEquals(6, method.getBodyLines().size());
assertEquals("// test2", method.getBodyLines().get(2));
assertEquals("// test2.1", method.getBodyLines().get(3));
assertEquals("// test2.2", method.getBodyLines().get(4));
assertEquals("// test3", method.getBodyLines().get(5));
}
@Test
public void testSetConstructor() {
Method method = new Method();
assertEquals(false, method.isConstructor());
method.setConstructor(true);
assertEquals(true, method.isConstructor());
}
@Test
public void testSetName() {
Method method = new Method();
assertEquals("bar", method.getName());
method.setName("foo");
assertEquals("foo", method.getName());
}
@Test
public void testAddTypeParamaters() {
Method method = new Method();
assertEquals(0, method.getTypeParameters().size());
method.addTypeParameter(new TypeParameter("T"));
assertEquals(1, method.getTypeParameters().size());
assertEquals("T", method.getTypeParameters().get(0).getName());
method.addTypeParameter(0, new TypeParameter("U"));
assertEquals(2, method.getTypeParameters().size());
assertEquals("U", method.getTypeParameters().get(0).getName());
assertEquals("T", method.getTypeParameters().get(1).getName());
}
@Test
public void testAddParamaters() {
Method method = new Method();
assertEquals(0, method.getParameters().size());
method.addParameter(new Parameter(FullyQualifiedJavaType.getStringInstance(), "test1"));
assertEquals(1, method.getParameters().size());
assertEquals("test1", method.getParameters().get(0).getName());
method.addParameter(0, new Parameter(FullyQualifiedJavaType.getStringInstance(), "test2"));
assertEquals(2, method.getParameters().size());
assertEquals("test2", method.getParameters().get(0).getName());
assertEquals("test1", method.getParameters().get(1).getName());
}
@Test
public void testSetReturnType() {
Method method = new Method();
assertNull(method.getReturnType());
method.setReturnType(FullyQualifiedJavaType.getIntInstance());
assertEquals(FullyQualifiedJavaType.getIntInstance(), method.getReturnType());
}
@Test
public void testAddExceptions() {
Method method = new Method();
assertEquals(0, method.getExceptions().size());
method.addException(new FullyQualifiedJavaType("java.lang.Exception"));
assertEquals(1, method.getExceptions().size());
assertEquals("Exception", method.getExceptions().get(0).getShortName());
}
@Test
public void testSetSynchronized() {
Method method = new Method();
assertEquals(false, method.isSynchronized());
method.setSynchronized(true);
assertEquals(true, method.isSynchronized());
}
@Test
public void testSetNative() {
Method method = new Method();
assertEquals(false, method.isNative());
method.setNative(true);
assertEquals(true, method.isNative());
}
@Test
public void testGetFormattedContent() {
Method method = new Method("foo");
method.setConstructor(false);
method.setVisibility(JavaVisibility.PUBLIC);
method.setStatic(true);
method.setSynchronized(true);
method.setFinal(true);
FullyQualifiedJavaType listType = FullyQualifiedJavaType.getNewListInstance();
listType.addTypeArgument(FullyQualifiedJavaType.getStringInstance());
FullyQualifiedJavaType typeT = new FullyQualifiedJavaType("T");
FullyQualifiedJavaType comparatorType = new FullyQualifiedJavaType("java.util.Comparator");
comparatorType.addTypeArgument(FullyQualifiedJavaType.getStringInstance());
FullyQualifiedJavaType typeR = new FullyQualifiedJavaType("R");
method.addTypeParameter(new TypeParameter("T", Collections.singletonList(listType)));
method.addTypeParameter(new TypeParameter("R", Arrays.asList(listType, comparatorType)));
FullyQualifiedJavaType functionType = new FullyQualifiedJavaType("java.util.Function");
functionType.addTypeArgument(typeT);
functionType.addTypeArgument(typeR);
method.addParameter(new Parameter(typeT, "t"));
method.addParameter(new Parameter(functionType, "func"));
method.setReturnType(typeR);
method.addBodyLine("return func.apply(t);");
String excepted = "public static final synchronized <T extends List<String>, R extends List<String> & Comparator<String>> R foo(T t, Function<T, R> func) {" + LINE_SEPARATOR
+ " return func.apply(t);" + LINE_SEPARATOR
+ "}";
assertEquals(excepted, method.getFormattedContent(0, false, null));
}
}