Skip to content

Commit

Permalink
made hasModifier accept Class parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
maciejmikosik committed Dec 5, 2014
1 parent fd573eb commit 5696996
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 32 deletions.
55 changes: 40 additions & 15 deletions main/java/org/testanza/testers/TestersForClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.junit.Assert.fail;

import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
Expand All @@ -10,19 +11,19 @@
import org.testanza.Tester;

public class TestersForClasses {
public static Tester<Member> hasModifier(final int modifier) {
return new BodyTester<Member>() {
protected String name(Member member) {
return type(member) + " " + simpleName(member) + " has modifier "
public static Tester<AnnotatedElement> hasModifier(final int modifier) {
return new BodyTester<AnnotatedElement>() {
protected String name(AnnotatedElement element) {
return kind(element) + " " + simpleName(element) + " has modifier "
+ Modifier.toString(modifier);
}

protected void body(Member member) throws Throwable {
if (!hasModifier(modifier, member)) {
protected void body(AnnotatedElement element) throws Throwable {
if (!hasModifier(modifier, element)) {
fail("" //
+ "\n" //
+ " expected that\n" //
+ " " + type(member) + " " + member.toString() + "\n" //
+ " " + fullName(element) + "\n" //
+ " has modifier\n" //
+ " " + Modifier.toString(modifier) + "\n" //
);
Expand All @@ -32,17 +33,41 @@ protected void body(Member member) throws Throwable {
};
}

private static boolean hasModifier(int modifier, final Member member) {
return (member.getModifiers() & modifier) != 0;
private static boolean hasModifier(int modifier, AnnotatedElement element) {
return (modifiers(element) & modifier) != 0;
}

private static String type(Member member) {
return member.getClass().getSimpleName().toLowerCase();
private static int modifiers(AnnotatedElement element) {
if (element instanceof Class<?>) {
return ((Class<?>) element).getModifiers();
} else if (element instanceof Member) {
return ((Member) element).getModifiers();
} else {
throw new RuntimeException("unknown element " + element);
}
}

private static String simpleName(Member member) {
return member instanceof Constructor
? member.getDeclaringClass().getSimpleName()
: member.getName();
private static String kind(AnnotatedElement element) {
return element.getClass().getSimpleName().toLowerCase();
}

private static String simpleName(AnnotatedElement element) {
if (element instanceof Class<?>) {
return ((Class<?>) element).getSimpleName();
} else if (element instanceof Constructor) {
return ((Constructor<?>) element).getDeclaringClass().getSimpleName();
} else if (element instanceof Member) {
return ((Member) element).getName();
} else {
throw new RuntimeException("unknown element " + element);
}
}

private static String fullName(AnnotatedElement element) {
if (element instanceof Class<?>) {
return element.toString();
} else {
return kind(element) + " " + element.toString();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import static org.testanza.describe_testanza.verify;
import static org.testanza.testers.TestersForClasses.hasModifier;

import java.lang.reflect.Member;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Modifier;

import junit.framework.Test;
Expand All @@ -13,7 +13,7 @@
import org.junit.runner.Result;

public class describe_TestersForClasses_hasModifier {
private static Member member;
private static AnnotatedElement item;
private static Test test;
private static Result result;
private static String name, message;
Expand All @@ -23,8 +23,8 @@ public static void succeeds_if_method_has_modifier() throws Throwable {
class TestClass {
final void testMethod() {}
}
member = TestClass.class.getDeclaredMethod("testMethod");
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredMethod("testMethod");
test = hasModifier(Modifier.FINAL).test(item);
result = new JUnitCore().run(test);
verify(0 == result.getFailureCount());
}
Expand All @@ -34,8 +34,28 @@ public static void fails_if_method_has_no_modifier() throws Throwable {
class TestClass {
void testMethod() {}
}
member = TestClass.class.getDeclaredMethod("testMethod");
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredMethod("testMethod");
test = hasModifier(Modifier.FINAL).test(item);
result = new JUnitCore().run(test);
verify(1 == result.getFailureCount());
}

public static void succeeds_if_class_has_modifier() throws Throwable {
@SuppressWarnings("unused")
final class TestClass {
final void testMethod() {}
}
test = hasModifier(Modifier.FINAL).test(TestClass.class);
result = new JUnitCore().run(test);
verify(0 == result.getFailureCount());
}

public static void fails_if_class_has_no_modifier() throws Throwable {
@SuppressWarnings("unused")
class TestClass {
void testMethod() {}
}
test = hasModifier(Modifier.FINAL).test(TestClass.class);
result = new JUnitCore().run(test);
verify(1 == result.getFailureCount());
}
Expand All @@ -45,15 +65,15 @@ public static void failure_prints_message() throws Throwable {
class TestClass {
void foo() {}
}
member = TestClass.class.getDeclaredMethod("foo");
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredMethod("foo");
test = hasModifier(Modifier.FINAL).test(item);
result = new JUnitCore().run(test);

message = result.getFailures().get(0).getMessage();
verify(message.contains("" //
+ "\n" //
+ " expected that\n" //
+ " method " + member.toString() + "\n" //
+ " method " + item.toString() + "\n" //
+ " has modifier\n" //
+ " final\n" //
));
Expand All @@ -64,8 +84,8 @@ public static void test_name_contains_modifier() throws Throwable {
class TestClass {
void testMethod() {}
}
member = TestClass.class.getDeclaredMethod("testMethod");
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredMethod("testMethod");
test = hasModifier(Modifier.FINAL).test(item);
name = ((TestCase) test).getName();
verify(name.contains("final"));
}
Expand All @@ -79,19 +99,24 @@ class TestClass {

void foo() {}
}
member = TestClass.class.getDeclaredMethod("foo");
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredMethod("foo");
test = hasModifier(Modifier.FINAL).test(item);
name = ((TestCase) test).getName();
verify(name.contains("method foo"));

member = TestClass.class.getDeclaredField("foo");
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredField("foo");
test = hasModifier(Modifier.FINAL).test(item);
name = ((TestCase) test).getName();
verify(name.contains("field foo"));

member = TestClass.class.getDeclaredConstructor();
test = hasModifier(Modifier.FINAL).test(member);
item = TestClass.class.getDeclaredConstructor();
test = hasModifier(Modifier.FINAL).test(item);
name = ((TestCase) test).getName();
verify(name.contains("constructor TestClass"));

item = TestClass.class;
test = hasModifier(Modifier.FINAL).test(item);
name = ((TestCase) test).getName();
verify(name.contains("class TestClass"));
}
}

0 comments on commit 5696996

Please sign in to comment.