Skip to content

Commit 22d8b51

Browse files
ulleniusJohannestegner
authored andcommitted
Implement Comparable interface
1 parent adca423 commit 22d8b51

File tree

2 files changed

+66
-11
lines changed

2 files changed

+66
-11
lines changed

src/main/java/dev/personnummer/Personnummer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
* @author Johannes Tegnér
1111
*/
12-
public final class Personnummer {
12+
public final class Personnummer implements Comparable<Personnummer> {
1313
private static final Pattern regexPattern;
1414

1515
static {
@@ -241,6 +241,10 @@ public boolean equals(Object obj) {
241241
Personnummer other = (Personnummer) obj;
242242
return Objects.equals(format(true), other.format(true));
243243
}
244-
244+
245+
@Override
246+
public int compareTo(Personnummer other) {
247+
return format(true).compareTo(other.format(true));
248+
}
245249

246250
}
Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
import static org.junit.jupiter.api.Assertions.*;
2-
import org.junit.jupiter.api.Test;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import org.junit.jupiter.api.*;
37
import dev.personnummer.*;
48

59
class PersonnummerEqualsHashcode {
6-
10+
11+
private static final String YOUNG_LONG_FORMAT = "201701022384";
12+
713
@Test
814
void testEquals() throws PersonnummerException {
915

10-
assertEquals(new Personnummer("201701022384"), new Personnummer("201701022384"));
11-
assertEquals(new Personnummer("201701022384"), new Personnummer("20170102-2384"));
12-
assertEquals(new Personnummer("201701022384"), new Personnummer("20170102+2384"));
13-
assertEquals(new Personnummer("201701022384"), new Personnummer("170102-2384"));
16+
assertEquals(new Personnummer(YOUNG_LONG_FORMAT), new Personnummer(YOUNG_LONG_FORMAT));
17+
assertEquals(new Personnummer(YOUNG_LONG_FORMAT), new Personnummer("20170102-2384"));
18+
assertEquals(new Personnummer(YOUNG_LONG_FORMAT), new Personnummer("20170102+2384"));
19+
assertEquals(new Personnummer(YOUNG_LONG_FORMAT), new Personnummer("170102-2384"));
1420

1521
assertNotEquals(new Personnummer("170102+2384"), new Personnummer("170102-2384"));
16-
assertNotEquals(new Personnummer("201701022384"), new Personnummer("191701022384"));
22+
assertNotEquals(new Personnummer(YOUNG_LONG_FORMAT), new Personnummer("191701022384"));
1723
assertNotEquals(new Personnummer("20170102-2384"), new Personnummer("19170102-2384"));
1824
assertNotEquals(new Personnummer("20170102+2384"), new Personnummer("19170102+2384"));
1925

@@ -22,7 +28,7 @@ void testEquals() throws PersonnummerException {
2228
@Test
2329
void testHashCode() throws PersonnummerException {
2430

25-
Personnummer young = new Personnummer("201701022384");
31+
Personnummer young = new Personnummer(YOUNG_LONG_FORMAT);
2632
Personnummer young2 = new Personnummer("1701022384");
2733
Personnummer other = new Personnummer("194308239088");
2834

@@ -34,9 +40,54 @@ void testHashCode() throws PersonnummerException {
3440
@Test
3541
void testToString() throws PersonnummerException {
3642

37-
Personnummer young = new Personnummer("201701022384");
43+
Personnummer young = new Personnummer(YOUNG_LONG_FORMAT);
3844
assertEquals("170102-2384", young.toString());
3945
assertEquals(young.format(), young.toString());
4046
}
4147

48+
@Test
49+
void naturalOrderingWorks() throws PersonnummerException {
50+
51+
List<Personnummer> numbers = new ArrayList<>();
52+
53+
final Personnummer retiree = new Personnummer("194308239088");
54+
final Personnummer young = new Personnummer(YOUNG_LONG_FORMAT);
55+
final Personnummer centenarian = new Personnummer("170102+2384");
56+
57+
58+
numbers.add(retiree);
59+
numbers.add(young);
60+
numbers.add(centenarian);
61+
numbers.add(retiree);
62+
assertEquals(4, numbers.size());
63+
64+
numbers.sort(null);
65+
66+
assertEquals(centenarian, numbers.get(0));
67+
assertEquals(retiree, numbers.get(1));
68+
assertEquals(retiree, numbers.get(2));
69+
assertEquals(young, numbers.get(3));
70+
}
71+
72+
@Test
73+
void testLongFormat() throws PersonnummerException {
74+
75+
final Personnummer centenarian = new Personnummer("170102+2384");
76+
assertEquals("191701022384", centenarian.format(true));
77+
}
78+
79+
80+
@Test()
81+
void disallowNullValuesForOrdering() throws PersonnummerException {
82+
83+
final Personnummer young = new Personnummer(YOUNG_LONG_FORMAT);
84+
85+
assertFalse(young.equals(null));
86+
assertThrows(NullPointerException.class, () -> {
87+
young.compareTo(null);
88+
});
89+
90+
91+
}
92+
4293
}

0 commit comments

Comments
 (0)