/*
* Copyright 2011 Henry Coles
*
* 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.pitest.mutationtest.engine.gregor;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
public class MethodInfoTest {
private static final int NON_STATIC_MODIFIER = 0;
private static final int NON_SYNTHETIC_MODIFIER = 0;
private static final String VOID_RETURN = "()V";
private static final String STRING_RETURN = "()Ljava/lang/String;";
private static final int STATIC_MODIFIER = Opcodes.ACC_STATIC;
private static final String NO_PARAMETERS = "()V";
private static final String ONE_PARAMETER = "(Ljava/lang/String;)V";
private static final int SYNTHETIC_MODIFIER = Opcodes.ACC_SYNTHETIC;
private static final ClassInfo ENUMERATION_CLASS = new ClassInfo(0, 0,
"", "",
"java/lang/Enum",
new String[0]);
private final MethodInfo methodInfo = new MethodInfo();
@Test
public void isVoidShouldReturnTrueWhenMethodIsVoid() {
final MethodInfo testee = this.methodInfo.withMethodDescriptor(VOID_RETURN);
assertThat(testee.isVoid(), is(true));
}
@Test
public void isVoidShouldReturnFalseWhenMethodIsNotVoid() {
final MethodInfo testee = this.methodInfo
.withMethodDescriptor(STRING_RETURN);
assertThat(testee.isVoid(), is(false));
}
@Test
public void isStaticShouldReturnTrueWhenMethodIsStatic() {
final MethodInfo testee = this.methodInfo.withAccess(STATIC_MODIFIER);
assertThat(testee.isStatic(), is(true));
}
@Test
public void isStaticShouldReturnFalseWhenMethodIsNotStatic() {
final MethodInfo testee = this.methodInfo.withAccess(NON_STATIC_MODIFIER);
assertThat(testee.isStatic(), is(false));
}
@Test
public void takesNoParametersShouldReturnTrueWhenMethodTakesNoParameters() {
final MethodInfo testee = this.methodInfo
.withMethodDescriptor(NO_PARAMETERS);
assertThat(testee.takesNoParameters(), is(true));
}
@Test
public void takesNoParametersShouldReturnFalseWhenMethodTakesOneParameter() {
final MethodInfo testee = this.methodInfo
.withMethodDescriptor(ONE_PARAMETER);
assertThat(testee.takesNoParameters(), is(false));
}
@Test
public void isConstructorShouldReturnTrueWhenMethodIsConstructor() {
final MethodInfo testee = this.methodInfo.withMethodName("<init>");
assertThat(testee.isConstructor(), is(true));
}
@Test
public void isConstructorShouldReturnTrueWhenMethodIsRegularMethod() {
final MethodInfo testee = this.methodInfo.withMethodName("toString");
assertThat(testee.isConstructor(), is(false));
}
@Test
public void isSyntheticShouldReturnTrueWhenSyntheticAccessFlagSet() {
final MethodInfo testee = this.methodInfo.withAccess(SYNTHETIC_MODIFIER);
assertThat(testee.isSynthetic(), is(true));
}
@Test
public void isSyntheticShouldReturnFalseWhenNoSyntheticAccessFlagSet() {
final MethodInfo testee = this.methodInfo
.withAccess(NON_SYNTHETIC_MODIFIER);
assertThat(testee.isSynthetic(), is(false));
}
@Test
public void isStaticInitializerShouldReturnTrueWhenMethodIsStaticInitializer() {
final MethodInfo testee = this.methodInfo.withMethodName("<clinit>");
assertThat(testee.isStaticInitializer(), is(true));
}
@Test
public void getReturnTypeReturnsCorrectReturnType() {
final MethodInfo testee = this.methodInfo
.withMethodDescriptor(STRING_RETURN);
assertThat(testee.getReturnType(), is(Type.getType(String.class)));
}
@Test
public void getDescriptionReturnsQualifiedMethodName() {
final String EXAMPLE_CLASS_NAME = "org.pitest.Example";
final ClassInfo EXAMPLE_CLASS_INFO = new ClassInfo(0, 0,
EXAMPLE_CLASS_NAME, "", "", new String[0]);
final String EXAMPLE_METHOD_NAME = "myMethod";
final String QUALIFIED_METHOD_NAME = EXAMPLE_CLASS_NAME + "::"
+ EXAMPLE_METHOD_NAME;
final MethodInfo testee = this.methodInfo.withOwner(EXAMPLE_CLASS_INFO)
.withMethodName(EXAMPLE_METHOD_NAME);
assertThat(testee.getDescription(), is(QUALIFIED_METHOD_NAME));
}
@Test
public void isGeneratedEnumMethodReturnsTrueIfMethodIsEnumValuesMethod() {
final MethodInfo testee = this.methodInfo.withOwner(ENUMERATION_CLASS)
.withAccess(STATIC_MODIFIER).withMethodName("values")
.withMethodDescriptor(NO_PARAMETERS);
assertThat(testee.isGeneratedEnumMethod(), is(true));
}
@Test
public void isGeneratedEnumMethodReturnsTrueIfMethodIsEnumValueOfMethod() {
final MethodInfo testee = this.methodInfo.withOwner(ENUMERATION_CLASS)
.withAccess(STATIC_MODIFIER).withMethodName("valueOf")
.withMethodDescriptor("(Ljava/lang/String;)Lorg/pitest/MyEnum;");
assertThat(testee.isGeneratedEnumMethod(), is(true));
}
@Test
public void isGeneratedEnumMethodReturnsTrueIfMethodIsStaticInitializerInEnum() {
final MethodInfo testee = this.methodInfo.withOwner(ENUMERATION_CLASS)
.withAccess(STATIC_MODIFIER).withMethodName("<clinit>");
assertThat(testee.isGeneratedEnumMethod(), is(true));
}
@Test
public void isGeneratedEnumMethodReturnsFalseForRegularEnumMethod() {
final MethodInfo testee = this.methodInfo.withOwner(ENUMERATION_CLASS)
.withMethodName("getOwner");
assertThat(testee.isGeneratedEnumMethod(), is(false));
}
@Test
public void isGeneratedEnumMethodReturnsFalseForNonEnumClasses() {
final ClassInfo EXAMPLE_CLASS_INFO = new ClassInfo(0, 0,
"org/pitest/Example", "", "java/lang/Object", new String[0]);
final MethodInfo testee = this.methodInfo.withOwner(EXAMPLE_CLASS_INFO)
.withAccess(STATIC_MODIFIER).withMethodName("values")
.withMethodDescriptor(NO_PARAMETERS);
assertThat(testee.isGeneratedEnumMethod(), is(false));
}
}