/**
* 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 java.io.Serializable;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mybatis.generator.eclipse.tests.harness.Utilities;
import org.mybatis.generator.eclipse.tests.harness.Utilities.CantCreateInstanceException;
import org.mybatis.generator.eclipse.tests.harness.matchers.HasCount;
import org.mybatis.generator.eclipse.tests.harness.matchers.HasElement;
import org.mybatis.generator.eclipse.tests.harness.matchers.HasElementWithValue;
import org.mybatis.generator.eclipse.tests.harness.summary.CompilationUnitSummary;
public class MatcherTest {
private static final String FAKE_ENUM = "FakeEnum";
private static final String INNER_ENUM = "InnerEnum";
private static final String UNRELIABLE_COUNT = "unreliableCount";
private static final String SECOND_OUTER_CLASS = "SecondOuterClass";
private static final String INNER_ANNOTATION = "InnerAnnotation";
private static final String INNER_INTERFACE = "InnerInterface";
private static final String INNER_CLASS = "InnerClass";
private static final String FAKE_ANNOTATION = "FakeAnnotation";
private static final String FAKE_INTERFACE = "FakeInterface";
private static final String FAKE_CLASS = "FakeClass";
private static final String OUTER_CLASS = "OuterClass";
private static CompilationUnitSummary cuSummary;
@BeforeClass
public static void beforeClass() throws IOException {
InputStream resource = MatcherTest.class.getResourceAsStream("/org/mybatis/generator/eclipse/tests/harness/tests/resources/OuterClass.src");
cuSummary = getCompilationUnitSummaryFromResource(resource);
}
@Test
public void voidTestHasImportSucceeds() {
assertThat(cuSummary, hasImport("import java.io.Serializable"));
}
@Test(expected=AssertionError.class)
public void voidTestHasImportFails() {
assertThat(cuSummary, hasImport("import foo.Bar"));
}
@Test
public void voidTestHasImportCountSucceeds() {
assertThat(cuSummary, hasImportCount(2));
}
@Test(expected=AssertionError.class)
public void voidTestHasImportCountFails() {
assertThat(cuSummary, hasImportCount(3));
}
@Test
public void testHasClassSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS));
}
@Test(expected=AssertionError.class)
public void testHasClassFails() {
assertThat(cuSummary, hasClass(FAKE_CLASS));
}
@Test
public void testWithClassSucceeds() {
assertThat(cuSummary, withClass(OUTER_CLASS));
}
@Test(expected=AssertionError.class)
public void testWithClassFails() {
assertThat(cuSummary, withClass(FAKE_CLASS));
}
@Test
public void testHasClassWithClassSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withClass(INNER_CLASS)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithClassFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withClass(FAKE_CLASS)));
}
@Test
public void testHasClassWithClassCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withClassCount(1)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithClassCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withClassCount(2)));
}
@Test
public void testHasClassWithClassWithFieldCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withClass(INNER_CLASS, withFieldCount(1))));
}
@Test
public void testHasClassWithEnumSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnum(INNER_ENUM)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithEnumFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnum(FAKE_ENUM)));
}
@Test
public void testHasClassWithEnumCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnumCount(1)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithEnumCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnumCount(2)));
}
@Test
public void testHasClassWithInterfaceSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withInterface(INNER_INTERFACE)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithInterfaceFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withInterface(FAKE_INTERFACE)));
}
@Test
public void testHasClassWithInterfaceCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withInterfaceCount(1)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithInterfaceCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withInterfaceCount(2)));
}
@Test
public void testHasClassWithInterfaceWithMethodSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withInterface(INNER_INTERFACE, withMethod("execute()"))));
}
@Test
public void testHasClassWithAnnotationSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(INNER_ANNOTATION)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithAnnotationFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(FAKE_ANNOTATION)));
}
@Test
public void testHasClassWithAnnotationCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotationCount(1)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithAnnotationCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotationCount(2)));
}
@Test
public void testHasClassWithFieldSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withField(UNRELIABLE_COUNT)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithFieldFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withField("fakeField")));
}
@Test
public void testHasClassWithFieldOfTypeSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withField(UNRELIABLE_COUNT, ofType("int"))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithFieldOfTypeFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withField(UNRELIABLE_COUNT, ofType("long"))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithFakeFieldOfTypeFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withField("fakeField", ofType("long"))));
}
@Test
public void testHasClassWithFieldCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withFieldCount(2)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithFieldCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withFieldCount(3)));
}
@Test
public void testHasClassWithMethodSucceeds() {
assertThat(cuSummary, hasClass(SECOND_OUTER_CLASS, withMethod("setId(int)")));
}
@Test(expected=AssertionError.class)
public void testHasClassWithMethodFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withMethod("setId(int)")));
}
@Test
public void testHasClassWithMethodCountSucceeds() {
assertThat(cuSummary, hasClass(SECOND_OUTER_CLASS, withMethodCount(2)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithMethodCountFails() {
assertThat(cuSummary, hasClass(SECOND_OUTER_CLASS, withMethodCount(3)));
}
@Test
public void testHasClassWithSuperClassSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withSuperClass("ArrayList<String>")));
}
@Test(expected=AssertionError.class)
public void testHasClassWithNullSuperClassFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withSuperClass(nullValue())));
}
@Test
public void testHasClassWithNullSuperClassSucceeds() {
assertThat(cuSummary, hasClass(SECOND_OUTER_CLASS, withSuperClass(nullValue())));
}
@Test(expected=AssertionError.class)
public void testHasClassWithSuperClassFails() {
assertThat(cuSummary, hasClass(SECOND_OUTER_CLASS, withSuperClass(FAKE_CLASS)));
}
@Test
public void testHasClassWithSuperInterfaceSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withSuperInterface("Serializable")));
}
@Test(expected=AssertionError.class)
public void testHasClassWithSuperInterfaceFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withSuperInterface(FAKE_INTERFACE)));
}
@Test
public void testHasClassWithSuperInterfaceCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withSuperInterfaceCount(1)));
}
@Test(expected=AssertionError.class)
public void testHasClassWithSuperInterfaceCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withSuperInterfaceCount(2)));
}
@Test
public void testHasClassWithEnumWithEnumConstantSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnum(INNER_ENUM, withEnumConstant("GEORGE"))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithEnumWithEnumConstantFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnum(INNER_ENUM, withEnumConstant("FRED"))));
}
@Test
public void testHasClassWithEnumWithEnumConstantCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnum(INNER_ENUM, withEnumConstantCount(2))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithEnumWithEnumConstantCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnum(INNER_ENUM, withEnumConstantCount(3))));
}
@Test
public void testHasClassWithAnnotationWithAnnotationMemberSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(INNER_ANNOTATION, withAnnotationMember("amount"))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithAnnotationWithAnnotationMemberFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(INNER_ANNOTATION, withAnnotationMember("fakeMember"))));
}
@Test
public void testHasClassWithAnnotationWithAnnotationMemberCountSucceeds() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(INNER_ANNOTATION, withAnnotationMemberCount(1))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithAnnotationWithAnnotationMemberCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(INNER_ANNOTATION, withAnnotationMemberCount(2))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithAnnotationWithFakeAnnotationMemberCountFails() {
assertThat(cuSummary, hasClass(OUTER_CLASS, withAnnotation(FAKE_ANNOTATION, withAnnotationMemberCount(2))));
}
@Test(expected=AssertionError.class)
public void testHasClassWithEnumConstantCountFails() {
// the compiler allows us to write tests that don't make any sense,
// but the tests fail at runtime.
assertThat(cuSummary, hasClass(OUTER_CLASS, withEnumConstantCount(0)));
}
@Test(expected=CantCreateInstanceException.class)
public void testCreateInstanceFails() {
Utilities.newInstance(Serializable.class);
}
@Test
public void notATest() {
// this is not a test - it exercises some methods in classes with enums
// to clear up some code coverage noise
HasCount.Type.values();
HasElement.Type.values();
HasElementWithValue.Type.values();
}
}