"""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")), ] 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"), ] ), ] 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( authors.processauthors( argument, **authors.compile_authwords({ "after": ["by"], "ignore": ["anonymous"], "sep": ['and'], }) ), expected )