"""Tests of author parsing.""" # pylint: disable=too-few-public-methods import re import unittest from patacrep import authors SPLIT_AUTHORS_DATA = [ ("Edgar Allan Poe", ("Poe", "Edgar Allan")), ("Richard M. Stallman", ("Stallman", "Richard M.")), ("Georges Brassens", ("Brassens", "Georges")), ("The Who", ("Who", "The")), ("Cher", ("Cher", "")), ("Red~Hot~Chili~Peppers", ("Red~Hot~Chili~Peppers", "")), ("The mamas~and~the~papas", ("mamas~and~the~papas", "The")), ("The mamas\ and\ the\ papas", ("mamas\ and\ the\ papas", "The")), ("The mamas and the papas", ("mamas and the papas", "The")), # Unbreakable spaces (r"\LaTeX command", ("command", r"\LaTeX")), # LaTeX commands are ignored (r"\emph{Some braces}", ("braces}", r"\emph{Some")), # LaTeX commands are ignored ] PROCESS_AUTHORS_DATA = [ ( "Lyrics by William Blake (from Milton, 1808), music by Hubert Parry (1916), and sung by The Royal\ Choir~of~FooBar (just here to show you how processing is done)", [ ("Blake", "William"), ("Parry", "Hubert"), ("Royal\ Choir~of~FooBar", "The"), ] ), ( "Anonyme (1967)", [], ), ( "Lucky Luke et Jolly Jumper", [ ("Luke", "Lucky"), ("Jumper", "Jolly"), ], ), ] AUTHWORDS = authors.compile_authwords({ "after": ["by"], "ignore": ["anonymous", "Anonyme", "anonyme"], "sep": ['and', 'et'], }) class TestAutors(unittest.TestCase): """Test of author parsing.""" def test_split_author_names(self): for argument, expected in SPLIT_AUTHORS_DATA: with self.subTest(argument=argument, expected=expected): self.assertEqual(authors.split_author_names(argument), expected) def test_processauthors(self): for argument, expected in PROCESS_AUTHORS_DATA: with self.subTest(argument=argument, expected=expected): self.assertEqual( set( authors.processauthors( argument, **AUTHWORDS, ) ), set(expected) )