1 package emissary.util;
2
3 import emissary.core.BaseDataObject;
4 import emissary.core.DataObjectFactory;
5 import emissary.core.IBaseDataObject;
6 import emissary.test.core.junit5.UnitTest;
7
8 import org.junit.jupiter.api.Test;
9
10 import java.util.List;
11 import java.util.stream.Collectors;
12
13 import static org.junit.jupiter.api.Assertions.assertEquals;
14 import static org.junit.jupiter.api.Assertions.assertIterableEquals;
15 import static org.junit.jupiter.api.Assertions.assertThrows;
16
17 class ShortNameComparatorTest extends UnitTest {
18
19 private static final String ABC = "abc";
20 private static final String DEF = "def";
21 private static final String FOO_ATT_ABC = "foo-att-abc";
22 private static final String FOO_ATT_DEF = "foo-att-def";
23 private static final String FOO_ATT_1 = "foo-att-1";
24 private static final String FOO_ATT_2 = "foo-att-2";
25 private static final String FOO_ATT_1_ATT_1 = "foo-att-1-att-1";
26 private static final String FOO_ATT_1_ATT_2 = "foo-att-1-att-2";
27 private static final String FOO_ATT_10 = "foo-att-10";
28 private static final String FOO_ATT_10_ATT_1 = "foo-att-10-att-1";
29
30 private static final ShortNameComparator COMPARATOR = new ShortNameComparator();
31
32 @Test
33 void testParameters() {
34 final ShortNameComparator comparator = new ShortNameComparator();
35 final IBaseDataObject ibdo = new BaseDataObject();
36
37 assertThrows(IllegalArgumentException.class, () -> comparator.compare(null, ibdo));
38 assertThrows(IllegalArgumentException.class, () -> comparator.compare(ibdo, null));
39 }
40
41 @Test
42 void testComparator() {
43 check(ABC, DEF, 0);
44 check(FOO_ATT_ABC, FOO_ATT_DEF, -3);
45 check(FOO_ATT_1, FOO_ATT_2, -1);
46 check(FOO_ATT_1, FOO_ATT_10, -9);
47 check(FOO_ATT_1, FOO_ATT_1_ATT_1, -1);
48 }
49
50 @Test
51 void testListSorting() {
52
53 List<String> unsorted = List.of(
54 FOO_ATT_1,
55 FOO_ATT_10,
56 FOO_ATT_2,
57 FOO_ATT_10_ATT_1,
58 FOO_ATT_1_ATT_2,
59 FOO_ATT_1_ATT_1);
60
61
62 List<String> actual = unsorted
63 .stream()
64 .map(name -> DataObjectFactory.getInstance(new byte[0], name))
65 .sorted(COMPARATOR)
66 .map(IBaseDataObject::shortName)
67 .collect(Collectors.toList());
68
69
70 List<String> expected = List.of(
71 FOO_ATT_1,
72 FOO_ATT_1_ATT_1,
73 FOO_ATT_1_ATT_2,
74 FOO_ATT_2,
75 FOO_ATT_10,
76 FOO_ATT_10_ATT_1);
77
78
79 assertIterableEquals(expected, actual, "List wasn't sorted in the expected order");
80 }
81
82 private static void check(final String name1, final String name2, final int forwardResult) {
83 final IBaseDataObject ibdo1 = new BaseDataObject(null, name1);
84 final IBaseDataObject ibdo2 = new BaseDataObject(null, name2);
85 final ShortNameComparator snc = new ShortNameComparator();
86
87 assertEquals(forwardResult, snc.compare(ibdo1, ibdo2));
88 assertEquals(-forwardResult, snc.compare(ibdo2, ibdo1));
89 }
90 }