package org.threadly.util; import static org.junit.Assert.*; import static org.threadly.TestConstants.*; import java.util.ArrayList; import java.util.List; import org.junit.Test; @SuppressWarnings("javadoc") public class PairTest { protected <T> Pair<T, T> makePair(T left, T right) { return new Pair<>(left, right); } @Test public void splitTest() { List<String> expectedLeftResult = new ArrayList<String>(TEST_QTY); List<String> expectedRightResult = new ArrayList<String>(TEST_QTY); List<Pair<String, String>> pairs = new ArrayList<Pair<String, String>>(TEST_QTY * 2); for (int i = 0; i < TEST_QTY; i++) { String leftStr = StringUtils.makeRandomString(10); String rightStr = StringUtils.makeRandomString(5); expectedLeftResult.add(leftStr); expectedRightResult.add(rightStr); pairs.add(makePair(leftStr, null)); pairs.add(makePair(null, rightStr)); } Pair<List<String>, List<String>> result = Pair.split(pairs); assertEquals(TEST_QTY, result.getLeft().size()); assertEquals(TEST_QTY, result.getRight().size()); assertTrue(expectedLeftResult.equals(result.getLeft())); assertTrue(expectedRightResult.equals(result.getRight())); } @Test public void collectLeftTest() { List<String> expectedResult = new ArrayList<>(TEST_QTY); List<Pair<String, String>> pairs = new ArrayList<>(TEST_QTY * 2); for (int i = 0; i < TEST_QTY; i++) { String str = StringUtils.makeRandomString(10); expectedResult.add(str); pairs.add(makePair(str, StringUtils.makeRandomString(5))); pairs.add(makePair(null, StringUtils.makeRandomString(5))); } List<String> result = Pair.collectLeft(pairs); assertEquals(TEST_QTY, result.size()); assertTrue(expectedResult.equals(result)); } @Test public void collectRightTest() { List<String> expectedResult = new ArrayList<>(TEST_QTY); List<Pair<String, String>> pairs = new ArrayList<>(TEST_QTY * 2); for (int i = 0; i < TEST_QTY; i++) { String str = StringUtils.makeRandomString(10); expectedResult.add(str); pairs.add(makePair(StringUtils.makeRandomString(5), str)); pairs.add(makePair(StringUtils.makeRandomString(5), null)); } List<String> result = Pair.collectRight(pairs); assertEquals(TEST_QTY, result.size()); assertTrue(expectedResult.equals(result)); } @Test public void containsLeftTest() { containsLeftTest(StringUtils.makeRandomString(10)); } @Test public void containsLeftNullTest() { containsLeftTest(null); } private void containsLeftTest(String searchStr) { String rightStr = StringUtils.makeRandomString(20); List<Pair<String, String>> pairs = new ArrayList<>(TEST_QTY + 1); for (int i = 0; i < TEST_QTY; i++) { if (i == TEST_QTY / 2) { pairs.add(makePair(searchStr, rightStr)); } pairs.add(makePair(StringUtils.makeRandomString(5), rightStr)); } assertFalse(Pair.containsLeft(pairs, rightStr)); assertTrue(Pair.containsLeft(pairs, searchStr)); } @Test public void containsRightTest() { containsRightTest(StringUtils.makeRandomString(10)); } @Test public void containsRightNullTest() { containsRightTest(StringUtils.makeRandomString(10)); } private void containsRightTest(String searchStr) { String leftStr = StringUtils.makeRandomString(20); List<Pair<String, String>> pairs = new ArrayList<>(TEST_QTY + 1); for (int i = 0; i < TEST_QTY; i++) { if (i == TEST_QTY / 2) { pairs.add(makePair(leftStr, searchStr)); } pairs.add(makePair(leftStr, StringUtils.makeRandomString(5))); } assertFalse(Pair.containsRight(pairs, leftStr)); assertTrue(Pair.containsRight(pairs, searchStr)); } @Test public void getRightFromLeftTest() { getRightFromLeftTest(StringUtils.makeRandomString(10)); } @Test public void getRightFromLeftNullTest() { getRightFromLeftTest(null); } private void getRightFromLeftTest(String searchStr) { String rightStr = StringUtils.makeRandomString(20); List<Pair<String, String>> pairs = new ArrayList<>(TEST_QTY + 1); for (int i = 0; i < TEST_QTY; i++) { if (i == TEST_QTY / 2) { pairs.add(makePair(searchStr, rightStr)); } pairs.add(makePair(StringUtils.makeRandomString(5), StringUtils.makeRandomString(5))); } assertTrue(Pair.getRightFromLeft(pairs, searchStr) == rightStr); } @Test public void getLeftFromRightTest() { getLeftFromRightTest(StringUtils.makeRandomString(10)); } @Test public void getLeftFromRightNullTest() { getLeftFromRightTest(null); } private void getLeftFromRightTest(String searchStr) { String leftStr = StringUtils.makeRandomString(20); List<Pair<String, String>> pairs = new ArrayList<>(TEST_QTY + 1); for (int i = 0; i < TEST_QTY; i++) { if (i == TEST_QTY / 2) { pairs.add(makePair(leftStr, searchStr)); } pairs.add(makePair(StringUtils.makeRandomString(5), StringUtils.makeRandomString(5))); } assertTrue(Pair.getLeftFromRight(pairs, searchStr) == leftStr); } @Test public void constructAndGetNullTest() { Pair<String, String> p = makePair(null, null); assertNull(p.getLeft()); assertNull(p.getRight()); } @Test public void constructAndGetTest() { String leftStr = StringUtils.makeRandomString(10); String rightStr = StringUtils.makeRandomString(10); Pair<String, String> p =makePair(leftStr, rightStr); assertTrue(p.getLeft() == leftStr); assertTrue(p.getRight() == rightStr); } @Test public void toStringTest() { String leftStr = StringUtils.makeRandomString(10); String rightStr = StringUtils.makeRandomString(10); Pair<String, String> p = makePair(leftStr, rightStr); String result = p.toString(); assertTrue(result.contains(leftStr)); assertTrue(result.contains(rightStr)); assertTrue(result.indexOf(leftStr) < result.indexOf(rightStr)); } @Test public void equalsNullTest() { Pair<String, String> p1 = makePair(null, null); Pair<String, String> p2 = makePair(null, null); assertTrue(p1.equals(p1)); assertTrue(p1.equals(p2)); } @Test public void equalsTest() { String leftStr = StringUtils.makeRandomString(10); String rightStr = StringUtils.makeRandomString(10); Pair<String, String> p1 = makePair(leftStr, rightStr); Pair<String, String> p2 = makePair(leftStr, rightStr); assertTrue(p1.equals(p1)); assertTrue(p1.equals(p2)); } @Test public void equalsNullFailTest() { Pair<String, String> p1 = makePair(null, null); Pair<String, String> p2 = makePair(StringUtils.makeRandomString(10), null); Pair<String, String> p3 = makePair(null, StringUtils.makeRandomString(10)); assertFalse(p1.equals(p2)); assertFalse(p1.equals(p3)); assertFalse(p2.equals(p3)); } @Test public void equalsFailTest() { Pair<String, String> p1 = makePair(StringUtils.makeRandomString(5), StringUtils.makeRandomString(5)); Pair<String, String> p2 = makePair(StringUtils.makeRandomString(5), StringUtils.makeRandomString(5)); assertFalse(p1.equals(p2)); } @Test public void hashCodeNullTest() { Pair<String, String> p1 = makePair(null, null); Pair<String, String> p2 = makePair(null, null); Pair<String, String> p3 = makePair(StringUtils.makeRandomString(10), null); Pair<String, String> p4 = makePair(null, StringUtils.makeRandomString(10)); assertEquals(p1.hashCode(), p2.hashCode()); assertTrue(p1.hashCode() != p3.hashCode()); assertTrue(p1.hashCode() != p4.hashCode()); assertTrue(p3.hashCode() != p4.hashCode()); } }