This repository provides User Manual for setting up a Docker environment tailored for testing DGTD code.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

209 lines
11 KiB

# vim:fileencoding=utf-8
# Copyright (c) 2006-2019 Andrey Golovigin
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import unicode_literals
import pytest
from pybtex import errors
from pybtex.database import InvalidNameString, Person
# name, (bibtex_first, prelast, last, lineage
# as parsed by the bibtex program itself
sample_names = [
('A. E. Siegman', (['A.', 'E.'], [], ['Siegman'], []), None),
('A. G. W. Cameron', (['A.', 'G.', 'W.'], [], ['Cameron'], []), None),
('A. Hoenig', (['A.'], [], ['Hoenig'], []), None),
('A. J. Van Haagen', (['A.', 'J.', 'Van'], [], ['Haagen'], []), None),
('A. S. Berdnikov', (['A.', 'S.'], [], ['Berdnikov'], []), None),
('A. Trevorrow', (['A.'], [], ['Trevorrow'], []), None),
('Adam H. Lewenberg', (['Adam', 'H.'], [], ['Lewenberg'], []), None),
('Addison-Wesley Publishing Company',
(['Addison-Wesley', 'Publishing'], [], ['Company'], []), None),
('Advogato (Raph Levien)', (['Advogato', '(Raph'], [], ['Levien)'], []), None),
('Andrea de Leeuw van Weenen',
(['Andrea'], ['de', 'Leeuw', 'van'], ['Weenen'], []), None),
('Andreas Geyer-Schulz', (['Andreas'], [], ['Geyer-Schulz'], []), None),
("Andr{\\'e} Heck", (["Andr{\\'e}"], [], ['Heck'], []), None),
('Anne Br{\\"u}ggemann-Klein', (['Anne'], [], ['Br{\\"u}ggemann-Klein'], []), None),
('Anonymous', ([], [], ['Anonymous'], []), None),
('B. Beeton', (['B.'], [], ['Beeton'], []), None),
('B. Hamilton Kelly', (['B.', 'Hamilton'], [], ['Kelly'], []), None),
('B. V. Venkata Krishna Sastry',
(['B.', 'V.', 'Venkata', 'Krishna'], [], ['Sastry'], []), None),
('Benedict L{\\o}fstedt', (['Benedict'], [], ['L{\\o}fstedt'], []), None),
('Bogus{\\l}aw Jackowski', (['Bogus{\\l}aw'], [], ['Jackowski'], []), None),
('Christina A. L.\\ Thiele',
# (['Christina', 'A.', 'L.\\'], [], ['Thiele'], []), None),
(['Christina', 'A.', 'L.'], [], ['Thiele'], []), None), # BibTeX incompatible: treat "\ " as a space
("D. Men'shikov", (['D.'], [], ["Men'shikov"], []), None),
("Darko \\v{Z}ubrini{\\'c}", (['Darko'], [], ["\\v{Z}ubrini{\\'c}"], []), None),
("Dunja Mladeni{\\'c}", (['Dunja'], [], ["Mladeni{\\'c}"], []), None),
('Edwin V. {Bell, II}', (['Edwin', 'V.'], [], ['{Bell, II}'], []), None),
('Frank G. {Bennett, Jr.}', (['Frank', 'G.'], [], ['{Bennett, Jr.}'], []), None),
("Fr{\\'e}d{\\'e}ric Boulanger",
(["Fr{\\'e}d{\\'e}ric"], [], ['Boulanger'], []), None),
('Ford, Jr., Henry', (['Henry'], [], ['Ford'], ['Jr.']), None),
('mr Ford, Jr., Henry', (['Henry'], ['mr'], ['Ford'], ['Jr.']), None),
('Fukui Rei', (['Fukui'], [], ['Rei'], []), None),
('G. Gr{\\"a}tzer', (['G.'], [], ['Gr{\\"a}tzer'], []), None),
('George Gr{\\"a}tzer', (['George'], [], ['Gr{\\"a}tzer'], []), None),
('Georgia K. M. Tobin', (['Georgia', 'K.', 'M.'], [], ['Tobin'], []), None),
('Gilbert van den Dobbelsteen',
(['Gilbert'], ['van', 'den'], ['Dobbelsteen'], []), None),
('Gy{\\"o}ngyi Bujdos{\\\'o}', (['Gy{\\"o}ngyi'], [], ["Bujdos{\\'o}"], []), None),
('Helmut J{\\"u}rgensen', (['Helmut'], [], ['J{\\"u}rgensen'], []), None),
('Herbert Vo{\\ss}', (['Herbert'], [], ['Vo{\\ss}'], []), None),
("H{\\'a}n Th{\\^e}\\llap{\\raise 0.5ex\\hbox{\\'{\\relax}}} Th{\\'a}nh",
(["H{\\'a}n", "Th{\\^e}\\llap{\\raise 0.5ex\\hbox{\\'{\\relax}}}"],
[],
["Th{\\'a}nh"],
[]), None),
("H{\\`a}n Th\\^e\\llap{\\raise0.5ex\\hbox{\\'{\\relax}}} Th{\\`a}nh",
(['H{\\`a}n', "Th\\^e\\llap{\\raise0.5ex\\hbox{\\'{\\relax}}}"],
[],
['Th{\\`a}nh'],
[]), None),
("J. Vesel{\\'y}", (['J.'], [], ["Vesel{\\'y}"], []), None),
("Javier Rodr\\'{\\i}guez Laguna",
(['Javier', "Rodr\\'{\\i}guez"], [], ['Laguna'], []), None),
("Ji\\v{r}\\'{\\i} Vesel{\\'y}",
(["Ji\\v{r}\\'{\\i}"], [], ["Vesel{\\'y}"], []), None),
("Ji\\v{r}\\'{\\i} Zlatu{\\v{s}}ka",
(["Ji\\v{r}\\'{\\i}"], [], ['Zlatu{\\v{s}}ka'], []), None),
("Ji\\v{r}{\\'\\i} Vesel{\\'y}",
(["Ji\\v{r}{\\'\\i}"], [], ["Vesel{\\'y}"], []), None),
("Ji\\v{r}{\\'{\\i}}Zlatu{\\v{s}}ka",
([], [], ["Ji\\v{r}{\\'{\\i}}Zlatu{\\v{s}}ka"], []), None),
('Jim Hef{}feron', (['Jim'], [], ['Hef{}feron'], []), None),
('J{\\"o}rg Knappen', (['J{\\"o}rg'], [], ['Knappen'], []), None),
('J{\\"o}rgen L. Pind', (['J{\\"o}rgen', 'L.'], [], ['Pind'], []), None),
("J{\\'e}r\\^ome Laurens", (["J{\\'e}r\\^ome"], [], ['Laurens'], []), None),
('J{{\\"o}}rg Knappen', (['J{{\\"o}}rg'], [], ['Knappen'], []), None),
('K. Anil Kumar', (['K.', 'Anil'], [], ['Kumar'], []), None),
("Karel Hor{\\'a}k", (['Karel'], [], ["Hor{\\'a}k"], []), None),
("Karel P\\'{\\i}{\\v{s}}ka", (['Karel'], [], ["P\\'{\\i}{\\v{s}}ka"], []), None),
("Karel P{\\'\\i}{\\v{s}}ka", (['Karel'], [], ["P{\\'\\i}{\\v{s}}ka"], []), None),
("Karel Skoup\\'{y}", (['Karel'], [], ["Skoup\\'{y}"], []), None),
("Karel Skoup{\\'y}", (['Karel'], [], ["Skoup{\\'y}"], []), None),
('Kent McPherson', (['Kent'], [], ['McPherson'], []), None),
('Klaus H{\\"o}ppner', (['Klaus'], [], ['H{\\"o}ppner'], []), None),
('Lars Hellstr{\\"o}m', (['Lars'], [], ['Hellstr{\\"o}m'], []), None),
('Laura Elizabeth Jackson',
(['Laura', 'Elizabeth'], [], ['Jackson'], []), None),
("M. D{\\'{\\i}}az", (['M.'], [], ["D{\\'{\\i}}az"], []), None),
('M/iche/al /O Searc/oid', (['M/iche/al', '/O'], [], ['Searc/oid'], []), None),
("Marek Ry{\\'c}ko", (['Marek'], [], ["Ry{\\'c}ko"], []), None),
('Marina Yu. Nikulina', (['Marina', 'Yu.'], [], ['Nikulina'], []), None),
("Max D{\\'{\\i}}az", (['Max'], [], ["D{\\'{\\i}}az"], []), None),
('Merry Obrecht Sawdey', (['Merry', 'Obrecht'], [], ['Sawdey'], []), None),
("Miroslava Mis{\\'a}kov{\\'a}",
(['Miroslava'], [], ["Mis{\\'a}kov{\\'a}"], []), None),
('N. A. F. M. Poppelier', (['N.', 'A.', 'F.', 'M.'], [], ['Poppelier'], []), None),
('Nico A. F. M. Poppelier',
(['Nico', 'A.', 'F.', 'M.'], [], ['Poppelier'], []), None),
('Onofrio de Bari', (['Onofrio'], ['de'], ['Bari'], []), None),
("Pablo Rosell-Gonz{\\'a}lez", (['Pablo'], [], ["Rosell-Gonz{\\'a}lez"], []), None),
('Paco La Bruna', (['Paco', 'La'], [], ['Bruna'], []), None),
('Paul Franchi-Zannettacci',
(['Paul'], [], ['Franchi-Zannettacci'], []), None),
('Pavel \\v{S}eve\\v{c}ek', (['Pavel'], [], ['\\v{S}eve\\v{c}ek'], []), None),
('Petr Ol{\\v{s}}ak', (['Petr'], [], ['Ol{\\v{s}}ak'], []), None),
("Petr Ol{\\v{s}}{\\'a}k", (['Petr'], [], ["Ol{\\v{s}}{\\'a}k"], []), None),
('Primo\\v{z} Peterlin', (['Primo\\v{z}'], [], ['Peterlin'], []), None),
('Prof. Alban Grimm', (['Prof.', 'Alban'], [], ['Grimm'], []), None),
("P{\\'e}ter Husz{\\'a}r", (["P{\\'e}ter"], [], ["Husz{\\'a}r"], []), None),
("P{\\'e}ter Szab{\\'o}", (["P{\\'e}ter"], [], ["Szab{\\'o}"], []), None),
('Rafa{\\l}\\.Zbikowski', ([], [], ['Rafa{\\l}\\.Zbikowski'], []), None),
('Rainer Sch{\\"o}pf', (['Rainer'], [], ['Sch{\\"o}pf'], []), None),
('T. L. (Frank) Pappas', (['T.', 'L.', '(Frank)'], [], ['Pappas'], []), None),
('TUG 2004 conference', (['TUG', '2004'], [], ['conference'], []), None),
# von part with BibTeX special characters
('TUG {\\sltt DVI} Driver Standards Committee',
(['TUG', '{\\sltt DVI}', 'Driver', 'Standards'], [], ['Committee'], []), None),
('TUG {\\sltt xDVIx} Driver Standards Committee',
(['TUG'], ['{\\sltt xDVIx}'], ['Driver', 'Standards', 'Committee'], []), None),
('University of M{\\"u}nster',
(['University'], ['of'], ['M{\\"u}nster'], []), None),
('Walter van der Laan', (['Walter'], ['van', 'der'], ['Laan'], []), None),
('Wendy G. McKay', (['Wendy', 'G.'], [], ['McKay'], []), None),
('Wendy McKay', (['Wendy'], [], ['McKay'], []), None),
('W{\\l}odek Bzyl', (['W{\\l}odek'], [], ['Bzyl'], []), None),
('\\LaTeX Project Team', (['\\LaTeX', 'Project'], [], ['Team'], []), None),
('\\rlap{Lutz Birkhahn}', ([], [], ['\\rlap{Lutz Birkhahn}'], []), None),
('{Jim Hef{}feron}', ([], [], ['{Jim Hef{}feron}'], []), None),
('{Kristoffer H\\o{}gsbro Rose}',
([], [], ['{Kristoffer H\\o{}gsbro Rose}'], []), None),
('{TUG} {Working} {Group} on a {\\TeX} {Directory} {Structure}',
(['{TUG}', '{Working}', '{Group}'],
['on', 'a'],
['{\\TeX}', '{Directory}', '{Structure}'],
[]), None),
('{The \\TUB{} Team}', ([], [], ['{The \\TUB{} Team}'], []), None),
('{\\LaTeX} project team', (['{\\LaTeX}'], ['project'], ['team'], []), None),
('{\\NTG{} \\TeX{} future working group}',
([], [], ['{\\NTG{} \\TeX{} future working group}'], []), None),
('{{\\LaTeX\\,3} Project Team}',
([], [], ['{{\\LaTeX\\,3} Project Team}'], []), None),
('Johansen Kyle, Derik Mamania M.',
(['Derik', 'Mamania', 'M.'], [], ['Johansen', 'Kyle'], []), None),
("Johannes Adam Ferdinand Alois Josef Maria Marko d'Aviano "
'Pius von und zu Liechtenstein',
(['Johannes', 'Adam', 'Ferdinand', 'Alois', 'Josef', 'Maria', 'Marko'],
["d'Aviano", 'Pius', 'von', 'und', 'zu'], ['Liechtenstein'],[]), None),
(r'Brand\~{a}o, F', (['F'], [], [r'Brand\~{a}o'], []), None),
# but BibTeX parses it like this:
# (r'Brand\~{a}o, F', (['F'], [], ['Brand\\', '{a}o'], []), None),
# incorrectly formatted name strings below
# too many commas
('Chong, B. M., Specia, L., & Mitkov, R.',
(['Specia', 'L.', '&', 'Mitkov', 'R.'], [], ['Chong'], ['B.', 'M.']),
[InvalidNameString('Chong, B. M., Specia, L., & Mitkov, R.')]
),
# too many commas, sloppy whitespace
('LeCun, Y. , Bottou, L . , Bengio, Y. , Haffner , P',
(['Bottou', 'L', '.', 'Bengio', 'Y.', 'Haffner', 'P'], [], ['LeCun'], ['Y.']),
[InvalidNameString('LeCun, Y. , Bottou, L . , Bengio, Y. , Haffner , P')]),
]
@pytest.mark.parametrize(
["name", "correct_result", "expected_errors"],
sample_names
)
def test_parse_name(name, correct_result, expected_errors):
if expected_errors is None:
expected_errors = []
with errors.capture() as captured_errors:
person = Person(name)
result = (person.bibtex_first_names, person.prelast_names, person.last_names, person.lineage_names)
assert result == correct_result
assert captured_errors == expected_errors