* reorganize card db, add doit file * make card_db_src a true source by removing untranslated entries, removing the untranslated field * turn update language script into a better compiler * move tools into submodule * remove language db comparison test; add travis compile and check-in of card db Co-authored-by: Nick Vance <nickv2002@users.noreply.github.com>
222 lines
6.1 KiB
Python
222 lines
6.1 KiB
Python
from __future__ import print_function
|
|
import shutil
|
|
import os
|
|
import contextlib
|
|
import unicodedata
|
|
|
|
import pytest
|
|
|
|
from domdiv import main
|
|
from domdiv import cards as domdiv_cards
|
|
|
|
|
|
@pytest.fixture
|
|
def rmtestcardb(request):
|
|
def rmd():
|
|
testcardb_dir = os.path.join(str(request.config.rootdir), "tools/card_db")
|
|
if os.path.exists(testcardb_dir):
|
|
print("removing {}".format(testcardb_dir))
|
|
shutil.rmtree(testcardb_dir)
|
|
|
|
request.addfinalizer(rmd)
|
|
|
|
|
|
def test_cardread():
|
|
num_cards_expected = 576
|
|
|
|
options = main.parse_opts([])
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
assert len(cards) == num_cards_expected
|
|
valid_cardsets = {
|
|
u"base",
|
|
u"dominion1stEdition",
|
|
u"dominion2ndEdition",
|
|
u"dominion2ndEditionUpgrade",
|
|
u"intrigue1stEdition",
|
|
u"intrigue2ndEdition",
|
|
u"intrigue2ndEditionUpgrade",
|
|
u"seaside",
|
|
u"alchemy",
|
|
u"prosperity",
|
|
u"cornucopia extras",
|
|
u"cornucopia",
|
|
u"hinterlands",
|
|
u"dark ages",
|
|
u"dark ages extras",
|
|
u"guilds",
|
|
u"adventures",
|
|
u"adventures extras",
|
|
u"empires",
|
|
u"empires extras",
|
|
u"nocturne",
|
|
u"nocturne extras",
|
|
u"promo",
|
|
u"renaissance",
|
|
u"extras",
|
|
u"animals",
|
|
}
|
|
for c in cards:
|
|
assert isinstance(c, domdiv_cards.Card)
|
|
assert c.cardset_tag in valid_cardsets
|
|
|
|
# Option modified card count
|
|
options = main.parse_opts(
|
|
["--no-trash", "--curse10", "--start-decks", "--include-blanks", "7"]
|
|
)
|
|
options = main.clean_opts(options)
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
# Total delta cards is +28 from
|
|
# Trash: -1 * 3 sets = -3
|
|
# Curse: +2 * 4 sets = +8
|
|
# Start Decks: +4 * 4 sets = +16
|
|
# Blanks: +7 = +7
|
|
assert len(cards) == num_cards_expected + 28
|
|
|
|
|
|
def test_languages():
|
|
languages = main.get_languages("card_db")
|
|
for lang in languages:
|
|
print("checking " + lang)
|
|
# for now, just test that they load
|
|
options = main.parse_opts(["--language", lang])
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
assert cards, '"{}" cards did not read properly'.format(lang)
|
|
cards = main.add_card_text(cards, "en_us")
|
|
cards = main.add_card_text(cards, lang)
|
|
if lang == "it":
|
|
assert "Maledizione" in [card.name for card in cards]
|
|
elif lang == "de":
|
|
assert "Fluch" in [card.name for card in cards]
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def change_cwd(d):
|
|
curdir = os.getcwd()
|
|
try:
|
|
os.chdir(d)
|
|
yield
|
|
finally:
|
|
os.chdir(curdir)
|
|
|
|
|
|
def test_only_type():
|
|
options = main.parse_opts(
|
|
[
|
|
"--expansions",
|
|
"base",
|
|
"alchemy",
|
|
"--include-blanks",
|
|
"5",
|
|
"--only-type-any",
|
|
"blank",
|
|
"curse",
|
|
"--only-type-all",
|
|
"attack",
|
|
"action",
|
|
]
|
|
)
|
|
options = main.clean_opts(options)
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
cards = main.filter_sort_cards(cards, options)
|
|
# Total 8 from
|
|
# Blank: +5 added in options
|
|
# Curse: +1 from base
|
|
# Action Attack: +2 from Alchemy
|
|
assert len(cards) == 8
|
|
|
|
|
|
def test_expansion():
|
|
# test that we can use --expansion or
|
|
# --expansions, that we can have multiple
|
|
# items with a single flag, that * syntax
|
|
# works, that we can use either the
|
|
# cardset tag or name, and that capitalization
|
|
# doesn't matter
|
|
options = main.parse_opts(
|
|
[
|
|
"--expansion",
|
|
"advEntUres",
|
|
"dominion 2nd*",
|
|
"--expansions=intrigue1stEdition",
|
|
]
|
|
)
|
|
options = main.clean_opts(options)
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
cards = main.filter_sort_cards(cards, options)
|
|
card_sets = set(x.cardset.lower() for x in cards)
|
|
assert card_sets == {
|
|
"adventures",
|
|
"dominion 2nd edition",
|
|
"dominion 2nd edition upgrade",
|
|
"intrigue 1st edition",
|
|
}
|
|
|
|
|
|
def test_exclude_expansion():
|
|
# test that we can use --exclude-expansion or
|
|
# --exclude-expansions, that we can have multiple
|
|
# items with a single flag, that * syntax
|
|
# works, that we can use either the
|
|
# cardset tag or name, and that capitalization
|
|
# doesn't matter
|
|
options = main.parse_opts(
|
|
[
|
|
"--expansions",
|
|
"adventures",
|
|
"dominion*",
|
|
"intrigue*",
|
|
"--exclude-expansions",
|
|
"dominiOn1stEditIon",
|
|
"intrigue 2nd*",
|
|
"--exclude-expansion",
|
|
"dominion 2nd edition",
|
|
]
|
|
)
|
|
options = main.clean_opts(options)
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
cards = main.filter_sort_cards(cards, options)
|
|
card_sets = set(x.cardset.lower() for x in cards)
|
|
assert card_sets == {
|
|
"adventures",
|
|
"dominion 2nd edition upgrade",
|
|
"intrigue 1st edition",
|
|
}
|
|
|
|
|
|
def test_expansion_description_card_order():
|
|
# test that the expansions cards lists cards
|
|
# in alphabetical order, like they are printed,
|
|
# and that accents don't matter
|
|
options = main.parse_opts(
|
|
[
|
|
"--expansions",
|
|
"Hinterlands",
|
|
"--expansion-dividers",
|
|
"--language",
|
|
"fr",
|
|
"--only-type-any",
|
|
"Expansion",
|
|
]
|
|
)
|
|
options = main.clean_opts(options)
|
|
options.data_path = "."
|
|
cards = main.read_card_data(options)
|
|
cards = main.filter_sort_cards(cards, options)
|
|
card_names = [c.strip() for c in cards[0].description.split("|")]
|
|
# The 26 french card names of the Hinterlands expansion should be sorted as if no accent
|
|
assert len(card_names) == 26
|
|
assert card_names == sorted(
|
|
card_names,
|
|
key=lambda s: "".join(
|
|
c
|
|
for c in unicodedata.normalize("NFD", s)
|
|
if unicodedata.category(c) != "Mn"
|
|
),
|
|
)
|