package org.jabref.model.entry; import java.util.Optional; import org.junit.Assert; import org.junit.Test; public class AuthorListTest { @SuppressWarnings("unused") @Test public void testFixAuthorNatbib() { Assert.assertEquals("", AuthorList.fixAuthorNatbib("")); Assert.assertEquals("Smith", AuthorList.fixAuthorNatbib("John Smith")); Assert.assertEquals("Smith and Black Brown", AuthorList .fixAuthorNatbib("John Smith and Black Brown, Peter")); Assert.assertEquals("von Neumann et al.", AuthorList .fixAuthorNatbib("John von Neumann and John Smith and Black Brown, Peter")); // Is not cached! Assert.assertTrue(AuthorList .fixAuthorNatbib("John von Neumann and John Smith and Black Brown, Peter").equals(AuthorList .fixAuthorNatbib("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter"))); } @Test public void testGetAuthorList() { // Test caching in authorCache. AuthorList al = AuthorList.parse("John Smith"); Assert.assertEquals(al, AuthorList.parse("John Smith")); Assert.assertFalse(al.equals(AuthorList.parse("Smith"))); } @SuppressWarnings("unused") @Test public void testFixAuthorFirstNameFirstCommas() { // No Commas Assert.assertEquals("", AuthorList.fixAuthorFirstNameFirstCommas("", true, false)); Assert.assertEquals("", AuthorList.fixAuthorFirstNameFirstCommas("", false, false)); Assert.assertEquals("John Smith", AuthorList.fixAuthorFirstNameFirstCommas("John Smith", false, false)); Assert.assertEquals("J. Smith", AuthorList.fixAuthorFirstNameFirstCommas("John Smith", true, false)); // Check caching Assert.assertTrue(AuthorList.fixAuthorFirstNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", true, false).equals(AuthorList .fixAuthorFirstNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, false))); Assert.assertEquals("John Smith and Peter Black Brown", AuthorList .fixAuthorFirstNameFirstCommas("John Smith and Black Brown, Peter", false, false)); Assert.assertEquals("J. Smith and P. Black Brown", AuthorList.fixAuthorFirstNameFirstCommas( "John Smith and Black Brown, Peter", true, false)); // Method description is different than code -> additional comma // there Assert.assertEquals("John von Neumann, John Smith and Peter Black Brown", AuthorList .fixAuthorFirstNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", false, false)); Assert.assertEquals("J. von Neumann, J. Smith and P. Black Brown", AuthorList .fixAuthorFirstNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", true, false)); Assert.assertEquals("J. P. von Neumann", AuthorList.fixAuthorFirstNameFirstCommas( "John Peter von Neumann", true, false)); // Oxford Commas Assert.assertEquals("", AuthorList.fixAuthorFirstNameFirstCommas("", true, true)); Assert.assertEquals("", AuthorList.fixAuthorFirstNameFirstCommas("", false, true)); Assert.assertEquals("John Smith", AuthorList.fixAuthorFirstNameFirstCommas("John Smith", false, true)); Assert.assertEquals("J. Smith", AuthorList.fixAuthorFirstNameFirstCommas("John Smith", true, true)); // Check caching Assert.assertTrue(AuthorList.fixAuthorFirstNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", true, true).equals(AuthorList .fixAuthorFirstNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, true))); Assert.assertEquals("John Smith and Peter Black Brown", AuthorList .fixAuthorFirstNameFirstCommas("John Smith and Black Brown, Peter", false, true)); Assert.assertEquals("J. Smith and P. Black Brown", AuthorList.fixAuthorFirstNameFirstCommas( "John Smith and Black Brown, Peter", true, true)); // Method description is different than code -> additional comma // there Assert.assertEquals("John von Neumann, John Smith, and Peter Black Brown", AuthorList .fixAuthorFirstNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", false, true)); Assert.assertEquals("J. von Neumann, J. Smith, and P. Black Brown", AuthorList .fixAuthorFirstNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", true, true)); Assert.assertEquals("J. P. von Neumann", AuthorList.fixAuthorFirstNameFirstCommas( "John Peter von Neumann", true, true)); } @SuppressWarnings("unused") @Test public void testFixAuthorFirstNameFirst() { Assert.assertEquals("John Smith", AuthorList.fixAuthorFirstNameFirst("John Smith")); Assert.assertEquals("John Smith and Peter Black Brown", AuthorList .fixAuthorFirstNameFirst("John Smith and Black Brown, Peter")); Assert.assertEquals("John von Neumann and John Smith and Peter Black Brown", AuthorList .fixAuthorFirstNameFirst("John von Neumann and John Smith and Black Brown, Peter")); Assert.assertEquals("First von Last, Jr. III", AuthorList .fixAuthorFirstNameFirst("von Last, Jr. III, First")); // Check caching Assert.assertTrue(AuthorList .fixAuthorFirstNameFirst("John von Neumann and John Smith and Black Brown, Peter").equals(AuthorList .fixAuthorFirstNameFirst("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter"))); } @SuppressWarnings("unused") @Test public void testFixAuthorLastNameFirstCommasNoComma() { // No commas before and Assert.assertEquals("", AuthorList.fixAuthorLastNameFirstCommas("", true, false)); Assert.assertEquals("", AuthorList.fixAuthorLastNameFirstCommas("", false, false)); Assert.assertEquals("Smith, John", AuthorList.fixAuthorLastNameFirstCommas("John Smith", false, false)); Assert.assertEquals("Smith, J.", AuthorList.fixAuthorLastNameFirstCommas("John Smith", true, false)); String a = AuthorList.fixAuthorLastNameFirstCommas("John von Neumann and John Smith and Black Brown, Peter", true, false); String b = AuthorList.fixAuthorLastNameFirstCommas( "John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, false); // Check caching Assert.assertEquals(a, b); Assert.assertTrue(a.equals(b)); Assert.assertEquals("Smith, John and Black Brown, Peter", AuthorList.fixAuthorLastNameFirstCommas("John Smith and Black Brown, Peter", false, false)); Assert.assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthorLastNameFirstCommas("John Smith and Black Brown, Peter", true, false)); Assert.assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", AuthorList .fixAuthorLastNameFirstCommas("John von Neumann and John Smith and Black Brown, Peter", false, false)); Assert.assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", AuthorList .fixAuthorLastNameFirstCommas("John von Neumann and John Smith and Black Brown, Peter", true, false)); Assert.assertEquals("von Neumann, J. P.", AuthorList.fixAuthorLastNameFirstCommas("John Peter von Neumann", true, false)); } @SuppressWarnings("unused") @Test public void testFixAuthorLastNameFirstCommasOxfordComma() { // Oxford Commas Assert.assertEquals("", AuthorList.fixAuthorLastNameFirstCommas("", true, true)); Assert.assertEquals("", AuthorList.fixAuthorLastNameFirstCommas("", false, true)); Assert.assertEquals("Smith, John", AuthorList.fixAuthorLastNameFirstCommas("John Smith", false, true)); Assert.assertEquals("Smith, J.", AuthorList.fixAuthorLastNameFirstCommas("John Smith", true, true)); String a = AuthorList.fixAuthorLastNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", true, true); String b = AuthorList.fixAuthorLastNameFirstCommas("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true, true); // Check caching Assert.assertEquals(a, b); Assert.assertTrue(a.equals(b)); Assert.assertEquals("Smith, John and Black Brown, Peter", AuthorList .fixAuthorLastNameFirstCommas("John Smith and Black Brown, Peter", false, true)); Assert.assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthorLastNameFirstCommas( "John Smith and Black Brown, Peter", true, true)); Assert.assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", AuthorList .fixAuthorLastNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", false, true)); Assert.assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", AuthorList .fixAuthorLastNameFirstCommas( "John von Neumann and John Smith and Black Brown, Peter", true, true)); Assert.assertEquals("von Neumann, J. P.", AuthorList.fixAuthorLastNameFirstCommas( "John Peter von Neumann", true, true)); } @SuppressWarnings("unused") @Test public void testFixAuthorLastNameFirst() { // Test helper method Assert.assertEquals("Smith, John", AuthorList.fixAuthorLastNameFirst("John Smith")); Assert.assertEquals("Smith, John and Black Brown, Peter", AuthorList .fixAuthorLastNameFirst("John Smith and Black Brown, Peter")); Assert.assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList .fixAuthorLastNameFirst("John von Neumann and John Smith and Black Brown, Peter")); Assert.assertEquals("von Last, Jr, First", AuthorList .fixAuthorLastNameFirst("von Last, Jr ,First")); Assert.assertTrue(AuthorList .fixAuthorLastNameFirst("John von Neumann and John Smith and Black Brown, Peter").equals(AuthorList .fixAuthorLastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter"))); // Test Abbreviation == false Assert.assertEquals("Smith, John", AuthorList.fixAuthorLastNameFirst("John Smith", false)); Assert.assertEquals("Smith, John and Black Brown, Peter", AuthorList.fixAuthorLastNameFirst( "John Smith and Black Brown, Peter", false)); Assert.assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList .fixAuthorLastNameFirst("John von Neumann and John Smith and Black Brown, Peter", false)); Assert.assertEquals("von Last, Jr, First", AuthorList.fixAuthorLastNameFirst( "von Last, Jr ,First", false)); Assert.assertTrue(AuthorList.fixAuthorLastNameFirst( "John von Neumann and John Smith and Black Brown, Peter", false).equals(AuthorList .fixAuthorLastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", false))); // Test Abbreviate == true Assert.assertEquals("Smith, J.", AuthorList.fixAuthorLastNameFirst("John Smith", true)); Assert.assertEquals("Smith, J. and Black Brown, P.", AuthorList.fixAuthorLastNameFirst( "John Smith and Black Brown, Peter", true)); Assert.assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.", AuthorList.fixAuthorLastNameFirst( "John von Neumann and John Smith and Black Brown, Peter", true)); Assert.assertEquals("von Last, Jr, F.", AuthorList.fixAuthorLastNameFirst("von Last, Jr ,First", true)); Assert.assertTrue(AuthorList.fixAuthorLastNameFirst( "John von Neumann and John Smith and Black Brown, Peter", true).equals(AuthorList .fixAuthorLastNameFirst("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true))); } @SuppressWarnings("unused") @Test public void testFixAuthorLastNameOnlyCommas() { // No comma before and Assert.assertEquals("", AuthorList.fixAuthorLastNameOnlyCommas("", false)); Assert.assertEquals("Smith", AuthorList.fixAuthorLastNameOnlyCommas("John Smith", false)); Assert.assertEquals("Smith", AuthorList.fixAuthorLastNameOnlyCommas("Smith, Jr, John", false)); Assert.assertTrue(AuthorList.fixAuthorLastNameOnlyCommas( "John von Neumann and John Smith and Black Brown, Peter", false).equals(AuthorList .fixAuthorLastNameOnlyCommas("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", false))); Assert.assertEquals("von Neumann, Smith and Black Brown", AuthorList .fixAuthorLastNameOnlyCommas( "John von Neumann and John Smith and Black Brown, Peter", false)); // Oxford Comma Assert.assertEquals("", AuthorList.fixAuthorLastNameOnlyCommas("", true)); Assert.assertEquals("Smith", AuthorList.fixAuthorLastNameOnlyCommas("John Smith", true)); Assert.assertEquals("Smith", AuthorList.fixAuthorLastNameOnlyCommas("Smith, Jr, John", true)); Assert.assertTrue(AuthorList.fixAuthorLastNameOnlyCommas( "John von Neumann and John Smith and Black Brown, Peter", true).equals(AuthorList .fixAuthorLastNameOnlyCommas("John von Neumann" + (0 == 1 ? "" : " and ") + "John Smith and Black Brown, Peter", true))); Assert.assertEquals("von Neumann, Smith, and Black Brown", AuthorList .fixAuthorLastNameOnlyCommas( "John von Neumann and John Smith and Black Brown, Peter", true)); } @Test public void testFixAuthorForAlphabetization() { Assert.assertEquals("Smith, J.", AuthorList.fixAuthorForAlphabetization("John Smith")); Assert.assertEquals("Neumann, J.", AuthorList.fixAuthorForAlphabetization("John von Neumann")); Assert.assertEquals("Neumann, J.", AuthorList.fixAuthorForAlphabetization("J. von Neumann")); Assert.assertEquals( "Neumann, J. and Smith, J. and Black Brown, Jr., P.", AuthorList .fixAuthorForAlphabetization("John von Neumann and John Smith and de Black Brown, Jr., Peter")); } public static int size(String bibtex) { return AuthorList.parse(bibtex).getNumberOfAuthors(); } @Test public void testSize() { Assert.assertEquals(0, AuthorListTest.size("")); Assert.assertEquals(1, AuthorListTest.size("Bar")); Assert.assertEquals(1, AuthorListTest.size("Foo Bar")); Assert.assertEquals(1, AuthorListTest.size("Foo von Bar")); Assert.assertEquals(1, AuthorListTest.size("von Bar, Foo")); Assert.assertEquals(1, AuthorListTest.size("Bar, Foo")); Assert.assertEquals(1, AuthorListTest.size("Bar, Jr., Foo")); Assert.assertEquals(1, AuthorListTest.size("Bar, Foo")); Assert.assertEquals(2, AuthorListTest.size("John Neumann and Foo Bar")); Assert.assertEquals(2, AuthorListTest.size("John von Neumann and Bar, Jr, Foo")); Assert.assertEquals(3, AuthorListTest.size("John von Neumann and John Smith and Black Brown, Peter")); StringBuilder s = new StringBuilder("John von Neumann"); for (int i = 0; i < 25; i++) { Assert.assertEquals(i + 1, AuthorListTest.size(s.toString())); s.append(" and Albert Einstein"); } } @Test public void testIsEmpty() { Assert.assertTrue(AuthorList.parse("").isEmpty()); Assert.assertFalse(AuthorList.parse("Bar").isEmpty()); } @Test(expected = Exception.class) public void testGetEmptyAuthor() { AuthorList.parse("").getAuthor(0); Assert.fail(); } @Test public void testGetAuthor() { Author author = AuthorList.parse("John Smith and von Neumann, Jr, John").getAuthor(0); Assert.assertEquals(Optional.of("John"), author.getFirst()); Assert.assertEquals(Optional.of("J."), author.getFirstAbbr()); Assert.assertEquals("John Smith", author.getFirstLast(false)); Assert.assertEquals("J. Smith", author.getFirstLast(true)); Assert.assertEquals(Optional.empty(), author.getJr()); Assert.assertEquals(Optional.of("Smith"), author.getLast()); Assert.assertEquals("Smith, John", author.getLastFirst(false)); Assert.assertEquals("Smith, J.", author.getLastFirst(true)); Assert.assertEquals("Smith", author.getLastOnly()); Assert.assertEquals("Smith, J.", author.getNameForAlphabetization()); Assert.assertEquals(Optional.empty(), author.getVon()); author = AuthorList.parse("Peter Black Brown").getAuthor(0); Assert.assertEquals(Optional.of("Peter Black"), author.getFirst()); Assert.assertEquals(Optional.of("P. B."), author.getFirstAbbr()); Assert.assertEquals("Peter Black Brown", author.getFirstLast(false)); Assert.assertEquals("P. B. Brown", author.getFirstLast(true)); Assert.assertEquals(Optional.empty(), author.getJr()); Assert.assertEquals(Optional.empty(), author.getVon()); author = AuthorList.parse("John Smith and von Neumann, Jr, John").getAuthor(1); Assert.assertEquals(Optional.of("John"), author.getFirst()); Assert.assertEquals(Optional.of("J."), author.getFirstAbbr()); Assert.assertEquals("John von Neumann, Jr", author.getFirstLast(false)); Assert.assertEquals("J. von Neumann, Jr", author.getFirstLast(true)); Assert.assertEquals(Optional.of("Jr"), author.getJr()); Assert.assertEquals(Optional.of("Neumann"), author.getLast()); Assert.assertEquals("von Neumann, Jr, John", author.getLastFirst(false)); Assert.assertEquals("von Neumann, Jr, J.", author.getLastFirst(true)); Assert.assertEquals("von Neumann", author.getLastOnly()); Assert.assertEquals("Neumann, Jr, J.", author.getNameForAlphabetization()); Assert.assertEquals(Optional.of("von"), author.getVon()); } @Test public void testCompanyAuthor() { Author author = AuthorList.parse("{JabRef Developers}").getAuthor(0); Author expected = new Author(null, null, null, "JabRef Developers", null); Assert.assertEquals(expected, author); } @Test public void testCompanyAuthorWithLowerCaseWord() { Author author = AuthorList.parse("{JabRef Developers on Fire}").getAuthor(0); Author expected = new Author(null, null, null, "JabRef Developers on Fire", null); Assert.assertEquals(expected, author); } @Test public void testAbbreviationWithRelax() { Author author = AuthorList.parse("{\\relax Ch}ristoph Cholera").getAuthor(0); Author expected = new Author("{\\relax Ch}ristoph", "{\\relax Ch}.", null, "Cholera", null); Assert.assertEquals(expected, author); } @Test public void testGetAuthorsNatbib() { Assert.assertEquals("", AuthorList.parse("").getAsNatbib()); Assert.assertEquals("Smith", AuthorList.parse("John Smith").getAsNatbib()); Assert.assertEquals("Smith and Black Brown", AuthorList.parse( "John Smith and Black Brown, Peter").getAsNatbib()); Assert.assertEquals("von Neumann et al.", AuthorList.parse( "John von Neumann and John Smith and Black Brown, Peter").getAsNatbib()); /* * [ 1465610 ] (Double-)Names containing hyphen (-) not handled correctly */ Assert.assertEquals("Last-Name et al.", AuthorList.parse( "First Second Last-Name" + " and John Smith and Black Brown, Peter").getAsNatbib()); // Test caching AuthorList al = AuthorList .parse("John von Neumann and John Smith and Black Brown, Peter"); Assert.assertTrue(al.getAsNatbib().equals(al.getAsNatbib())); } @Test public void testGetAuthorsLastOnly() { // No comma before and Assert.assertEquals("", AuthorList.parse("").getAsLastNames(false)); Assert.assertEquals("Smith", AuthorList.parse("John Smith").getAsLastNames(false)); Assert.assertEquals("Smith", AuthorList.parse("Smith, Jr, John").getAsLastNames( false)); Assert.assertEquals("von Neumann, Smith and Black Brown", AuthorList.parse( "John von Neumann and John Smith and Black Brown, Peter").getAsLastNames(false)); // Oxford comma Assert.assertEquals("", AuthorList.parse("").getAsLastNames(true)); Assert.assertEquals("Smith", AuthorList.parse("John Smith").getAsLastNames(true)); Assert.assertEquals("Smith", AuthorList.parse("Smith, Jr, John").getAsLastNames( true)); Assert.assertEquals("von Neumann, Smith, and Black Brown", AuthorList.parse( "John von Neumann and John Smith and Black Brown, Peter").getAsLastNames(true)); Assert.assertEquals("von Neumann and Smith", AuthorList.parse("John von Neumann and John Smith").getAsLastNames(false)); } @Test public void testGetAuthorsLastFirstNoComma() { // No commas before and AuthorList al; al = AuthorList.parse(""); Assert.assertEquals("", al.getAsLastFirstNames(true, false)); Assert.assertEquals("", al.getAsLastFirstNames(false, false)); al = AuthorList.parse("John Smith"); Assert.assertEquals("Smith, John", al.getAsLastFirstNames(false, false)); Assert.assertEquals("Smith, J.", al.getAsLastFirstNames(true, false)); al = AuthorList.parse("John Smith and Black Brown, Peter"); Assert.assertEquals("Smith, John and Black Brown, Peter", al.getAsLastFirstNames(false, false)); Assert.assertEquals("Smith, J. and Black Brown, P.", al.getAsLastFirstNames(true, false)); al = AuthorList.parse("John von Neumann and John Smith and Black Brown, Peter"); // Method description is different than code -> additional comma // there Assert.assertEquals("von Neumann, John, Smith, John and Black Brown, Peter", al.getAsLastFirstNames(false, false)); Assert.assertEquals("von Neumann, J., Smith, J. and Black Brown, P.", al.getAsLastFirstNames(true, false)); al = AuthorList.parse("John Peter von Neumann"); Assert.assertEquals("von Neumann, J. P.", al.getAsLastFirstNames(true, false)); } @Test public void testGetAuthorsLastFirstOxfordComma() { // Oxford comma AuthorList al; al = AuthorList.parse(""); Assert.assertEquals("", al.getAsLastFirstNames(true, true)); Assert.assertEquals("", al.getAsLastFirstNames(false, true)); al = AuthorList.parse("John Smith"); Assert.assertEquals("Smith, John", al.getAsLastFirstNames(false, true)); Assert.assertEquals("Smith, J.", al.getAsLastFirstNames(true, true)); al = AuthorList.parse("John Smith and Black Brown, Peter"); Assert.assertEquals("Smith, John and Black Brown, Peter", al.getAsLastFirstNames(false, true)); Assert.assertEquals("Smith, J. and Black Brown, P.", al.getAsLastFirstNames(true, true)); al = AuthorList.parse("John von Neumann and John Smith and Black Brown, Peter"); Assert.assertEquals("von Neumann, John, Smith, John, and Black Brown, Peter", al .getAsLastFirstNames(false, true)); Assert.assertEquals("von Neumann, J., Smith, J., and Black Brown, P.", al.getAsLastFirstNames( true, true)); al = AuthorList.parse("John Peter von Neumann"); Assert.assertEquals("von Neumann, J. P.", al.getAsLastFirstNames(true, true)); } @Test public void testGetAuthorsLastFirstAnds() { Assert.assertEquals("Smith, John", AuthorList.parse("John Smith").getAsLastFirstNamesWithAnd( false)); Assert.assertEquals("Smith, John and Black Brown, Peter", AuthorList.parse( "John Smith and Black Brown, Peter").getAsLastFirstNamesWithAnd(false)); Assert.assertEquals("von Neumann, John and Smith, John and Black Brown, Peter", AuthorList .parse("John von Neumann and John Smith and Black Brown, Peter") .getAsLastFirstNamesWithAnd(false)); Assert.assertEquals("von Last, Jr, First", AuthorList.parse("von Last, Jr ,First") .getAsLastFirstNamesWithAnd(false)); Assert.assertEquals("Smith, J.", AuthorList.parse("John Smith").getAsLastFirstNamesWithAnd( true)); Assert.assertEquals("Smith, J. and Black Brown, P.", AuthorList.parse( "John Smith and Black Brown, Peter").getAsLastFirstNamesWithAnd(true)); Assert.assertEquals("von Neumann, J. and Smith, J. and Black Brown, P.", AuthorList.parse( "John von Neumann and John Smith and Black Brown, Peter").getAsLastFirstNamesWithAnd(true)); Assert.assertEquals("von Last, Jr, F.", AuthorList.parse("von Last, Jr ,First") .getAsLastFirstNamesWithAnd(true)); } @Test public void testGetAuthorsLastFirstAndsCaching() { // getAsLastFirstNamesWithAnd caches its results, therefore we call the method twice using the same arguments Assert.assertEquals("Smith, John", AuthorList.parse("John Smith").getAsLastFirstNamesWithAnd(false)); Assert.assertEquals("Smith, John", AuthorList.parse("John Smith").getAsLastFirstNamesWithAnd(false)); Assert.assertEquals("Smith, J.", AuthorList.parse("John Smith").getAsLastFirstNamesWithAnd(true)); Assert.assertEquals("Smith, J.", AuthorList.parse("John Smith").getAsLastFirstNamesWithAnd(true)); } @Test public void testGetAuthorsFirstFirst() { AuthorList al; al = AuthorList.parse(""); Assert.assertEquals("", al.getAsFirstLastNames(true, false)); Assert.assertEquals("", al.getAsFirstLastNames(false, false)); Assert.assertEquals("", al.getAsFirstLastNames(true, true)); Assert.assertEquals("", al.getAsFirstLastNames(false, true)); al = AuthorList.parse("John Smith"); Assert.assertEquals("John Smith", al.getAsFirstLastNames(false, false)); Assert.assertEquals("J. Smith", al.getAsFirstLastNames(true, false)); Assert.assertEquals("John Smith", al.getAsFirstLastNames(false, true)); Assert.assertEquals("J. Smith", al.getAsFirstLastNames(true, true)); al = AuthorList.parse("John Smith and Black Brown, Peter"); Assert.assertEquals("John Smith and Peter Black Brown", al.getAsFirstLastNames(false, false)); Assert.assertEquals("J. Smith and P. Black Brown", al.getAsFirstLastNames(true, false)); Assert.assertEquals("John Smith and Peter Black Brown", al.getAsFirstLastNames(false, true)); Assert.assertEquals("J. Smith and P. Black Brown", al.getAsFirstLastNames(true, true)); al = AuthorList.parse("John von Neumann and John Smith and Black Brown, Peter"); Assert.assertEquals("John von Neumann, John Smith and Peter Black Brown", al.getAsFirstLastNames( false, false)); Assert.assertEquals("J. von Neumann, J. Smith and P. Black Brown", al.getAsFirstLastNames(true, false)); Assert.assertEquals("John von Neumann, John Smith, and Peter Black Brown", al .getAsFirstLastNames(false, true)); Assert.assertEquals("J. von Neumann, J. Smith, and P. Black Brown", al.getAsFirstLastNames(true, true)); al = AuthorList.parse("John Peter von Neumann"); Assert.assertEquals("John Peter von Neumann", al.getAsFirstLastNames(false, false)); Assert.assertEquals("John Peter von Neumann", al.getAsFirstLastNames(false, true)); Assert.assertEquals("J. P. von Neumann", al.getAsFirstLastNames(true, false)); Assert.assertEquals("J. P. von Neumann", al.getAsFirstLastNames(true, true)); } @Test public void testGetAuthorsFirstFirstAnds() { Assert.assertEquals("John Smith", AuthorList.parse("John Smith") .getAsFirstLastNamesWithAnd()); Assert.assertEquals("John Smith and Peter Black Brown", AuthorList.parse( "John Smith and Black Brown, Peter").getAsFirstLastNamesWithAnd()); Assert.assertEquals("John von Neumann and John Smith and Peter Black Brown", AuthorList .parse("John von Neumann and John Smith and Black Brown, Peter") .getAsFirstLastNamesWithAnd()); Assert.assertEquals("First von Last, Jr. III", AuthorList .parse("von Last, Jr. III, First").getAsFirstLastNamesWithAnd()); } @Test public void testGetAuthorsForAlphabetization() { Assert.assertEquals("Smith, J.", AuthorList.parse("John Smith") .getForAlphabetization()); Assert.assertEquals("Neumann, J.", AuthorList.parse("John von Neumann") .getForAlphabetization()); Assert.assertEquals("Neumann, J.", AuthorList.parse("J. von Neumann") .getForAlphabetization()); Assert.assertEquals("Neumann, J. and Smith, J. and Black Brown, Jr., P.", AuthorList .parse("John von Neumann and John Smith and de Black Brown, Jr., Peter") .getForAlphabetization()); } @Test public void testRemoveStartAndEndBraces() { Assert.assertEquals("{A}bbb{c}", AuthorList.parse("{A}bbb{c}").getAsLastNames(false)); Assert.assertEquals("Vall{\\'e}e Poussin", AuthorList.parse("{Vall{\\'e}e Poussin}").getAsLastNames(false)); Assert.assertEquals("Poussin", AuthorList.parse("{Vall{\\'e}e} {Poussin}").getAsLastNames(false)); Assert.assertEquals("Poussin", AuthorList.parse("Vall{\\'e}e Poussin").getAsLastNames(false)); Assert.assertEquals("Lastname", AuthorList.parse("Firstname {Lastname}").getAsLastNames(false)); Assert.assertEquals("Firstname Lastname", AuthorList.parse("{Firstname Lastname}").getAsLastNames(false)); } @Test public void createCorrectInitials() { Assert.assertEquals(Optional.of("J. G."), AuthorList.parse("Hornberg, Johann Gottfried").getAuthor(0).getFirstAbbr()); } @Test public void parseNameWithBracesAroundFirstName() throws Exception { //TODO: Be more intelligent and abbreviate the first name correctly Author expected = new Author("Tse-tung", "{Tse-tung}.", null, "Mao", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("{Tse-tung} Mao")); } @Test public void parseNameWithBracesAroundLastName() throws Exception { Author expected = new Author("Hans", "H.", null, "van den Bergen", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("{van den Bergen}, Hans")); } @Test public void parseNameWithHyphenInFirstName() throws Exception { Author expected = new Author("Tse-tung", "T.-t.", null, "Mao", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("Tse-tung Mao")); } @Test public void parseNameWithHyphenInLastName() throws Exception { Author expected = new Author("Firstname", "F.", null, "Bailey-Jones", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("Firstname Bailey-Jones")); } @Test public void parseNameWithBraces() throws Exception { Author expected = new Author("H{e}lene", "H.", null, "Fiaux", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("H{e}lene Fiaux")); } /** * This tests the issue described at https://github.com/JabRef/jabref/pull/2669#issuecomment-288519458 */ @Test public void correctNamesWithOneComma() throws Exception { Author expected = new Author("Alexander der Große", "A. d. G.", null, "Canon der Barbar", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("Canon der Barbar, Alexander der Große")); expected = new Author("Alexander H. G.", "A. H. G.", null, "Rinnooy Kan", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("Rinnooy Kan, Alexander H. G.")); expected = new Author("Alexander Hendrik George", "A. H. G.", null, "Rinnooy Kan", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("Rinnooy Kan, Alexander Hendrik George")); expected = new Author("José María", "J. M.", null, "Rodriguez Fernandez", null); Assert.assertEquals(new AuthorList(expected), AuthorList.parse("Rodriguez Fernandez, José María")); } }