/* * Copyright (C) 2011. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 or * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ package uk.me.parabola.imgfmt.app.srt; import java.io.Reader; import java.io.StringReader; import java.text.Collator; import uk.me.parabola.mkgmap.srt.SrtTextReader; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; /** * Tests for characters that are expanded into two or more sort * positions. */ public class SortExpandTest { private Sort sort; private Collator collator; @Before public void setUp() throws Exception { Reader r = new StringReader("codepage 1252\n" + "code 01\n" + "code a, A; â, Â < b, B\n" + "code c < d < e <f < g < h < i < j < k < l < m < n < o\n" + "code p < q < r,R < s,S < t,T < u < v < w < x < y < z\n" + "expand ß to s s\n"); SrtTextReader srr = new SrtTextReader(r); sort = srr.getSort(); collator = sort.getCollator(); } @Test public void testNormal() { checkOrder("asßst", "astst"); checkOrder("asrst", "asßst"); } /** * Expanded letters should sort equal to what they expand to. */ @Test public void testAgainstExpansion() { assertEquals(0, compareKey("asssst", "asßst")); } @Test public void testExpandSize() { // make sure buffer doesn't overflow when all characters are expanded. assertEquals(0, compareKey("……………………", "……………………")); } private int compareKey(String s1, String s2) { SortKey<Object> key1 = sort.createSortKey(null, s1); SortKey<Object> key2 = sort.createSortKey(null, s2); return key1.compareTo(key2); } @Test public void testGreaterThanInExpansion() { checkOrder("aßzaa", "astb"); } @Test public void testLessThanInExpansion() { checkOrder("asrb", "aßaaa"); } /** * Check and assert that the second string is greater than the first. * @param s First string. * @param s1 Second string. */ private void checkOrder(String s, String s1) { SortKey<Object> k1 = sort.createSortKey(null, s); SortKey<Object> k2 = sort.createSortKey(null, s1); assertEquals(1, k2.compareTo(k1)); assertEquals(-1, k1.compareTo(k2)); assertEquals(-1, collator.compare(s, s1)); assertEquals(1, collator.compare(s1, s)); } }