Rev 3197 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright (C) 2010.
*
* 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.mkgmap.srt;
import java.io.CharArrayReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.nio.charset.Charset;
import uk.me.parabola.imgfmt.app.srt.Sort;
import org.junit.Test;
import static org.junit.Assert.*;
public class SrtTextReaderTest
{
private static final String BASE =
"# comment\n" +
"\n" +
"codepage 1252\n" +
"code 01, 02, 03\n";
private static final Charset charset =
Charset.
forName("cp1252");
/**
* Test for a simple case of two letters that have the same major and minor
* sort codes.
*/
@Test
public void testSimple
() throws Exception {
char[] sortcodes = getSortcodes
("code a, A\n");
assertEquals
("major code",
1, major
(sortcodes
['a']));
assertEquals
("major code",
1, major
(sortcodes
['A']));
assertEquals
("minor code",
1, minor
(sortcodes
['a']));
assertEquals
("minor code",
1, minor
(sortcodes
['A']));
assertEquals
("subminor code",
1, subminor
(sortcodes
['a']));
assertEquals
("subminor code",
2, subminor
(sortcodes
['A']));
}
@Test
public void testCodePage
() throws Exception {
String s =
"codepage 1252\n";
SrtTextReader sr =
new SrtTextReader
(new CharArrayReader(s.
toCharArray()));
assertEquals
(1252, sr.
getSort().
getCodepage());
}
@Test
public void testDescription
() throws Exception {
String val =
"Euro Sort";
String s =
String.
format("codepage 1252\n" +
"description '%s'\n", val
);
SrtTextReader sr =
new SrtTextReader
(new CharArrayReader(s.
toCharArray()));
assertEquals
(val, sr.
getSort().
getDescription());
}
@Test
public void testMinorCodes
() throws Exception {
char[] sortcodes = getSortcodes
("code a;b;c\n");
assertEquals
("first",
1, minor
(sortcodes
['a']));
assertEquals
("second",
2, minor
(sortcodes
['b']));
assertEquals
("third",
3, minor
(sortcodes
['c']));
}
@Test
public void testSpecifyMajorPos
() throws Exception {
char[] sortcodes = getSortcodes
("code pos=0x98 a;b");
assertEquals
(0x98, major
(sortcodes
['a']));
assertEquals
(0x98, major
(sortcodes
['b']));
}
/**
* Letters can be specified by two character hex string.
* In this case the hex string is the character in the given codepage.
*/
@Test
public void testHexLetters
() throws Exception {
char[] sortcodes = getSortcodes
("code c4;c6");
assertEquals
(1, major
(sortcodes
[0xc4
]));
assertEquals
(0, major
(sortcodes
[0xc5
]));
assertEquals
(1, major
(sortcodes
[0xc6
]));
}
@Test
public void testPunct
() throws Exception {
char[] sortcodes = getSortcodes
("code !");
assertEquals
(1, major
(sortcodes
['!']));
}
/**
* We can have any unicode character in the file.
*/
@Test
public void testUnicodeChars
() throws IOException {
char[] sortcodes = getSortcodes
("< :\n< ›\n");
assertEquals
(1, major
(sortcodes
[':']));
int b = getByteInCodePage
("›");
assertEquals
(2, major
(sortcodes
[b
& 0xff
]));
}
/**
* Check character that is not a letter in 1252.
* @throws Exception
*/
@Test
public void testNotLetter
() throws Exception {
Sort sort = getSort
("code 00a8");
byte flags = sort.
getFlags(0xa8
);
assertEquals
(0, flags
);
sort = getSort
("code 0041");
flags = sort.
getFlags(0x41
);
assertNotSame
(0, flags
);
}
@Test
public void testShortCodeSeparator
() throws Exception {
char[] sortcodes = getSortcodes
("code a < b < c");
assertEquals
(1, major
(sortcodes
['a']));
assertEquals
(2, major
(sortcodes
['b']));
assertEquals
(3, major
(sortcodes
['c']));
}
private char[] getSortcodes
(String text
) throws IOException {
Sort sort = getSort
(text
);
return sort.
getSortPositions();
}
private byte getByteInCodePage
(String ch
) {
return ch.
getBytes(charset
)[0];
}
private Sort getSort
(String text
) throws IOException {
String s = BASE + text +
"\n";
Reader r =
new StringReader(s
);
SrtTextReader srr =
new SrtTextReader
(r
);
return srr.
getSort();
}
private int major
(int code
) {
return (code
>> 8) & 0xff
;
}
private int minor
(int code
) {
return (code
>> 4) & 0xf
;
}
private int subminor
(int code
) {
return (code
& 0xf
);
}
}