/**
* 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.eclipse.tests.harness.tests;
import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertThat;
import static org.mybatis.generator.eclipse.tests.harness.Utilities.getCompilationUnitSummaryFromResource;
import static org.mybatis.generator.eclipse.tests.harness.matchers.Matchers.*;
import java.io.IOException;
import java.io.InputStream;
import org.junit.Test;
import org.mybatis.generator.eclipse.tests.harness.summary.AbstractSummary;
import org.mybatis.generator.eclipse.tests.harness.summary.AnnotationSummary;
import org.mybatis.generator.eclipse.tests.harness.summary.ClassSummary;
import org.mybatis.generator.eclipse.tests.harness.summary.CompilationUnitSummary;
import org.mybatis.generator.eclipse.tests.harness.summary.EnumSummary;
import org.mybatis.generator.eclipse.tests.harness.summary.InterfaceSummary;
public class SummarizerTest {
private static final String IMPORT_JAVA_IO_SERIALIZABLE = "import java.io.Serializable";
private static final String SERIALIZABLE = "Serializable";
@Test
public void testAnnotationSummarizer() throws IOException {
InputStream resource = getClass().getResourceAsStream("/org/mybatis/generator/eclipse/tests/harness/tests/resources/OuterAnnotation.src");
CompilationUnitSummary cuSummary = getCompilationUnitSummaryFromResource(resource);
assertThat(cuSummary, hasImportCount(4));
assertThat(cuSummary, hasImport("import java.lang.annotation.ElementType"));
assertThat(cuSummary, hasImport("import java.lang.annotation.Retention"));
assertThat(cuSummary, hasImport("import java.lang.annotation.RetentionPolicy"));
assertThat(cuSummary, hasImport("import java.lang.annotation.Target"));
assertThat(cuSummary, hasAnnotationCount(2));
assertThat(cuSummary, hasAnnotation("OuterAnnotation"));
assertThat(cuSummary, hasAnnotation("SecondOuterAnnotation"));
assertThat(cuSummary, hasClassCount(0));
assertThat(cuSummary, hasEnumCount(0));
assertThat(cuSummary, hasInterfaceCount(0));
AnnotationSummary annotationSummary = cuSummary.getAnnotationSummary("OuterAnnotation");
assertThat(annotationSummary, hasAnnotationMember("name"));
assertThat(annotationSummary, hasAnnotationMemberCount(1));
assertThat(annotationSummary, hasField("id", ofType("int")));
assertThat(annotationSummary, hasField("id2", ofType("int")));
assertThat(annotationSummary, hasField("name", ofType("int")));
assertThat(annotationSummary, hasFieldCount(3));
verifyInners(annotationSummary);
}
@Test
public void testClassSummarizer() throws IOException {
InputStream resource = getClass().getResourceAsStream("/org/mybatis/generator/eclipse/tests/harness/tests/resources/OuterClass.src");
CompilationUnitSummary cuSummary = getCompilationUnitSummaryFromResource(resource);
assertThat(cuSummary, hasImportCount(2));
assertThat(cuSummary, hasImport(IMPORT_JAVA_IO_SERIALIZABLE));
assertThat(cuSummary, hasImport("import java.util.ArrayList"));
assertThat(cuSummary, hasClassCount(2));
assertThat(cuSummary, hasClass("SecondOuterClass"));
assertThat(cuSummary, hasClass("OuterClass"));
assertThat(cuSummary, hasEnumCount(0));
assertThat(cuSummary, hasInterfaceCount(0));
ClassSummary classSummary = cuSummary.getClassSummary("OuterClass");
assertThat(classSummary, hasSuperClass("ArrayList<String>"));
assertThat(classSummary, hasSuperInterface(SERIALIZABLE));
assertThat(classSummary, hasSuperInterfaceCount(1));
assertThat(classSummary, hasField("serialVersionUID", withFieldType("long")));
assertThat(classSummary, hasField("unreliableCount"));
assertThat(classSummary, hasFieldCount(2));
assertThat(classSummary, hasMethod("add(String)"));
assertThat(classSummary, hasMethod("getUnreliableCount()"));
assertThat(classSummary, hasMethodCount(2));
verifyInners(classSummary);
}
@Test
public void testEnumSummarizer() throws IOException {
InputStream resource = getClass().getResourceAsStream("/org/mybatis/generator/eclipse/tests/harness/tests/resources/OuterEnum.src");
CompilationUnitSummary cuSummary = getCompilationUnitSummaryFromResource(resource);
assertThat(cuSummary, hasImportCount(1));
assertThat(cuSummary, hasImport(IMPORT_JAVA_IO_SERIALIZABLE));
assertThat(cuSummary, hasClassCount(0));
assertThat(cuSummary, hasEnumCount(2));
assertThat(cuSummary, hasEnum("SecondOuterEnum"));
assertThat(cuSummary, hasEnum("OuterEnum"));
assertThat(cuSummary, hasInterfaceCount(0));
EnumSummary enumSummary = cuSummary.getEnumSummary("OuterEnum");
assertThat(enumSummary, hasEnumConstant("FRED"));
assertThat(enumSummary, hasEnumConstant("WILMA"));
assertThat(enumSummary, hasEnumConstant("BARNEY"));
assertThat(enumSummary, hasEnumConstant("BETTY"));
assertThat(enumSummary, hasEnumConstantCount(4));
assertThat(enumSummary, hasSuperInterface(SERIALIZABLE));
assertThat(enumSummary, hasSuperInterfaceCount(1));
assertThat(enumSummary, hasField("name"));
assertThat(enumSummary, hasFieldCount(1) );
assertThat(enumSummary, hasMethod("OuterEnum(String)"));
assertThat(enumSummary, hasMethod("getName()"));
assertThat(enumSummary, hasMethodCount(2));
verifyInners(enumSummary);
}
@Test
public void testInterfaceSummarizer() throws IOException {
InputStream resource = getClass().getResourceAsStream("/org/mybatis/generator/eclipse/tests/harness/tests/resources/OuterInterface.src");
CompilationUnitSummary cuSummary = getCompilationUnitSummaryFromResource(resource);
assertThat(cuSummary, hasImportCount(1));
assertThat(cuSummary, hasImport(IMPORT_JAVA_IO_SERIALIZABLE));
assertThat(cuSummary, hasClassCount(0));
assertThat(cuSummary, hasEnumCount(0));
assertThat(cuSummary, hasInterfaceCount(2));
assertThat(cuSummary, hasInterface("SecondOuterInterface"));
assertThat(cuSummary, hasInterface("OuterInterface"));
InterfaceSummary interfaceSummary = cuSummary.getInterfaceSummary("OuterInterface");
assertThat(interfaceSummary, hasSuperInterface(SERIALIZABLE));
assertThat(interfaceSummary, hasSuperInterfaceCount(1));
assertThat(interfaceSummary, hasField("MY_NAME"));
assertThat(interfaceSummary, hasFieldCount(1));
assertThat(interfaceSummary, hasMethod("doSomething(int)"));
assertThat(interfaceSummary, hasMethod("doSomethingElse()"));
assertThat(interfaceSummary, hasMethodCount(2));
verifyInners(interfaceSummary);
}
private void verifyInners(AbstractSummary summary) {
assertThat(summary, hasClass("InnerClass"));
verifyInnerClass(summary.getClassSummary("InnerClass"));
assertThat(summary, hasClassCount(1));
assertThat(summary, hasInterface("InnerInterface"));
verifyInnerInterface(summary.getInterfaceSummary("InnerInterface"));
assertThat(summary, hasInterfaceCount(1));
assertThat(summary, hasEnum("InnerEnum"));
verifyInnerEnum(summary.getEnumSummary("InnerEnum"));
assertThat(summary, hasEnumCount(1));
assertThat(summary, hasAnnotation("InnerAnnotation"));
verifyInnerAnnotation(summary.getAnnotationSummary("InnerAnnotation"));
assertThat(summary, hasAnnotationCount(1));
}
private void verifyInnerAnnotation(AnnotationSummary annotationSummary) {
assertThat(annotationSummary, hasAnnotationMember("amount"));
assertThat(annotationSummary, hasAnnotationMemberCount(1));
assertThat(annotationSummary, hasFieldCount(0));
assertThat(annotationSummary, hasClassCount(0));
assertThat(annotationSummary, hasEnumCount(0));
assertThat(annotationSummary, hasAnnotationCount(0));
assertThat(annotationSummary, hasInterfaceCount(0));
}
private void verifyInnerEnum(EnumSummary enumSummary) {
assertThat(enumSummary, hasEnumConstant("GEORGE"));
assertThat(enumSummary, hasEnumConstant("JANE"));
assertThat(enumSummary, hasEnumConstantCount(2));
assertThat(enumSummary, hasField("index"));
assertThat(enumSummary, hasFieldCount(1));
assertThat(enumSummary, hasMethod("InnerEnum(int)"));
assertThat(enumSummary, hasMethod("getIndex()"));
assertThat(enumSummary, hasMethodCount(2));
assertThat(enumSummary, hasClassCount(0));
assertThat(enumSummary, hasEnumCount(0));
assertThat(enumSummary, hasAnnotationCount(0));
assertThat(enumSummary, hasInterfaceCount(0));
assertThat(enumSummary, hasSuperInterfaceCount(0));
}
private void verifyInnerInterface(InterfaceSummary interfaceSummary) {
assertThat(interfaceSummary, hasMethod("execute()"));
assertThat(interfaceSummary, hasMethodCount(1));
assertThat(interfaceSummary, hasFieldCount(0));
assertThat(interfaceSummary, hasClassCount(0));
assertThat(interfaceSummary, hasEnumCount(0));
assertThat(interfaceSummary, hasAnnotationCount(0));
assertThat(interfaceSummary, hasInterfaceCount(0));
assertThat(interfaceSummary, hasSuperInterfaceCount(0));
}
private void verifyInnerClass(ClassSummary classSummary) {
assertThat(classSummary, hasMethod("getDescription()"));
assertThat(classSummary, hasMethod("setDescription(String)"));
assertThat(classSummary, hasMethodCount(2));
assertThat(classSummary, hasField("description"));
assertThat(classSummary, hasFieldCount(1));
assertThat(classSummary, hasClassCount(0));
assertThat(classSummary, hasEnumCount(0));
assertThat(classSummary, hasAnnotationCount(0));
assertThat(classSummary, hasInterfaceCount(0));
assertThat(classSummary, hasSuperInterfaceCount(0));
assertThat(classSummary, hasSuperClass(nullValue()));
}
}