package org.jabref.logic.bst; import org.jabref.logic.bst.BibtexCaseChanger.FORMAT_MODE; import org.junit.Assert; import org.junit.Test; public class BibtexCaseChangersTest { @Test public void testChangeCase() { assertCaseChangerTitleLowers("i", "i"); assertCaseChangerAllLowers("i", "i"); assertCaseChangerAllUppers("I", "i"); assertCaseChangerTitleLowers("0i~ ", "0I~ "); assertCaseChangerAllLowers("0i~ ", "0I~ "); assertCaseChangerAllUppers("0I~ ", "0I~ "); assertCaseChangerTitleLowers("Hi hi ", "Hi Hi "); assertCaseChangerAllLowers("hi hi ", "Hi Hi "); assertCaseChangerAllUppers("HI HI ", "Hi Hi "); assertCaseChangerTitleLowers("{\\oe}", "{\\oe}"); assertCaseChangerAllLowers("{\\oe}", "{\\oe}"); assertCaseChangerAllUppers("{\\OE}", "{\\oe}"); assertCaseChangerTitleLowers("Hi {\\oe }hi ", "Hi {\\oe }Hi "); assertCaseChangerAllLowers("hi {\\oe }hi ", "Hi {\\oe }Hi "); assertCaseChangerAllUppers("HI {\\OE }HI ", "Hi {\\oe }Hi "); assertCaseChangerTitleLowers( "Jonathan meyer and charles louis xavier joseph de la vall{\\'e}e poussin", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin"); assertCaseChangerAllLowers( "jonathan meyer and charles louis xavier joseph de la vall{\\'e}e poussin", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin"); assertCaseChangerAllUppers( "JONATHAN MEYER AND CHARLES LOUIS XAVIER JOSEPH DE LA VALL{\\'E}E POUSSIN", "Jonathan Meyer and Charles Louis Xavier Joseph de la Vall{\\'e}e Poussin"); assertCaseChangerTitleLowers("{\\'e}", "{\\'e}"); assertCaseChangerAllLowers("{\\'e}", "{\\'e}"); assertCaseChangerAllUppers("{\\'E}", "{\\'e}"); assertCaseChangerTitleLowers("{\\'{E}}douard masterly", "{\\'{E}}douard Masterly"); assertCaseChangerAllLowers("{\\'{e}}douard masterly", "{\\'{E}}douard Masterly"); assertCaseChangerAllUppers("{\\'{E}}DOUARD MASTERLY", "{\\'{E}}douard Masterly"); assertCaseChangerTitleLowers("Ulrich {\\\"{u}}nderwood and ned {\\~n}et and paul {\\={p}}ot", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot"); assertCaseChangerAllLowers("ulrich {\\\"{u}}nderwood and ned {\\~n}et and paul {\\={p}}ot", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot"); assertCaseChangerAllUppers("ULRICH {\\\"{U}}NDERWOOD AND NED {\\~N}ET AND PAUL {\\={P}}OT", "Ulrich {\\\"{U}}nderwood and Ned {\\~N}et and Paul {\\={P}}ot"); assertCaseChangerTitleLowers("An {$O(n \\log n / \\! \\log\\log n)$} sorting algorithm", "An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm"); assertCaseChangerAllLowers("an {$O(n \\log n / \\! \\log\\log n)$} sorting algorithm", "An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm"); assertCaseChangerAllUppers("AN {$O(n \\log n / \\! \\log\\log n)$} SORTING ALGORITHM", "An {$O(n \\log n / \\! \\log\\log n)$} Sorting Algorithm"); assertCaseChangerTitleLowers("hallo", "hallo"); assertCaseChangerTitleLowers("Hallo", "HAllo"); assertCaseChangerTitleLowers("Hallo world", "HAllo World"); assertCaseChangerTitleLowers("Hallo world. how", "HAllo WORLD. HOW"); assertCaseChangerTitleLowers("Hallo {WORLD}. how", "HAllo {WORLD}. HOW"); assertCaseChangerTitleLowers("Hallo {\\world}. how", "HAllo {\\WORLD}. HOW"); assertCaseChangerAllLowers("hallo", "hallo"); assertCaseChangerAllLowers("hallo", "HAllo"); assertCaseChangerAllLowers("hallo world", "HAllo World"); assertCaseChangerAllLowers("hallo world. how", "HAllo WORLD. HOW"); assertCaseChangerAllLowers("hallo {worLD}. how", "HAllo {worLD}. HOW"); assertCaseChangerAllLowers("hallo {\\world}. how", "HAllo {\\WORLD}. HOW"); assertCaseChangerAllUppers("HALLO", "hallo"); assertCaseChangerAllUppers("HALLO", "HAllo"); assertCaseChangerAllUppers("HALLO WORLD", "HAllo World"); assertCaseChangerAllUppers("HALLO WORLD. HOW", "HAllo World. How"); assertCaseChangerAllUppers("HALLO {worLD}. HOW", "HAllo {worLD}. how"); assertCaseChangerAllUppers("HALLO {\\WORLD}. HOW", "HAllo {\\woRld}. hoW"); assertCaseChangerTitleLowers("On notions of information transfer in {VLSI} circuits", "On Notions of Information Transfer in {VLSI} Circuits"); } @Test public void testColon() { assertCaseChangerTitleLowers("Hallo world: How", "HAllo WORLD: HOW"); assertCaseChangerTitleLowers("Hallo world! how", "HAllo WORLD! HOW"); assertCaseChangerTitleLowers("Hallo world? how", "HAllo WORLD? HOW"); assertCaseChangerTitleLowers("Hallo world. how", "HAllo WORLD. HOW"); assertCaseChangerTitleLowers("Hallo world, how", "HAllo WORLD, HOW"); assertCaseChangerTitleLowers("Hallo world; how", "HAllo WORLD; HOW"); assertCaseChangerTitleLowers("Hallo world- how", "HAllo WORLD- HOW"); } @Test public void testSpecialBracketPlacement() { // area between brackets spanning multiple words assertCaseChangerAllLowers("this i{S REALLY CraZy ST}uff", "tHIS I{S REALLY CraZy ST}UfF"); assertCaseChangerAllLowers("this i{S R{\\'E}ALLY CraZy ST}uff", "tHIS I{S R{\\'E}ALLY CraZy ST}UfF"); // real use case: Formulas assertCaseChangerAllUppers("AN {$O(n \\log n)$} SORTING ALGORITHM", "An {$O(n \\log n)$} Sorting Algorithm"); // only one special character, no strange bracket placement assertCaseChangerAllLowers("this is r{\\'e}ally crazy stuff", "tHIS IS R{\\'E}ALLY CraZy STUfF"); } @Test public void testTitleCase() { // CaseChangers.TITLE is good at keeping some words lower case // Here some modified test cases to show that escaping with BibtexCaseChanger also works // Examples taken from https://github.com/JabRef/jabref/pull/176#issuecomment-142723792 assertCaseChangerAllLowers("this is a simple example {TITLE}", "This is a simple example {TITLE}"); assertCaseChangerAllLowers("this {IS} another simple example tit{LE}", "This {IS} another simple example tit{LE}"); assertCaseChangerAllLowers("{What ABOUT thIS} one?", "{What ABOUT thIS} one?"); assertCaseChangerAllLowers("{And {thIS} might {a{lso}} be possible}", "{And {thIS} might {a{lso}} be possible}"); /* the real test would look like as follows. Also from the comment of issue 176, order reversed as the "should be" comes first */ // assertCaseChangerTitleUppers("This is a Simple Example {TITLE}", "This is a simple example {TITLE}"); // assertCaseChangerTitleUppers("This {IS} Another Simple Example Tit{LE}", "This {IS} another simple example tit{LE}"); // assertCaseChangerTitleUppers("{What ABOUT thIS} one?", "{What ABOUT thIS} one?"); // assertCaseChangerTitleUppers("{And {thIS} might {a{lso}} be possible}", "{And {thIS} might {a{lso}} be possible}"); } private void assertCaseChangerTitleLowers(final String string, final String string2) { Assert.assertEquals(string, BibtexCaseChanger.changeCase(string2, FORMAT_MODE.TITLE_LOWERS)); } private void assertCaseChangerAllLowers(final String string, final String string2) { Assert.assertEquals(string, BibtexCaseChanger.changeCase(string2, FORMAT_MODE.ALL_LOWERS)); } private void assertCaseChangerAllUppers(final String string, final String string2) { Assert.assertEquals(string, BibtexCaseChanger.changeCase(string2, FORMAT_MODE.ALL_UPPERS)); } }