package org.jabref.logic.formatter.bibtexfields; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * Tests in addition to the general tests from {@link org.jabref.logic.formatter.FormatterTest} */ public class NormalizeNamesFormatterTest { private NormalizeNamesFormatter formatter; @Before public void setUp() { formatter = new NormalizeNamesFormatter(); } @Test public void testNormalizeAuthorList() { assertEquals("Bilbo, Staci D.", formatter.format("Staci D Bilbo")); assertEquals("Bilbo, Staci D.", formatter.format("Staci D. Bilbo")); assertEquals("Bilbo, Staci D. and Smith, S. H. and Schwarz, Jaclyn M.", formatter.format("Staci D Bilbo and Smith SH and Jaclyn M Schwarz")); assertEquals("Ølver, M. A.", formatter.format("Ølver MA")); assertEquals("Ølver, M. A. and Øie, G. G. and Øie, G. G. and Alfredsen, J. Å. Å. and Alfredsen, Jo and Olsen, Y. Y. and Olsen, Y. Y.", formatter.format("Ølver MA; GG Øie; Øie GG; Alfredsen JÅÅ; Jo Alfredsen; Olsen Y.Y. and Olsen YY.")); assertEquals("Ølver, M. A. and Øie, G. G. and Øie, G. G. and Alfredsen, J. Å. Å. and Alfredsen, Jo and Olsen, Y. Y. and Olsen, Y. Y.", formatter.format("Ølver MA; GG Øie; Øie GG; Alfredsen JÅÅ; Jo Alfredsen; Olsen Y.Y.; Olsen YY.")); assertEquals("Alver, Morten and Alver, Morten O. and Alfredsen, J. A. and Olsen, Y. Y.", formatter.format("Alver, Morten and Alver, Morten O and Alfredsen, JA and Olsen, Y.Y.")); assertEquals("Alver, M. A. and Alfredsen, J. A. and Olsen, Y. Y.", formatter.format("Alver, MA; Alfredsen, JA; Olsen Y.Y.")); assertEquals("Kolb, Stefan and Lenhard, J{\\\"o}rg and Wirtz, Guido", formatter.format("Kolb, Stefan and J{\\\"o}rg Lenhard and Wirtz, Guido")); } @Test public void twoAuthorsSeperatedByColon() { assertEquals("Bilbo, Staci and Alver, Morten", formatter.format("Staci Bilbo; Morten Alver")); } @Test public void threeAuthorsSeperatedByColon() { assertEquals("Bilbo, Staci and Alver, Morten and Name, Test", formatter.format("Staci Bilbo; Morten Alver; Test Name")); } // Test for https://github.com/JabRef/jabref/issues/318 @Test public void threeAuthorsSeperatedByAnd() { assertEquals("Kolb, Stefan and Lenhard, J{\\\"o}rg and Wirtz, Guido", formatter.format("Stefan Kolb and J{\\\"o}rg Lenhard and Guido Wirtz")); } // Test for https://github.com/JabRef/jabref/issues/318 @Test public void threeAuthorsSeperatedByAndWithDash() { assertEquals("Jian, Heng-Yu and Xu, Z. and Chang, M.-C. F.", formatter.format("Heng-Yu Jian and Xu, Z. and Chang, M.-C.F.")); } // Test for https://github.com/JabRef/jabref/issues/318 @Test public void threeAuthorsSeperatedByAndWithLatex() { assertEquals("Gustafsson, Oscar and DeBrunner, Linda S. and DeBrunner, Victor and Johansson, H{\\aa}kan", formatter.format("Oscar Gustafsson and Linda S. DeBrunner and Victor DeBrunner and H{\\aa}kan Johansson")); } @Test public void lastThenInitial() { assertEquals("Smith, S.", formatter.format("Smith S")); } @Test public void lastThenInitials() { assertEquals("Smith, S. H.", formatter.format("Smith SH")); } @Test public void initialThenLast() { assertEquals("Smith, S.", formatter.format("S Smith")); } @Test public void initialDotThenLast() { assertEquals("Smith, S.", formatter.format("S. Smith")); } @Test public void initialsThenLast() { assertEquals("Smith, S. H.", formatter.format("SH Smith")); } @Test public void lastThenJuniorThenFirst() { assertEquals("Name, della, first", formatter.format("Name, della, first")); } @Test public void testConcatenationOfAuthorsWithCommas() { assertEquals("Ali Babar, M. and Dingsøyr, T. and Lago, P. and van der Vliet, H.", formatter.format("Ali Babar, M., Dingsøyr, T., Lago, P., van der Vliet, H.")); assertEquals("Ali Babar, M.", formatter.format("Ali Babar, M.")); } @Test public void testOddCountOfCommas() { assertEquals("Ali Babar, M., Dingsøyr T. Lago P.", formatter.format("Ali Babar, M., Dingsøyr, T., Lago P.")); } @Test public void formatExample() { assertEquals(formatter.format(formatter.getExampleInput()), "Einstein, Albert and Turing, Alan"); } @Test public void testNameAffixe() { assertEquals("Surname, jr, First and Surname2, First2", formatter.format("Surname, jr, First, Surname2, First2")); } @Test public void testAvoidSpecialCharacter() { assertEquals("Surname, {, First; Surname2, First2", formatter.format("Surname, {, First; Surname2, First2")); } @Test public void testAndInName() { assertEquals("Surname and , First, Surname2 First2", formatter.format("Surname, and , First, Surname2, First2")); } @Test public void testMultipleNameAffixes() { assertEquals("Mair, Jr, Daniel and Brühl, Sr, Daniel", formatter.format("Mair, Jr, Daniel, Brühl, Sr, Daniel")); } @Test public void testCommaSeperatedNames() { assertEquals("Bosoi, Cristina and Oliveira, Mariana and Sanchez, Rafael Ochoa and Tremblay, Mélanie and TenHave, Gabrie and Deutz, Nicoolas and Rose, Christopher F. and Bemeur, Chantal", formatter.format("Cristina Bosoi, Mariana Oliveira, Rafael Ochoa Sanchez, Mélanie Tremblay, Gabrie TenHave, Nicoolas Deutz, Christopher F. Rose, Chantal Bemeur")); } @Test public void testMultipleSpaces() { assertEquals("Bosoi, Cristina and Oliveira, Mariana and Sanchez, Rafael Ochoa and Tremblay, Mélanie and TenHave, Gabrie and Deutz, Nicoolas and Rose, Christopher F. and Bemeur, Chantal", formatter.format("Cristina Bosoi, Mariana Oliveira, Rafael Ochoa Sanchez , Mélanie Tremblay , Gabrie TenHave, Nicoolas Deutz, Christopher F. Rose, Chantal Bemeur")); } @Test public void testAvoidPreposition() { assertEquals("von Zimmer, Hans and van Oberbergern, Michael and zu Berger, Kevin", formatter.format("Hans von Zimmer, Michael van Oberbergern, Kevin zu Berger")); } @Test public void testPreposition() { assertEquals("von Zimmer, Hans and van Oberbergern, Michael and zu Berger, Kevin", formatter.format("Hans von Zimmer, Michael van Oberbergern, Kevin zu Berger")); } @Test public void testOneCommaUntouched() { assertEquals("Canon der Barbar, Alexander der Große", formatter.format("Canon der Barbar, Alexander der Große")); } @Test public void testAvoidNameAffixes() { assertEquals("der Barbar, Canon and der Große, Alexander and der Alexander, Peter", formatter.format("Canon der Barbar, Alexander der Große, Peter der Alexander")); } @Test public void testUpperCaseSensitiveList() { assertEquals("der Barbar, Canon and der Große, Alexander", formatter.format("Canon der Barbar AND Alexander der Große")); assertEquals("der Barbar, Canon and der Große, Alexander", formatter.format("Canon der Barbar aNd Alexander der Große")); assertEquals("der Barbar, Canon and der Große, Alexander", formatter.format("Canon der Barbar AnD Alexander der Große")); } @Test public void testSemiCorrectNamesWithSemicolon() { assertEquals("Last, First and Last2, First2 and Last3, First3", formatter.format("Last, First; Last2, First2; Last3, First3")); assertEquals("Last, Jr, First and Last2, First2", formatter.format("Last, Jr, First; Last2, First2")); assertEquals("Last, First and Last2, First2 and Last3, First3 and Last4, First4", formatter.format("Last, First; Last2, First2; Last3, First3; First4 Last4")); assertEquals("Last and Last2, First2 and Last3, First3 and Last4, First4", formatter.format("Last; Last2, First2; Last3, First3; Last4, First4")); } }