package tests.net.sf.jabref;
import java.awt.Container;
import java.awt.Dialog;
import java.io.StringReader;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.*;
import javax.swing.JDialog;
import javax.swing.JWindow;
import junit.framework.TestCase;
import net.sf.jabref.*;
import net.sf.jabref.imports.BibtexParser;
import net.sf.jabref.imports.ParserResult;
public class UtilTest extends TestCase {
public void testNCase() {
assertEquals("", Util.nCase(""));
assertEquals("Hello world", Util.nCase("Hello World"));
assertEquals("A", Util.nCase("a"));
assertEquals("Aa", Util.nCase("AA"));
}
public void testGetPublicationDate(){
assertEquals("2003-02", Util.getPublicationDate(BibtexParser
.singleFromString("@ARTICLE{HipKro03, year = {2003}, month = #FEB# }")));
assertEquals("2003-03", Util.getPublicationDate(BibtexParser
.singleFromString("@ARTICLE{HipKro03, year = {2003}, month = 3 }")));
assertEquals("2003", Util.getPublicationDate(BibtexParser
.singleFromString("@ARTICLE{HipKro03, year = {2003}}")));
assertEquals(null, Util.getPublicationDate(BibtexParser
.singleFromString("@ARTICLE{HipKro03, month = 3 }")));
assertEquals(null, Util.getPublicationDate(BibtexParser
.singleFromString("@ARTICLE{HipKro03, author={bla}}")));
assertEquals("2003-12", Util.getPublicationDate(BibtexParser
.singleFromString("@ARTICLE{HipKro03, year = {03}, month = #DEC# }")));
}
public void testCheckName() {
assertEquals("aa.bib", Util.checkName("aa"));
assertEquals(".bib", Util.checkName(""));
assertEquals("a.bib", Util.checkName("a.bib"));
assertEquals("a.bib", Util.checkName("a"));
assertEquals("a.bb.bib", Util.checkName("a.bb"));
}
public void testCreateNeutralId() {
HashSet<String> set = new HashSet<String>();
for (int i = 0; i < 10000; i++){
String string = Util.createNeutralId();
assertFalse(set.contains(string));
set.add(string);
}
}
public void testPlaceDialog() {
Dialog d = new JDialog();
d.setSize(50, 50);
Container c = new JWindow();
c.setBounds(100, 200, 100, 50);
Util.placeDialog(d, c);
assertEquals(125, d.getX());
assertEquals(200, d.getY());
// Test upper left corner
c.setBounds(0,0,100,100);
d.setSize(200, 200);
Util.placeDialog(d, c);
assertEquals(0, d.getX());
assertEquals(0, d.getY());
}
public void testParseField() {
assertEquals("", Util.parseField(""));
// Three basic types (references, { } and " ")
assertEquals("#hallo#", Util.parseField("hallo"));
assertEquals("hallo", Util.parseField("{hallo}"));
assertEquals("bye", Util.parseField("\"bye\""));
// Concatenation
assertEquals("longlonglonglong", Util.parseField("\"long\" # \"long\" # \"long\" # \"long\""));
assertEquals("hallo#bye#", Util.parseField("{hallo} # bye"));
}
public void testShaveString() {
assertEquals(null, Util.shaveString(null));
assertEquals("", Util.shaveString(""));
assertEquals("aaa", Util.shaveString(" aaa\t\t\n\r"));
assertEquals("a", Util.shaveString(" {a} "));
assertEquals("a", Util.shaveString(" \"a\" "));
assertEquals("{a}", Util.shaveString(" {{a}} "));
assertEquals("{a}", Util.shaveString(" \"{a}\" "));
assertEquals("\"{a\"}", Util.shaveString(" \"{a\"} "));
}
public void testCheckLegalKey() {
assertEquals("AAAA", Util.checkLegalKey("AA AA"));
assertEquals("SPECIALCHARS", Util.checkLegalKey("SPECIAL CHARS#{\\\"}~,^"));
assertEquals("AeaeaAAA", Util.checkLegalKey("������"));
assertEquals("", Util.checkLegalKey("\n\t\r"));
}
public void testReplaceSpecialCharacters() {
// Shouldn't German � be resolved to Ae
assertEquals("AeaeaAAA", Util.replaceSpecialCharacters("������"));
assertEquals("Hallo Arger", Util.replaceSpecialCharacters("Hallo Arger"));
}
public void testJoin() {
String[] s = "ab/cd/ed".split("/");
assertEquals("ab\\cd\\ed", Util.join(s, "\\", 0, s.length));
assertEquals("cd\\ed", Util.join(s, "\\", 1, s.length));
assertEquals("ed", Util.join(s, "\\", 2, s.length));
assertEquals("", Util.join(s, "\\", 3, s.length));
assertEquals("", Util.join(new String[]{}, "\\", 0, 0));
}
public void testStripBrackets() {
assertEquals("foo", Util.stripBrackets("[foo]"));
assertEquals("[foo]", Util.stripBrackets("[[foo]]"));
assertEquals("foo", Util.stripBrackets("foo]"));
assertEquals("foo", Util.stripBrackets("[foo"));
assertEquals("", Util.stripBrackets(""));
assertEquals("", Util.stripBrackets("[]"));
assertEquals("", Util.stripBrackets("["));
assertEquals("", Util.stripBrackets("]"));
assertEquals("f[]f", Util.stripBrackets("f[]f"));
try {
Util.stripBrackets(null);
fail();
} catch(NullPointerException npe){
}
}
BibtexDatabase database;
BibtexEntry entry;
public void setUp(){
StringReader reader = new StringReader(
"@ARTICLE{HipKro03," + "\n" +
" author = {Eric von Hippel and Georg von Krogh}," + "\n" +
" title = {Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science}," + "\n" +
" journal = {Organization Science}," + "\n" +
" year = {2003}," + "\n" +
" volume = {14}," + "\n" +
" pages = {209--223}," + "\n" +
" number = {2}," + "\n" +
" address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA}," + "\n" +
" doi = {http://dx.doi.org/10.1287/orsc.14.2.209.14992}," + "\n" +
" issn = {1526-5455}," + "\n" +
" publisher = {INFORMS}" + "\n" +
"}");
BibtexParser parser = new BibtexParser(reader);
ParserResult result = null;
try {
result = parser.parse();
} catch (Exception e){
fail();
}
database = result.getDatabase();
entry = database.getEntriesByKey("HipKro03")[0];
assertNotNull(database);
assertNotNull(entry);
}
public void testParseMethodCalls(){
assertEquals(1, Util.parseMethodsCalls("bla").size());
assertEquals("bla", ((Util.parseMethodsCalls("bla").get(0)))[0]);
assertEquals(1, Util.parseMethodsCalls("bla,").size());
assertEquals("bla", ((Util.parseMethodsCalls("bla,").get(0)))[0]);
assertEquals(1, Util.parseMethodsCalls("_bla.bla.blub,").size());
assertEquals("_bla.bla.blub", ((Util.parseMethodsCalls("_bla.bla.blub,").get(0)))[0]);
assertEquals(2, Util.parseMethodsCalls("bla,foo").size());
assertEquals("bla", ((Util.parseMethodsCalls("bla,foo").get(0)))[0]);
assertEquals("foo", ((Util.parseMethodsCalls("bla,foo").get(1)))[0]);
assertEquals(2, Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").size());
assertEquals("bla", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[0]);
assertEquals("foo", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[0]);
assertEquals("test", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(0)))[1]);
assertEquals("fark", ((Util.parseMethodsCalls("bla(\"test\"),foo(\"fark\")").get(1)))[1]);
assertEquals(2, Util.parseMethodsCalls("bla(test),foo(fark)").size());
assertEquals("bla", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(0)))[0]);
assertEquals("foo", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(1)))[0]);
assertEquals("test", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(0)))[1]);
assertEquals("fark", ((Util.parseMethodsCalls("bla(test),foo(fark)").get(1)))[1]);
}
public void testFieldAndFormat(){
assertEquals("Eric von Hippel and Georg von Krogh", Util.getFieldAndFormat("[author]", entry, database));
assertEquals("Eric von Hippel and Georg von Krogh", Util.getFieldAndFormat("author", entry, database));
assertEquals(null, Util.getFieldAndFormat("[unknownkey]", entry, database));
assertEquals(null, Util.getFieldAndFormat("[:]", entry, database));
assertEquals(null, Util.getFieldAndFormat("[:lower]", entry, database));
assertEquals("eric von hippel and georg von krogh", Util.getFieldAndFormat("[author:lower]", entry, database));
assertEquals("HipKro03", Util.getFieldAndFormat("[bibtexkey]", entry, database));
assertEquals("HipKro03", Util.getFieldAndFormat("[bibtexkey:]", entry, database));
}
public void testUserFieldAndFormat(){
String[] names = Globals.prefs.getStringArray(NameFormatterTab.NAME_FORMATER_KEY);
if (names == null)
names = new String[]{};
String[] formats = Globals.prefs.getStringArray(NameFormatterTab.NAME_FORMATTER_VALUE);
if (formats == null)
formats = new String[]{};
try {
List<String> f = new LinkedList<String>(Arrays.asList(formats));
List<String> n = new LinkedList<String>(Arrays.asList(names));
n.add("testMe123454321");
f.add("*@*@test");
String[] newNames = n.toArray(new String[n.size()]);
String[] newFormats = f.toArray(new String[f.size()]);
Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, newNames);
Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, newFormats);
assertEquals("testtest", Util.getFieldAndFormat("[author:testMe123454321]", entry, database));
} finally {
Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATER_KEY, names);
Globals.prefs.putStringArray(NameFormatterTab.NAME_FORMATTER_VALUE, formats);
}
}
public void testExpandBrackets(){
assertEquals("", Util.expandBrackets("", entry, database));
assertEquals("dropped", Util.expandBrackets("drop[unknownkey]ped", entry, database));
assertEquals("Eric von Hippel and Georg von Krogh",
Util.expandBrackets("[author]", entry, database));
assertEquals("Eric von Hippel and Georg von Krogh are two famous authors.",
Util.expandBrackets("[author] are two famous authors.", entry, database));
assertEquals("Eric von Hippel and Georg von Krogh are two famous authors.",
Util.expandBrackets("[author] are two famous authors.", entry, database));
assertEquals("Eric von Hippel and Georg von Krogh have published Open Source Software and the \"Private-Collective\" Innovation Model: Issues for Organization Science in Organization Science.",
Util.expandBrackets("[author] have published [title] in [journal].", entry, database));
}
public void testSanitizeUrl() {
assertEquals("http://www.vg.no", Util.sanitizeUrl("http://www.vg.no"));
assertEquals("http://www.vg.no/fil%20e.html",
Util.sanitizeUrl("http://www.vg.no/fil e.html"));
assertEquals("http://www.vg.no/fil%20e.html",
Util.sanitizeUrl("http://www.vg.no/fil%20e.html"));
assertEquals("www.vg.no/fil%20e.html",
Util.sanitizeUrl("www.vg.no/fil%20e.html"));
assertEquals("www.vg.no/fil%20e.html",
Util.sanitizeUrl("\\url{www.vg.no/fil%20e.html}"));
/**
* DOI Test cases
*/
assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("10.1109/VLHCC.2004.20"));
assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi://10.1109/VLHCC.2004.20"));
assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi:/10.1109/VLHCC.2004.20"));
assertEquals("http://dx.doi.org/10.1109/VLHCC.2004.20", Util.sanitizeUrl("doi:10.1109/VLHCC.2004.20"));
/**
* Additional testcases provided by Hannes Restel and Micha Beckmann.
*/
assertEquals("ftp://www.vg.no", Util.sanitizeUrl("ftp://www.vg.no"));
assertEquals("file://doof.txt", Util.sanitizeUrl("file://doof.txt"));
assertEquals("file:///", Util.sanitizeUrl("file:///"));
assertEquals("/src/doof.txt", Util.sanitizeUrl("/src/doof.txt"));
assertEquals("/", Util.sanitizeUrl("/"));
assertEquals("/home/user/example.txt", Util.sanitizeUrl("/home/user/example.txt"));
}
public void test2to4DigitsYear(){
assertEquals("1990", Util.toFourDigitYear("1990"));
assertEquals("190", Util.toFourDigitYear("190"));
assertEquals("1990", Util.toFourDigitYear("90", 1990));
assertEquals("1990", Util.toFourDigitYear("90", 1991));
assertEquals("2020", Util.toFourDigitYear("20", 1990));
assertEquals("1921", Util.toFourDigitYear("21", 1990));
assertEquals("1922", Util.toFourDigitYear("22", 1990));
assertEquals("2022", Util.toFourDigitYear("22", 1992));
assertEquals("1999", Util.toFourDigitYear("99", 2001));
assertEquals("1931", Util.toFourDigitYear("1931", 2001));
assertEquals("2031", Util.toFourDigitYear("31", 2001));
assertEquals("1932", Util.toFourDigitYear("32", 2001));
assertEquals("1944", Util.toFourDigitYear("44", 2001));
assertEquals("2011", Util.toFourDigitYear("11", 2001));
int thisYear = Calendar.getInstance().get(Calendar.YEAR);
int d2 = thisYear % 100;
NumberFormat f = new DecimalFormat("00");
for (int i = 0; i <= 30; i++){
assertTrue("" + i, thisYear <= Integer.parseInt(Util.toFourDigitYear(f.format((d2 + i) % 100))));
}
for (int i = 0; i < 70; i++){
assertTrue("" + i, thisYear >= Integer.parseInt(Util.toFourDigitYear(f.format((d2 - i + 100) % 100))));
}
}
public void testToMonthNumber(){
assertEquals(0, Util.getMonthNumber("jan"));
assertEquals(1, Util.getMonthNumber("feb"));
assertEquals(2, Util.getMonthNumber("mar"));
assertEquals(3, Util.getMonthNumber("apr"));
assertEquals(4, Util.getMonthNumber("may"));
assertEquals(5, Util.getMonthNumber("jun"));
assertEquals(6, Util.getMonthNumber("jul"));
assertEquals(7, Util.getMonthNumber("aug"));
assertEquals(8, Util.getMonthNumber("sep"));
assertEquals(9, Util.getMonthNumber("oct"));
assertEquals(10,Util.getMonthNumber("nov"));
assertEquals(11,Util.getMonthNumber("dec"));
assertEquals(0, Util.getMonthNumber("#jan#"));
assertEquals(1, Util.getMonthNumber("#feb#"));
assertEquals(2, Util.getMonthNumber("#mar#"));
assertEquals(3, Util.getMonthNumber("#apr#"));
assertEquals(4, Util.getMonthNumber("#may#"));
assertEquals(5, Util.getMonthNumber("#jun#"));
assertEquals(6, Util.getMonthNumber("#jul#"));
assertEquals(7, Util.getMonthNumber("#aug#"));
assertEquals(8, Util.getMonthNumber("#sep#"));
assertEquals(9, Util.getMonthNumber("#oct#"));
assertEquals(10,Util.getMonthNumber("#nov#"));
assertEquals(11,Util.getMonthNumber("#dec#"));
assertEquals(0, Util.getMonthNumber("January"));
assertEquals(1, Util.getMonthNumber("February"));
assertEquals(2, Util.getMonthNumber("March"));
assertEquals(3, Util.getMonthNumber("April"));
assertEquals(4, Util.getMonthNumber("May"));
assertEquals(5, Util.getMonthNumber("June"));
assertEquals(6, Util.getMonthNumber("July"));
assertEquals(7, Util.getMonthNumber("August"));
assertEquals(8, Util.getMonthNumber("September"));
assertEquals(9, Util.getMonthNumber("October"));
assertEquals(10,Util.getMonthNumber("November"));
assertEquals(11,Util.getMonthNumber("Decembre"));
assertEquals(0, Util.getMonthNumber("01"));
assertEquals(1, Util.getMonthNumber("02"));
assertEquals(2, Util.getMonthNumber("03"));
assertEquals(3, Util.getMonthNumber("04"));
assertEquals(4, Util.getMonthNumber("05"));
assertEquals(5, Util.getMonthNumber("06"));
assertEquals(6, Util.getMonthNumber("07"));
assertEquals(7, Util.getMonthNumber("08"));
assertEquals(8, Util.getMonthNumber("09"));
assertEquals(9, Util.getMonthNumber("10"));
assertEquals(0, Util.getMonthNumber("1"));
assertEquals(1, Util.getMonthNumber("2"));
assertEquals(2, Util.getMonthNumber("3"));
assertEquals(3, Util.getMonthNumber("4"));
assertEquals(4, Util.getMonthNumber("5"));
assertEquals(5, Util.getMonthNumber("6"));
assertEquals(6, Util.getMonthNumber("7"));
assertEquals(7, Util.getMonthNumber("8"));
assertEquals(8, Util.getMonthNumber("9"));
assertEquals(10,Util.getMonthNumber("11"));
assertEquals(11,Util.getMonthNumber("12"));
assertEquals(-1,Util.getMonthNumber(";lkjasdf"));
assertEquals(-1,Util.getMonthNumber("3.2"));
assertEquals(-1,Util.getMonthNumber("#test#"));
assertEquals(-1,Util.getMonthNumber(""));
}
public void testToUpperCharFirst(){
assertEquals("", Util.toUpperFirstLetter(""));
assertEquals("A", Util.toUpperFirstLetter("a"));
assertEquals("A", Util.toUpperFirstLetter("A"));
assertEquals("An", Util.toUpperFirstLetter("an"));
assertEquals("AN", Util.toUpperFirstLetter("AN"));
assertEquals("TestTest", Util.toUpperFirstLetter("testTest"));
}
}