package org.limewire.ui.swing.table;
import org.limewire.util.BaseTestCase;
public class TrackComparatorTest extends BaseTestCase{
public TrackComparatorTest(String name) {
super(name);
}
/**
* Test various situations where at least one of the descriptors
* is null or empty.
*/
public void testNullsAndEmpties() {
TrackComparator comparator = new TrackComparator();
assertEquals(0, comparator.compare(null, null));
assertEquals(0, comparator.compare("", null));
assertEquals(0, comparator.compare(null, ""));
assertEquals(0, comparator.compare("", ""));
assertEquals(0, comparator.compare(" \r\r ", ""));
assertEquals(0, comparator.compare("", " \n\n\n\n\r "));
assertEquals(0, comparator.compare(" ", " "));
assertEquals(0, comparator.compare(" ", null));
assertEquals(0, comparator.compare(null, " "));
assertEquals(0, comparator.compare(" ", null));
assertEquals(-1, comparator.compare("", "410"));
assertEquals(-1, comparator.compare(" ", "405"));
assertEquals(-1, comparator.compare(null, "280"));
assertEquals(-1, comparator.compare(null, "95055/10003"));
assertEquals(-1, comparator.compare(" ", "27960/L6H"));
assertEquals(-1, comparator.compare("", "10000/DF"));
assertEquals(-1, comparator.compare(null, "(416)"));
assertEquals(-1, comparator.compare(" ", "(+44)"));
assertEquals(-1, comparator.compare("", "(+34)"));
assertEquals(1, comparator.compare("880", ""));
assertEquals(1, comparator.compare("680", " \t"));
assertEquals(1, comparator.compare("580", null));
assertEquals(1, comparator.compare("495/395", null));
assertEquals(1, comparator.compare("90/90", "\t "));
assertEquals(1, comparator.compare("290/190", ""));
assertEquals(1, comparator.compare("(905)", null));
assertEquals(1, comparator.compare("(+39)", " \t\t\t "));
assertEquals(1, comparator.compare("(519)", ""));
}
/**
* Tests basic comparisons in two basic numeric track descriptors.
*/
public void testBasic() {
TrackComparator comparator = new TrackComparator();
assertEquals(0, comparator.compare("5", "5"));
assertEquals(0, comparator.compare("-3", "-03"));
assertEquals(0, comparator.compare("08", "08"));
assertEquals(0, comparator.compare("00003", "003"));
assertEquals(0, comparator.compare(" 100 ", " 100 "));
assertEquals(1, comparator.compare("10110011111001101", "10002"));
assertEquals(-1, comparator.compare("10002", "10110011111001000"));
assertEquals(1, comparator.compare("-1", "-002"));
assertEquals(1, comparator.compare("500", "-800"));
assertEquals(1, comparator.compare(" 10110011111001101 ", " 10002"));
assertEquals(-1, comparator.compare("10002 ", "10110011111001000 "));
assertEquals(1, comparator.compare(" -1", " -002"));
assertEquals(1, comparator.compare("500 ", "-800"));
}
/**
* Tests comparisons of two X/Y fractional descriptors considering a simplification
* where only the numerator is considered.
*/
public void testFractionalComplex() {
TrackComparator comparator = new TrackComparator();
assertEquals(0, comparator.compare("5/5", "5/5"));
assertEquals(0, comparator.compare("-3/1", "-03/1"));
assertEquals(0, comparator.compare("08/-01", "08/-01k"));
assertEquals(0, comparator.compare("00003/11e1111", "003/1111e1111111"));
assertEquals(0, comparator.compare(" 100/-8abc ", " 100/ blapheraction "));
assertEquals(1, comparator.compare("10110011111001101/56", "10002/10002"));
assertEquals(-1, comparator.compare("10002/99", "1011001111100100/asdsa99"));
assertEquals(1, comparator.compare("-0/5", "-002/-0"));
assertEquals(1, comparator.compare("500/1", "-800/1"));
assertEquals(1, comparator.compare(" 10110011111001101/ kde ", " 10002/kruler "));
assertEquals(-1, comparator.compare("10002/fyrefax ", "10110011111001000/5tundabyrd "));
assertEquals(1, comparator.compare(" -1/*~##^N", " -002"));
assertEquals(1, comparator.compare("500/pingüinos ", "-800/ carrots!"));
}
public void testGibberish() {
TrackComparator comparator = new TrackComparator();
assertEquals(0, comparator.compare("a", "a"));
assertEquals(0, comparator.compare("bb", "bb"));
assertEquals(0, comparator.compare("cat", "cat"));
assertEquals(0, comparator.compare("dog/doggies", "dog/doggies"));
assertEquals(0, comparator.compare(" cat/kitties ", " cat/kitties "));
assertEquals(0, comparator.compare("aaaaaaaa", "aaaaaaaa"));
assertEquals(1, comparator.compare("b", "a"));
assertEquals(-1, comparator.compare("a", "b"));
assertEquals("carrots".compareTo("cranapples"), comparator.compare("carrots", "cranapples"));
assertEquals("patatobugs".compareTo("-1meelyworms"), comparator.compare("patatobugs", "-1meelyworms"));
assertEquals(" water lillez en big /treeses ".compareTo(" water lillez en big /treeses"),
comparator.compare(" water lillez en big /treeses ", " water lillez en big /treeses"));
assertEquals(0, comparator.compare("randomas$ortment of -characters españoles ",
"randomas$ortment of -characters españoles "));
}
/**
* Tests mixed comparisons not including those with null or empty.
*
* <p>That is tests mixing between simple, fractional-complex, and
* gibberish descriptors.
*/
public void testMixed() {
TrackComparator comparator = new TrackComparator();
assertEquals(-1, comparator.compare("a", "1"));
assertEquals(1, comparator.compare("1", "a"));
assertEquals(1, comparator.compare("1", "%"));
assertEquals(-1, comparator.compare("%", "1"));
assertEquals(1, comparator.compare("-1", "-one"));
assertEquals(1, comparator.compare("10/fwacsin", "10\fwacsin"));
assertEquals(1, comparator.compare(" 1/1 ", " 1+1 "));
assertEquals(-1, comparator.compare(" wan ", " -10000000000 "));
assertEquals(-1, comparator.compare("jibberinish ", "0"));
assertEquals(1, comparator.compare("0 ", "jibberinish "));
assertEquals(0, comparator.compare("1", "1/1"));
assertEquals(0, comparator.compare("1/1", "1"));
assertEquals(0, comparator.compare("111111/d", "111111"));
assertEquals(0, comparator.compare(" -182 ", " -0000182/2235435346345rdfg345"));
assertEquals(1, comparator.compare("123", "122/122"));
assertEquals(1, comparator.compare("-1001/1", " \t \t\n -1002"));
assertEquals(1, comparator.compare("1/2", "0"));
assertEquals(1, comparator.compare("15", "13/muskrats"));
assertEquals(-1, comparator.compare("111111/d", "111111111"));
assertEquals(-1, comparator.compare(" -183 ", " -0000182/2235435346345rdfg345"));
assertEquals(-1, comparator.compare(" 00000/00000 ", "1"));
assertEquals(-1, comparator.compare(" -1 ", " 00000/00000"));
}
/**
* Quick tests of big and small inputs to make sure bad things don't happen.
*/
public void testEdgeCases() {
TrackComparator comparator = new TrackComparator();
// Normal
assertEquals(-1, comparator.compare("12/birre", Long.toString(Long.MAX_VALUE)));
assertEquals(-1, comparator.compare(Long.toString(Long.MIN_VALUE)+"/1", Long.toString(Long.MAX_VALUE)));
assertEquals(1, comparator.compare(Long.toString(Long.MAX_VALUE)+"/1", Long.toString(Long.MIN_VALUE)));
assertEquals(0, comparator.compare(Long.toString(Long.MAX_VALUE), Long.toString(Long.MAX_VALUE)));
assertEquals(1, comparator.compare(Long.toString(Long.MAX_VALUE), "1"));
// Too big
assertEquals(-1, comparator.compare(Long.toString(Long.MAX_VALUE)+"99999/toohuuuuge", "0"));
assertEquals(1, comparator.compare(Long.toString(Long.MAX_VALUE)+"99999", Long.toString(Long.MAX_VALUE)+"99998"));
assertGreaterThan(0, comparator.compare("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaprogrammifyingRox!aaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaathis is funaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaa", "a"));
}
}