Skip to content

Commit 6549e41

Browse files
magkrausemaibin
authored andcommitted
BAEL-1579: Hamcrest custom matchers. (eugenp#3905)
* BAEL-1579: Hamcrest custom matchers. * BAEL-1589: Removing hamcrest dependency test scope.
1 parent 48b8d2c commit 6549e41

File tree

5 files changed

+127
-1
lines changed

5 files changed

+127
-1
lines changed

testing-modules/mockito/pom.xml

-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
<groupId>org.hamcrest</groupId>
5252
<artifactId>java-hamcrest</artifactId>
5353
<version>${hamcrest.version}</version>
54-
<scope>test</scope>
5554
</dependency>
5655

5756
</dependencies>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.baeldung.hamcrest.custommatchers;
2+
3+
import org.hamcrest.Description;
4+
import org.hamcrest.Matcher;
5+
import org.hamcrest.TypeSafeMatcher;
6+
7+
public class IsDivisibleBy extends TypeSafeMatcher<Integer> {
8+
9+
private Integer divider;
10+
11+
private IsDivisibleBy(Integer divider) {
12+
this.divider = divider;
13+
}
14+
15+
@Override
16+
protected boolean matchesSafely(Integer dividend) {
17+
return ((dividend % divider) == 0);
18+
}
19+
20+
@Override
21+
public void describeTo(Description description) {
22+
description.appendText("divisible by " + divider);
23+
}
24+
25+
public static Matcher<Integer> divisibleBy(Integer divider) {
26+
return new IsDivisibleBy(divider);
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.baeldung.hamcrest.custommatchers;
2+
3+
import org.hamcrest.Description;
4+
import org.hamcrest.Matcher;
5+
import org.hamcrest.TypeSafeMatcher;
6+
7+
public class IsOnlyNumbers extends TypeSafeMatcher<String> {
8+
9+
@Override
10+
protected boolean matchesSafely(String s) {
11+
try {
12+
Integer.parseInt(s);
13+
return true;
14+
} catch (NumberFormatException nfe) {
15+
return false;
16+
}
17+
}
18+
19+
@Override
20+
public void describeTo(Description description) {
21+
description.appendText("only numbers");
22+
}
23+
24+
public static Matcher<String> onlyNumbers() {
25+
return new IsOnlyNumbers();
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.baeldung.hamcrest.custommatchers;
2+
3+
import org.hamcrest.Description;
4+
import org.hamcrest.Matcher;
5+
import org.hamcrest.TypeSafeMatcher;
6+
7+
public class IsUppercase extends TypeSafeMatcher<String> {
8+
9+
@Override
10+
protected boolean matchesSafely(String s) {
11+
return s.equals(s.toUpperCase());
12+
}
13+
14+
@Override
15+
public void describeTo(Description description) {
16+
description.appendText("all uppercase");
17+
}
18+
19+
public static Matcher<String> uppercase() {
20+
return new IsUppercase();
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.baeldung.hamcrest;
2+
3+
import org.junit.Test;
4+
5+
import static org.baeldung.hamcrest.custommatchers.IsDivisibleBy.divisibleBy;
6+
import static org.baeldung.hamcrest.custommatchers.IsOnlyNumbers.onlyNumbers;
7+
import static org.baeldung.hamcrest.custommatchers.IsUppercase.uppercase;
8+
import static org.hamcrest.MatcherAssert.assertThat;
9+
import static org.hamcrest.Matchers.is;
10+
import static org.hamcrest.Matchers.not;
11+
12+
public class HamcrestCustomUnitTest {
13+
14+
@Test
15+
public final void givenAString_whenIsOnlyNumbers_thenCorrect() {
16+
String numbers = "123";
17+
18+
assertThat(numbers, is(onlyNumbers()));
19+
}
20+
21+
@Test
22+
public final void givenAString_whenIsNotOnlyNumbers_thenCorrect() {
23+
String numbers = "123ABC";
24+
25+
assertThat(numbers, is(not(onlyNumbers())));
26+
}
27+
28+
@Test
29+
public final void givenAString_whenIsUppercase_thenCorrect() {
30+
String uppercaseWord = "HELLO";
31+
32+
assertThat(uppercaseWord, is(uppercase()));
33+
}
34+
35+
@Test
36+
public final void givenAnEvenInteger_whenDivisibleByTwo_thenCorrect() {
37+
Integer ten = 10;
38+
Integer two = 2;
39+
40+
assertThat(ten, is(divisibleBy(two)));
41+
}
42+
43+
@Test
44+
public final void givenAnOddInteger_whenNotDivisibleByTwo_thenCorrect() {
45+
Integer eleven = 11;
46+
Integer two = 2;
47+
48+
assertThat(eleven, is(not(divisibleBy(two))));
49+
}
50+
}

0 commit comments

Comments
 (0)