From c313c0fcf0f867faa8bcf90ad39abd1b7eff28c3 Mon Sep 17 00:00:00 2001 From: lbdx Date: Fri, 27 Sep 2024 12:14:24 +0200 Subject: [PATCH] Reorganize tests To pass tests on package built from source with pybuild: - In tests/, replace tests that require access to original data files with tests on readme examples. - Move all tests based on original data files to dev_tests. --- dev_tests/__init__.py | 0 dev_tests/test_original_tables.py | 306 ++++++++++++++++++++++++++++++ {tests => dev_tests}/utils.py | 0 tests/test_iso639.py | 301 +---------------------------- tests/test_readme_examples.py | 150 +++++++++++++++ 5 files changed, 457 insertions(+), 300 deletions(-) create mode 100644 dev_tests/__init__.py create mode 100644 dev_tests/test_original_tables.py rename {tests => dev_tests}/utils.py (100%) create mode 100644 tests/test_readme_examples.py diff --git a/dev_tests/__init__.py b/dev_tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dev_tests/test_original_tables.py b/dev_tests/test_original_tables.py new file mode 100644 index 0000000..eb583fd --- /dev/null +++ b/dev_tests/test_original_tables.py @@ -0,0 +1,306 @@ +import pytest + +from iso639 import Lang +from iso639.exceptions import DeprecatedLanguageValue + +from .utils import ( + get_iso6391_deprecated_ids_rows, + get_iso6391_deprecated_names_rows, + get_iso6392_deprecated_ids_rows, + get_iso6392_deprecated_names_rows, + get_iso6392_rows, + get_iso6393_deprecated_ids_rows, + get_iso6393_deprecated_names_rows, + get_iso6393_macrolanguages_rows, + get_iso6393_names_rows, + get_iso6393_rows, + get_iso6395_rows, +) + + +class TestLang: + + @pytest.mark.parametrize( + "Part2b, Part2t, Part1, English_Name, French_Name", + get_iso6392_rows(), + ) + def test_iso6392_rows( + self, Part2b, Part2t, Part1, English_Name, French_Name + ): + + lg = Lang(Part2b) + pt2t = Part2t if Part2t else Part2b # Part2B is default Part2T + assert lg.pt1 == Part1 + assert lg.pt2b == Part2b + assert lg.pt2t == pt2t + assert lg == Lang(lg) + assert not Part1 or lg == Lang(Part1) + assert lg == Lang(pt2t) + + for english_name in English_Name.split("; "): + d = {"pt1": Part1, "pt2b": Part2b, "pt2t": pt2t} + assert lg == Lang(english_name) + assert d.items() <= lg.asdict().items() + + @pytest.mark.parametrize( + "Id, Part2b, Part2t, Part1, Scope, Language_Type, Ref_Name, Comment", + get_iso6393_rows(), + ) + def test_iso6393_rows( + self, + Id, + Part2b, + Part2t, + Part1, + Scope, + Language_Type, + Ref_Name, + Comment, + ): + lg = Lang(Id) + assert lg.name == Ref_Name + assert lg.pt1 == Part1 + assert lg.pt2b == Part2b + assert lg.pt2t == Part2t + assert lg.pt3 == Id + assert lg.pt5 == "" + assert lg == Lang(lg) + assert lg == Lang(Ref_Name) + assert not Part1 or lg == Lang(Part1) + assert not Part2b or lg == Lang(Part2b) + assert not Part2t or lg == Lang(Part2t) + abbreviations = { + "A": "Ancient", + "C": "Constructed", + "E": "Extinct", + "H": "Historical", + "I": "Individual", + "L": "Living", + "M": "Macrolanguage", + "S": "Special", + } + assert lg.scope() == abbreviations[Scope] + assert lg.type() == abbreviations[Language_Type] + d = {"name": Ref_Name, "pt1": Part1, "pt2b": Part2b, "pt2t": Part2t} + assert d.items() <= lg.asdict().items() + + @pytest.mark.parametrize( + "Id, Print_Name, Inverted_Name", + get_iso6393_names_rows(), + ) + def test_iso6393_names_rows(self, Id, Print_Name, Inverted_Name): + lg = Lang(Id) + assert lg.pt3 == Id + assert lg == Lang(Print_Name) + assert lg == Lang(Inverted_Name) + + assert lg.name == Print_Name or lg.other_names().count(Print_Name) == 1 + assert ( + lg.name == Inverted_Name + or lg.other_names().count(Inverted_Name) == 1 + ) + assert lg.other_names() == sorted(lg.other_names()) + assert len(lg.other_names()) == len(set(lg.other_names())) + + @pytest.mark.parametrize( + "M_Id, I_Id, I_Status", + get_iso6393_macrolanguages_rows(), + ) + def test_iso6393_macrolanguages_rows(self, M_Id, I_Id, I_Status): + macro = Lang(M_Id) + indiv = Lang(I_Id) + + assert indiv.macro() == macro + assert macro.individuals().count(indiv) == 1 + assert macro.macro() is None + assert indiv.individuals() == [] + assert macro.individuals() == sorted( + macro.individuals(), key=lambda x: x.pt3 + ) + assert len(macro.individuals()) == len(set(macro.individuals())) + + @pytest.mark.parametrize( + "URI, code, Label_English, Label_French", + get_iso6395_rows(), + ) + def test_iso6395_rows(self, URI, code, Label_English, Label_French): + lg = Lang(code) + assert lg.name == Label_English + assert lg.pt5 == code + assert lg == Lang(lg) + kwargs = {"name": Label_English, "pt5": code} + assert kwargs.items() <= lg.asdict().items() + + @pytest.mark.parametrize( + "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " + "Category_Of_Change, Notes", + get_iso6391_deprecated_ids_rows(), + ) + def test_iso6391_deprecated_ids( + self, + Id, + Change_To, + English_Name, + French_Name, + Date_Added_Or_Changed, + Category_Of_Change, + Notes, + ): + + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang(Id) + + assert exc_info.value.id == Id + assert exc_info.value.name == English_Name + assert exc_info.value.reason == Category_Of_Change + assert exc_info.value.change_to == Change_To + assert exc_info.value.ret_remedy == Notes + assert exc_info.value.effective == Date_Added_Or_Changed + + if exc_info.value.change_to: + lg = Lang(exc_info.value.change_to) + assert lg.pt1 == Change_To + + @pytest.mark.parametrize( + "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " + "Category_Of_Change, Notes", + get_iso6391_deprecated_names_rows(), + ) + def test_iso6391_deprecated_names( + self, + Id, + Change_To, + English_Name, + French_Name, + Date_Added_Or_Changed, + Category_Of_Change, + Notes, + ): + + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang(English_Name) + + assert exc_info.value.id == Id + assert exc_info.value.name == English_Name + assert exc_info.value.reason == Category_Of_Change + assert exc_info.value.change_to == Change_To + assert exc_info.value.ret_remedy == Notes + assert exc_info.value.effective == Date_Added_Or_Changed + + if exc_info.value.change_to: + lg = Lang(exc_info.value.change_to) + assert lg.pt1 == Change_To + + @pytest.mark.parametrize( + "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " + "Category_Of_Change, Notes", + get_iso6392_deprecated_ids_rows(), + ) + def test_iso6392_deprecated_ids( + self, + Id, + Change_To, + English_Name, + French_Name, + Date_Added_Or_Changed, + Category_Of_Change, + Notes, + ): + + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang(Id) + + assert exc_info.value.id == Id + assert exc_info.value.name == English_Name + assert exc_info.value.reason == Category_Of_Change + assert exc_info.value.change_to == Change_To + assert exc_info.value.ret_remedy == Notes + assert exc_info.value.effective == Date_Added_Or_Changed + + if exc_info.value.change_to: + lg = Lang(exc_info.value.change_to) + assert lg.pt2b == Change_To + + @pytest.mark.parametrize( + "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " + "Category_Of_Change, Notes", + get_iso6392_deprecated_names_rows(), + ) + def test_iso6392_deprecated_names( + self, + Id, + Change_To, + English_Name, + French_Name, + Date_Added_Or_Changed, + Category_Of_Change, + Notes, + ): + + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang(English_Name) + + assert exc_info.value.id == Id + assert English_Name in exc_info.value.name + assert exc_info.value.reason == Category_Of_Change + assert exc_info.value.change_to == Change_To + assert exc_info.value.ret_remedy == Notes + assert exc_info.value.effective == Date_Added_Or_Changed + + if exc_info.value.change_to: + lg = Lang(exc_info.value.change_to) + assert lg.pt2b == Change_To + + @pytest.mark.parametrize( + "Id, Ref_Name, Ret_Reason, Change_To, Ret_Remedy, Effective", + get_iso6393_deprecated_ids_rows(), + ) + def test_iso6393_deprecated_ids( + self, + Id, + Ref_Name, + Ret_Reason, + Change_To, + Ret_Remedy, + Effective, + ): + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang(Id) + + assert exc_info.value.id == Id + assert exc_info.value.name == Ref_Name + assert exc_info.value.reason == Ret_Reason + assert exc_info.value.change_to == Change_To + assert exc_info.value.ret_remedy == Ret_Remedy + assert exc_info.value.effective == Effective + + if exc_info.value.change_to: + lg = Lang(exc_info.value.change_to) + assert lg.pt3 == Change_To + + @pytest.mark.parametrize( + "Id, Ref_Name, Ret_Reason, Change_To, Ret_Remedy, Effective", + get_iso6393_deprecated_names_rows(), + ) + def test_iso6393_deprecated_names( + self, + Id, + Ref_Name, + Ret_Reason, + Change_To, + Ret_Remedy, + Effective, + ): + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang(Ref_Name) + + assert exc_info.value.id == Id + assert exc_info.value.name == Ref_Name + assert exc_info.value.reason == Ret_Reason + assert exc_info.value.change_to == Change_To + assert exc_info.value.ret_remedy == Ret_Remedy + assert exc_info.value.effective == Effective + + if exc_info.value.change_to: + lg = Lang(exc_info.value.change_to) + assert lg.pt3 == Change_To diff --git a/tests/utils.py b/dev_tests/utils.py similarity index 100% rename from tests/utils.py rename to dev_tests/utils.py diff --git a/tests/test_iso639.py b/tests/test_iso639.py index e5a6616..6b3ffc8 100644 --- a/tests/test_iso639.py +++ b/tests/test_iso639.py @@ -1,21 +1,7 @@ import pytest from iso639 import Lang, iter_langs -from iso639.exceptions import DeprecatedLanguageValue, InvalidLanguageValue - -from .utils import ( - get_iso6391_deprecated_ids_rows, - get_iso6391_deprecated_names_rows, - get_iso6392_deprecated_ids_rows, - get_iso6392_deprecated_names_rows, - get_iso6392_rows, - get_iso6393_deprecated_ids_rows, - get_iso6393_deprecated_names_rows, - get_iso6393_macrolanguages_rows, - get_iso6393_names_rows, - get_iso6393_rows, - get_iso6395_rows, -) +from iso639.exceptions import InvalidLanguageValue class TestLang: @@ -112,291 +98,6 @@ def test_hashable_dict_key(self): d.update({lg: "foobar"}) assert d[lg] == "foobar" - @pytest.mark.parametrize( - "Part2b, Part2t, Part1, English_Name, French_Name", - get_iso6392_rows(), - ) - def test_iso6392_rows( - self, Part2b, Part2t, Part1, English_Name, French_Name - ): - - lg = Lang(Part2b) - pt2t = Part2t if Part2t else Part2b # Part2B is default Part2T - assert lg.pt1 == Part1 - assert lg.pt2b == Part2b - assert lg.pt2t == pt2t - assert lg == Lang(lg) - assert not Part1 or lg == Lang(Part1) - assert lg == Lang(pt2t) - - for english_name in English_Name.split("; "): - d = {"pt1": Part1, "pt2b": Part2b, "pt2t": pt2t} - assert lg == Lang(english_name) - assert d.items() <= lg.asdict().items() - - @pytest.mark.parametrize( - "Id, Part2b, Part2t, Part1, Scope, Language_Type, Ref_Name, Comment", - get_iso6393_rows(), - ) - def test_iso6393_rows( - self, - Id, - Part2b, - Part2t, - Part1, - Scope, - Language_Type, - Ref_Name, - Comment, - ): - lg = Lang(Id) - assert lg.name == Ref_Name - assert lg.pt1 == Part1 - assert lg.pt2b == Part2b - assert lg.pt2t == Part2t - assert lg.pt3 == Id - assert lg.pt5 == "" - assert lg == Lang(lg) - assert lg == Lang(Ref_Name) - assert not Part1 or lg == Lang(Part1) - assert not Part2b or lg == Lang(Part2b) - assert not Part2t or lg == Lang(Part2t) - abbreviations = { - "A": "Ancient", - "C": "Constructed", - "E": "Extinct", - "H": "Historical", - "I": "Individual", - "L": "Living", - "M": "Macrolanguage", - "S": "Special", - } - assert lg.scope() == abbreviations[Scope] - assert lg.type() == abbreviations[Language_Type] - d = {"name": Ref_Name, "pt1": Part1, "pt2b": Part2b, "pt2t": Part2t} - assert d.items() <= lg.asdict().items() - - @pytest.mark.parametrize( - "Id, Print_Name, Inverted_Name", - get_iso6393_names_rows(), - ) - def test_iso6393_names_rows(self, Id, Print_Name, Inverted_Name): - lg = Lang(Id) - assert lg.pt3 == Id - assert lg == Lang(Print_Name) - assert lg == Lang(Inverted_Name) - - assert lg.name == Print_Name or lg.other_names().count(Print_Name) == 1 - assert ( - lg.name == Inverted_Name - or lg.other_names().count(Inverted_Name) == 1 - ) - assert lg.other_names() == sorted(lg.other_names()) - assert len(lg.other_names()) == len(set(lg.other_names())) - - @pytest.mark.parametrize( - "M_Id, I_Id, I_Status", - get_iso6393_macrolanguages_rows(), - ) - def test_iso6393_macrolanguages_rows(self, M_Id, I_Id, I_Status): - macro = Lang(M_Id) - indiv = Lang(I_Id) - - assert indiv.macro() == macro - assert macro.individuals().count(indiv) == 1 - assert macro.macro() is None - assert indiv.individuals() == [] - assert macro.individuals() == sorted( - macro.individuals(), key=lambda x: x.pt3 - ) - assert len(macro.individuals()) == len(set(macro.individuals())) - - @pytest.mark.parametrize( - "URI, code, Label_English, Label_French", - get_iso6395_rows(), - ) - def test_iso6395_rows(self, URI, code, Label_English, Label_French): - lg = Lang(code) - assert lg.name == Label_English - assert lg.pt5 == code - assert lg == Lang(lg) - kwargs = {"name": Label_English, "pt5": code} - assert kwargs.items() <= lg.asdict().items() - - @pytest.mark.parametrize( - "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " - "Category_Of_Change, Notes", - get_iso6391_deprecated_ids_rows(), - ) - def test_iso6391_deprecated_ids( - self, - Id, - Change_To, - English_Name, - French_Name, - Date_Added_Or_Changed, - Category_Of_Change, - Notes, - ): - - with pytest.raises(DeprecatedLanguageValue) as exc_info: - Lang(Id) - - assert exc_info.value.id == Id - assert exc_info.value.name == English_Name - assert exc_info.value.reason == Category_Of_Change - assert exc_info.value.change_to == Change_To - assert exc_info.value.ret_remedy == Notes - assert exc_info.value.effective == Date_Added_Or_Changed - - if exc_info.value.change_to: - lg = Lang(exc_info.value.change_to) - assert lg.pt1 == Change_To - - @pytest.mark.parametrize( - "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " - "Category_Of_Change, Notes", - get_iso6391_deprecated_names_rows(), - ) - def test_iso6391_deprecated_names( - self, - Id, - Change_To, - English_Name, - French_Name, - Date_Added_Or_Changed, - Category_Of_Change, - Notes, - ): - - with pytest.raises(DeprecatedLanguageValue) as exc_info: - Lang(English_Name) - - assert exc_info.value.id == Id - assert exc_info.value.name == English_Name - assert exc_info.value.reason == Category_Of_Change - assert exc_info.value.change_to == Change_To - assert exc_info.value.ret_remedy == Notes - assert exc_info.value.effective == Date_Added_Or_Changed - - if exc_info.value.change_to: - lg = Lang(exc_info.value.change_to) - assert lg.pt1 == Change_To - - @pytest.mark.parametrize( - "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " - "Category_Of_Change, Notes", - get_iso6392_deprecated_ids_rows(), - ) - def test_iso6392_deprecated_ids( - self, - Id, - Change_To, - English_Name, - French_Name, - Date_Added_Or_Changed, - Category_Of_Change, - Notes, - ): - - with pytest.raises(DeprecatedLanguageValue) as exc_info: - Lang(Id) - - assert exc_info.value.id == Id - assert exc_info.value.name == English_Name - assert exc_info.value.reason == Category_Of_Change - assert exc_info.value.change_to == Change_To - assert exc_info.value.ret_remedy == Notes - assert exc_info.value.effective == Date_Added_Or_Changed - - if exc_info.value.change_to: - lg = Lang(exc_info.value.change_to) - assert lg.pt2b == Change_To - - @pytest.mark.parametrize( - "Id, Change_To, English_Name, French_Name, Date_Added_Or_Changed, " - "Category_Of_Change, Notes", - get_iso6392_deprecated_names_rows(), - ) - def test_iso6392_deprecated_names( - self, - Id, - Change_To, - English_Name, - French_Name, - Date_Added_Or_Changed, - Category_Of_Change, - Notes, - ): - - with pytest.raises(DeprecatedLanguageValue) as exc_info: - Lang(English_Name) - - assert exc_info.value.id == Id - assert English_Name in exc_info.value.name - assert exc_info.value.reason == Category_Of_Change - assert exc_info.value.change_to == Change_To - assert exc_info.value.ret_remedy == Notes - assert exc_info.value.effective == Date_Added_Or_Changed - - if exc_info.value.change_to: - lg = Lang(exc_info.value.change_to) - assert lg.pt2b == Change_To - - @pytest.mark.parametrize( - "Id, Ref_Name, Ret_Reason, Change_To, Ret_Remedy, Effective", - get_iso6393_deprecated_ids_rows(), - ) - def test_iso6393_deprecated_ids( - self, - Id, - Ref_Name, - Ret_Reason, - Change_To, - Ret_Remedy, - Effective, - ): - with pytest.raises(DeprecatedLanguageValue) as exc_info: - Lang(Id) - - assert exc_info.value.id == Id - assert exc_info.value.name == Ref_Name - assert exc_info.value.reason == Ret_Reason - assert exc_info.value.change_to == Change_To - assert exc_info.value.ret_remedy == Ret_Remedy - assert exc_info.value.effective == Effective - - if exc_info.value.change_to: - lg = Lang(exc_info.value.change_to) - assert lg.pt3 == Change_To - - @pytest.mark.parametrize( - "Id, Ref_Name, Ret_Reason, Change_To, Ret_Remedy, Effective", - get_iso6393_deprecated_names_rows(), - ) - def test_iso6393_deprecated_names( - self, - Id, - Ref_Name, - Ret_Reason, - Change_To, - Ret_Remedy, - Effective, - ): - with pytest.raises(DeprecatedLanguageValue) as exc_info: - Lang(Ref_Name) - - assert exc_info.value.id == Id - assert exc_info.value.name == Ref_Name - assert exc_info.value.reason == Ret_Reason - assert exc_info.value.change_to == Change_To - assert exc_info.value.ret_remedy == Ret_Remedy - assert exc_info.value.effective == Effective - - if exc_info.value.change_to: - lg = Lang(exc_info.value.change_to) - assert lg.pt3 == Change_To - def test_iter_langs(): lg1 = next(iter_langs()) diff --git a/tests/test_readme_examples.py b/tests/test_readme_examples.py new file mode 100644 index 0000000..e2da275 --- /dev/null +++ b/tests/test_readme_examples.py @@ -0,0 +1,150 @@ +import pytest + +from iso639 import Lang, iter_langs +from iso639.exceptions import DeprecatedLanguageValue, InvalidLanguageValue + + +def test_top_example(): + assert repr(Lang("French")) == ( + "Lang(name='French', pt1='fr', pt2b='fre', pt2t='fra', pt3='fra', " + "pt5='')" + ) + + +def test_example_language(): + lg = Lang("deu") + assert lg.name == "German" + assert lg.pt1 == "de" + assert lg.pt2b == "ger" + assert lg.pt2t == "deu" + assert lg.pt3 == "deu" + + +def test_example_group_of_languages(): + lg = Lang("cel") + assert lg.name == "Celtic languages" + assert lg.pt2b == "cel" + assert lg.pt2t == "cel" + assert lg.pt5 == "cel" + + +def test_example_any_id_or_ref_name(): + assert Lang("German") == Lang("de") == Lang("deu") == Lang("ger") + + +def test_example_iso6393_inverted_name(): + s = ( + "Lang(name='Mandarin Chinese', " + "pt1='', pt2b='', pt2t='', pt3='cmn', pt5='')" + ) + assert repr(Lang("Chinese, Mandarin")) == s + + +def test_example_iso6393_printed_name(): + s = ( + "Lang(name='Uighur', " + "pt1='ug', pt2b='uig', pt2t='uig', pt3='uig', pt5='')" + ) + assert repr(Lang("Uyghur")) == s + + +def test_example_iso6392_english_name(): + s = ( + "Lang(name='Catalan', " + "pt1='ca', pt2b='cat', pt2t='cat', pt3='cat', pt5='')" + ) + assert repr(Lang("Valencian")) == s + + +def test_example_case_sensitive(): + s = ( + "Lang(name='Akan', " + "pt1='ak', pt2b='aka', pt2t='aka', pt3='aka', pt5='')" + ) + assert repr(Lang("ak")) == s + s = "Lang(name='Ak', pt1='', pt2b='', pt2t='', pt3='akq', pt5='')" + assert repr(Lang("Ak")) == s + + +def test_example_asdict(): + assert Lang("fra").asdict() == { + "name": "French", + "pt1": "fr", + "pt2b": "fre", + "pt2t": "fra", + "pt3": "fra", + "pt5": "", + } + + +def test_example_sorted_list(): + a = [lg.name for lg in sorted([Lang("deu"), Lang("rus"), Lang("eng")])] + assert a == ["English", "German", "Russian"] + + +def test_example_dict_keys(): + d = {Lang("de"): "foo", Lang("fr"): "bar"} + s = ( + "{Lang(name='German', " + "pt1='de', pt2b='ger', pt2t='deu', pt3='deu', pt5=''): 'foo', " + "Lang(name='French', pt1='fr', " + "pt2b='fre', pt2t='fra', pt3='fra', pt5=''): 'bar'}" + ) + assert repr(d) == s + + +def test_example_iter_langs_list(): + a = [lg.name for lg in iter_langs()] + assert a[:3] == ["'Are'are", "'Auhelawa", "A'ou"] + assert a[-3:] == ["ǂHua", "ǂUngkue", "ǃXóõ"] + + +def test_example_type(): + lg = Lang("Latin") + assert lg.type() == "Historical" + + +def test_example_scope(): + lg = Lang("Arabic") + assert lg.scope() == "Macrolanguage" + + +def test_example_macro(): + lg = Lang("Wu Chinese") + s = ( + "Lang(name='Chinese', " + "pt1='zh', pt2b='chi', pt2t='zho', pt3='zho', pt5='')" + ) + assert repr(lg.macro()) == s + + +def test_example_individuals(): + lg = Lang("Persian") + s = ( + "[Lang(name='Iranian Persian', " + "pt1='', pt2b='', pt2t='', pt3='pes', pt5=''), " + "Lang(name='Dari', " + "pt1='', pt2b='', pt2t='', pt3='prs', pt5='')]" + ) + assert repr(lg.individuals()) == s + + +def test_example_other_names(): + lg = Lang("ast") + assert lg.name == "Asturian" + assert lg.other_names() == ["Asturleonese", "Bable", "Leonese"] + + +def test_example_invalid_value(): + with pytest.raises(InvalidLanguageValue) as exc_info: + Lang("foobar") + s = "'foobar' is not a valid ISO 639 name or identifier." + assert exc_info.value.msg == s + + +def test_example_deprecated_value(): + with pytest.raises(DeprecatedLanguageValue) as exc_info: + Lang("gsc") + assert exc_info.value.name == "Gascon" + lg = Lang(exc_info.value.change_to) + assert lg.name == "Occitan (post 1500)"