Port the Markdown value tests from spline-pokedex. Fix remaining strings.

This commit is contained in:
Petr Viktorin 2011-04-28 16:50:22 +03:00
parent f7a9c28e60
commit b711edd511
4 changed files with 68 additions and 20 deletions

View file

@ -247,13 +247,13 @@ Can be smeared on sweet-smelling trees to attract tree-dwelling Pokémon after s
: Fully-grown plant will last 25% longer before dying and possibly regrowing."
98,9,,"Used on a path of soil
: Plant will regrow after dying 25% more times."
99,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:lileep}.
100,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:anorith}.
101,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:omanyte}.
102,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:kabuto}.
103,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:aerodactyl}.
104,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:shieldon}.
105,9,,Give to a scientist in the {location:mining-museum} in {location:oreburgh-city} or the Museum of Science in {location:pewter-city} to receive a []{pokemon:cranidos}.
99,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:lileep}.
100,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:anorith}.
101,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:omanyte}.
102,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:kabuto}.
103,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:aerodactyl}.
104,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:shieldon}.
105,9,,Give to a scientist in the []{location:mining-museum} in []{location:oreburgh-city} or the Museum of Science in []{location:pewter-city} to receive a []{pokemon:cranidos}.
106,9,Vendor trash.,Vendor trash.
107,9,,"Used on a party Pokémon
: Evolves a []{pokemon:minccino} into []{pokemon:cinccino}, a []{pokemon:roselia} into []{pokemon:roserade}, or a []{pokemon:togetic} into []{pokemon:togekiss}."

1 item_id local_language_id short_effect effect
247 246 9 Held: The holder's Reflect and Light Screen will create effects lasting for eight turns rather than five. As this item affects the move rather than the barrier itself, the effect is not lost if the holder leaves battle or drops this item.
248 247 9 Held: Damage from the holder's moves is increased by 30%. On each turn the holder uses a damage-inflicting move, it takes 10% its max HP in damage.
249 248 9 Held: Whenever the holder uses a move that requires a turn to charge first (Bounce, Dig, Dive, Fly, Razor Wind, Skull Bash, Sky Attack, or Solarbeam), this item is consumed and the charge is skipped. Skull Bash still provides a Defense boost.
250 249 9 Held: Badly poisons the holder at the end of each turn.
251 250 9 Held: Burns the holder at the end of each turn.
252 251 9 Held by Ditto: Doubles the holder's initial Speed.
253 252 9 Held: If the holder has full HP and is attacked for regular damage that would faint it, this item is consumed and prevents the holder's HP from lowering below 1. This effect works against multi-hit attacks, but does not work against the effects of Doom Desire or Future Sight.
254 253 9 Held: Raises the holder's Accuracy by 20% when it goes last. Ingame description is incorrect.
255 254 9 Held: Each time the holder uses the same move consecutively, its power is increased by another 10% of its original, to a maximum of 100%.
256 255 9 Held: Decreases the holder's Speed by 50%. If the holder is Flying or has Levitate, it takes regular damage from Ground attacks and is suspectible to Spikes and Toxic Spikes.
257 256 9 Held: The holder will go last within its move's priority bracket, regardless of Speed. If multiple Pokémon within the same priority bracket are subject to this effect, the slower Pokémon will go first. The holder will move after Pokémon with Stall. If the holder has Stall, Stall is ignored. This item ignores Trick Room.
258 257 9 Held: When the holder becomes Attracted, the Pokémon it is Attracted to becomes Attracted back.
259 258 9 Held: If the holder is Poison-type, restores 1/16 max HP at the end of each turn. Otherwise, damages the holder by 1/16 its max HP at the end of each turn.

View file

@ -4,7 +4,7 @@ language_id,table,id,column,source_crc,string
10,Ability,2,name,56942be0,Mrholení
10,Ability,2,short_effect,0d8facc9,"Přivolá [déšť]{mechanic:rain}, který trvá až po ukončení zápasu."
10,Ability,3,name,dbbf77d4,Zrychlení
10,Ability,3,short_effect,56aba85b,Zvýší [Rychlost]{mechanic:speed} o jeden [stupeň]{mechanic:stat modifier} po každém kole.
10,Ability,3,short_effect,56aba85b,Zvýší [Rychlost]{mechanic:speed} o jeden [stupeň]{mechanic:stat-modifier} po každém kole.
10,Ability,4,name,8598e4a6,Bojové brnění
10,Ability,5,name,1456165e,Robustnost
10,Ability,6,name,fc71d5b7,Vlhkost
@ -37,7 +37,7 @@ language_id,table,id,column,source_crc,string
10,Ability,33,name,5ce14a2f,Hbitá plavba
10,Ability,33,short_effect,21665f64,Během [deště]{mechanic:rain} zdvojnásobuje [Rychlost]{mechanic:speed}.
10,Ability,34,name,06f85388,Chlorofyl
10,Ability,34,short_effect,ae2ff9cc,Během [slunečného počasí]{mechanic:strong sunlight} zdvojnásobuje [Rychlost]{mechanic:speed}.
10,Ability,34,short_effect,ae2ff9cc,Během [slunečného počasí]{mechanic:strong-sunlight} zdvojnásobuje [Rychlost]{mechanic:speed}.
10,Ability,35,name,c6497d6e,Osvětlení
10,Ability,36,name,f09afaa5,Kopírování
10,Ability,37,name,7cb6bfd7,Obrovská síla
@ -83,7 +83,7 @@ language_id,table,id,column,source_crc,string
10,AbilityChangelog,1,effect,a881640e,Nemá žádný účinek při zápasu.
10,AbilityChangelog,2,effect,757e1dd8,"Funguje jen proti útokům, které vždy omráčí na jeden úder. (Ne proti těm, které jsou prostě příliš silné.)"
10,AbilityChangelog,3,effect,46cb479e,Nemá žádný účinek v poli.
10,AbilityChangelog,4,effect,8742fa05,"Neabsorbuje nezraňující [elektrické]{type:Electric} útoky, např. [Thunder Wave]{move}."
10,AbilityChangelog,4,effect,8742fa05,"Neabsorbuje nezraňující [elektrické]{type:electric} útoky, např. []{move:thunder-wave}."
10,AbilityChangelog,7,effect,46cb479e,Nemá žádný účinek v poli.
10,AbilityChangelog,8,effect,46cb479e,Nemá žádný účinek v poli.
10,AbilityChangelog,10,effect,46cb479e,Nemá žádný účinek v poli.
@ -840,7 +840,7 @@ language_id,table,id,column,source_crc,string
10,MoveEffect,29,short_effect,4ff5bbff,Okamžitě ukončí zápas s divokým pokémonem. Trenéry donutí vyměnit pokémona.
10,MoveEffect,30,short_effect,e5e4180d,Zaútočí 2-5× za sebou.
10,MoveEffect,32,short_effect,b2aff3a6,"Má $effect_chance% šanci, že se protivník zalekne."
10,MoveEffect,34,effect,cc5f917e,[Těžce otráví]{mechanic:Bad poison} protivníka.
10,MoveEffect,34,effect,cc5f917e,[Těžce otráví]{mechanic:bad-poison} protivníka.
10,MoveEffect,34,short_effect,385d3c02,Vážně otráví protivníka; jed ubere každé kolo více zranění.
10,MoveEffect,35,short_effect,9c649109,Rozsype peníze v hodnotě 5× úrovně uživatele.
10,MoveEffect,36,short_effect,0feee880,Na pět kol sníží zranění ze speciálních útoků o 50%.
@ -859,7 +859,7 @@ language_id,table,id,column,source_crc,string
10,MoveEffect,61,short_effect,ad03d235,Sníží protivníkovi Obranu o dva stupně.
10,MoveEffect,63,short_effect,5ec14f8a,Sníží protivníkovu Speciální obranu o dva stupně.
10,MoveEffect,66,short_effect,a2bdb301,Na pět kol sníží zranění z fyzických útoků o 50%.
10,MoveEffect,67,effect,22a71d53,[Otráví]{mechanic:Poison} protivníka.
10,MoveEffect,67,effect,22a71d53,[Otráví]{mechanic:poison} protivníka.
10,MoveEffect,67,short_effect,7b481e44,Otráví protivníka.
10,MoveEffect,69,short_effect,c981b610,Má $effect_chance% šanci snížit protivníkův Útok o jeden stupeň.
10,MoveEffect,70,short_effect,804b11f9,Má $effect_chance% šanci snížit protivníkovu Obranu o jeden stupeň.
@ -964,27 +964,27 @@ language_id,table,id,column,source_crc,string
10,MoveEffect,338,short_effect,11cd0067,Má $effect_chance% šanci zmást protivníka.
10,MoveEffect,10004,short_effect,c028872e,Sníží protivníkovu Mrštnost o dva stupně.
10,MoveEffect,10006,short_effect,b2988a39,Na pět kol zatemní oblohu.
10,MoveFlag,1,description,66523335,Uživatel se dotkne cíle. Toto zaktivuje některé schopnosti (např. [Static]{ability}) a věci (např. [Sticky Barb]{item}).
10,MoveFlag,1,description,66523335,Uživatel se dotkne cíle. Toto zaktivuje některé schopnosti (např. []{ability:static}) a věci (např. []{item:sticky-barb}).
10,MoveFlag,1,name,e34fed78,Způsobí dotek
10,MoveFlag,2,description,d88ae74f,"Tento útok má nabíjecí kolo, které lze přeskočit pomocí [Power Herbu]{item:Power Herb}."
10,MoveFlag,2,description,d88ae74f,"Tento útok má nabíjecí kolo, které lze přeskočit pomocí []{item:power-herb}."
10,MoveFlag,2,name,877244e9,Má nabíjecí kolo
10,MoveFlag,3,description,6cea8671,"Kolo po použití tohoto útoku přeskočí Pokémon svůj tah, aby se mohl dobít."
10,MoveFlag,3,name,80fd2238,Má dobíjecí kolo
10,MoveFlag,4,description,102038da,"Tento útok nebude fungovat, použil-li cíl toto kolo [Detect]{move} či [Protect]{move}."
10,MoveFlag,4,description,102038da,"Tento útok nebude fungovat, použil-li cíl toto kolo []{move:detect} či [protect]{move:protect}."
10,MoveFlag,4,name,d249c071,Blokované Detectem a Protectem
10,MoveFlag,5,name,b343310a,Odrazitelný
10,MoveFlag,6,description,6d5f5422,"Tento útok bude ukraden, pokud jiný Pokémon toto kolo použil [Snatch]{move}"
10,MoveFlag,6,description,6d5f5422,"Tento útok bude ukraden, pokud jiný Pokémon toto kolo použil []{move:snatch}"
10,MoveFlag,6,name,3a15243a,Ukradnutelný
10,MoveFlag,7,description,25e3b9d0,Pokémon co je cílem tohoto útoku ho může zkopírovat pomocí [Mirror Move]{move}
10,MoveFlag,7,description,25e3b9d0,Pokémon co je cílem tohoto útoku ho může zkopírovat pomocí []{move:mirror-move}
10,MoveFlag,7,name,c4e8a756,Kopírovatelný Mirror Movem
10,MoveFlag,8,name,ae7d93f1,Úderový
10,MoveFlag,9,description,b34264c8,Pokémoni s [Soundproof]{ability} jsou proti tomuto útoku odolní.
10,MoveFlag,9,description,b34264c8,Pokémoni s []{ability:soundproof} jsou proti tomuto útoku odolní.
10,MoveFlag,9,name,752347d8,Zvukový
10,MoveFlag,10,description,ee78fc04,Tento útok nelze použít při [zvýšené gravitaci]{move:Gravity}
10,MoveFlag,10,description,ee78fc04,Tento útok nelze použít při [zvýšené gravitaci]{move:gravity}
10,MoveFlag,10,name,05543fc0,Nepoužitelný s Gravitací
10,MoveFlag,11,description,e68d87da,Tento útok může zmražený pokémon použít k rozmrznutí.
10,MoveFlag,11,name,a2a771b1,Rozmrazí při použití
10,MoveFlag,13,description,5660882a,Tento útok bude blokován [Heal Blockem]{move:Heal Block}.
10,MoveFlag,13,description,5660882a,Tento útok bude blokován pomocí []{move:heal-block}.
10,MoveFlag,13,name,eb08469e,Léčí
10,MoveMetaAilment,1,name,5134bb3b,Paralýza
10,MoveMetaAilment,2,name,cef2eda8,Spánek

1 language_id table id column source_crc string
4 10 Ability 2 name 56942be0 Mrholení
5 10 Ability 2 short_effect 0d8facc9 Přivolá [déšť]{mechanic:rain}, který trvá až po ukončení zápasu.
6 10 Ability 3 name dbbf77d4 Zrychlení
7 10 Ability 3 short_effect 56aba85b Zvýší [Rychlost]{mechanic:speed} o jeden [stupeň]{mechanic:stat modifier} po každém kole. Zvýší [Rychlost]{mechanic:speed} o jeden [stupeň]{mechanic:stat-modifier} po každém kole.
8 10 Ability 4 name 8598e4a6 Bojové brnění
9 10 Ability 5 name 1456165e Robustnost
10 10 Ability 6 name fc71d5b7 Vlhkost
37 10 Ability 33 name 5ce14a2f Hbitá plavba
38 10 Ability 33 short_effect 21665f64 Během [deště]{mechanic:rain} zdvojnásobuje [Rychlost]{mechanic:speed}.
39 10 Ability 34 name 06f85388 Chlorofyl
40 10 Ability 34 short_effect ae2ff9cc Během [slunečného počasí]{mechanic:strong sunlight} zdvojnásobuje [Rychlost]{mechanic:speed}. Během [slunečného počasí]{mechanic:strong-sunlight} zdvojnásobuje [Rychlost]{mechanic:speed}.
41 10 Ability 35 name c6497d6e Osvětlení
42 10 Ability 36 name f09afaa5 Kopírování
43 10 Ability 37 name 7cb6bfd7 Obrovská síla
83 10 AbilityChangelog 1 effect a881640e Nemá žádný účinek při zápasu.
84 10 AbilityChangelog 2 effect 757e1dd8 Funguje jen proti útokům, které vždy omráčí na jeden úder. (Ne proti těm, které jsou prostě příliš silné.)
85 10 AbilityChangelog 3 effect 46cb479e Nemá žádný účinek v poli.
86 10 AbilityChangelog 4 effect 8742fa05 Neabsorbuje nezraňující [elektrické]{type:Electric} útoky, např. [Thunder Wave]{move}. Neabsorbuje nezraňující [elektrické]{type:electric} útoky, např. []{move:thunder-wave}.
87 10 AbilityChangelog 7 effect 46cb479e Nemá žádný účinek v poli.
88 10 AbilityChangelog 8 effect 46cb479e Nemá žádný účinek v poli.
89 10 AbilityChangelog 10 effect 46cb479e Nemá žádný účinek v poli.
840 10 MoveEffect 29 short_effect 4ff5bbff Okamžitě ukončí zápas s divokým pokémonem. Trenéry donutí vyměnit pokémona.
841 10 MoveEffect 30 short_effect e5e4180d Zaútočí 2-5× za sebou.
842 10 MoveEffect 32 short_effect b2aff3a6 Má $effect_chance% šanci, že se protivník zalekne.
843 10 MoveEffect 34 effect cc5f917e [Těžce otráví]{mechanic:Bad poison} protivníka. [Těžce otráví]{mechanic:bad-poison} protivníka.
844 10 MoveEffect 34 short_effect 385d3c02 Vážně otráví protivníka; jed ubere každé kolo více zranění.
845 10 MoveEffect 35 short_effect 9c649109 Rozsype peníze v hodnotě 5× úrovně uživatele.
846 10 MoveEffect 36 short_effect 0feee880 Na pět kol sníží zranění ze speciálních útoků o 50%.
859 10 MoveEffect 61 short_effect ad03d235 Sníží protivníkovi Obranu o dva stupně.
860 10 MoveEffect 63 short_effect 5ec14f8a Sníží protivníkovu Speciální obranu o dva stupně.
861 10 MoveEffect 66 short_effect a2bdb301 Na pět kol sníží zranění z fyzických útoků o 50%.
862 10 MoveEffect 67 effect 22a71d53 [Otráví]{mechanic:Poison} protivníka. [Otráví]{mechanic:poison} protivníka.
863 10 MoveEffect 67 short_effect 7b481e44 Otráví protivníka.
864 10 MoveEffect 69 short_effect c981b610 Má $effect_chance% šanci snížit protivníkův Útok o jeden stupeň.
865 10 MoveEffect 70 short_effect 804b11f9 Má $effect_chance% šanci snížit protivníkovu Obranu o jeden stupeň.
964 10 MoveEffect 338 short_effect 11cd0067 Má $effect_chance% šanci zmást protivníka.
965 10 MoveEffect 10004 short_effect c028872e Sníží protivníkovu Mrštnost o dva stupně.
966 10 MoveEffect 10006 short_effect b2988a39 Na pět kol zatemní oblohu.
967 10 MoveFlag 1 description 66523335 Uživatel se dotkne cíle. Toto zaktivuje některé schopnosti (např. [Static]{ability}) a věci (např. [Sticky Barb]{item}). Uživatel se dotkne cíle. Toto zaktivuje některé schopnosti (např. []{ability:static}) a věci (např. []{item:sticky-barb}).
968 10 MoveFlag 1 name e34fed78 Způsobí dotek
969 10 MoveFlag 2 description d88ae74f Tento útok má nabíjecí kolo, které lze přeskočit pomocí [Power Herbu]{item:Power Herb}. Tento útok má nabíjecí kolo, které lze přeskočit pomocí []{item:power-herb}.
970 10 MoveFlag 2 name 877244e9 Má nabíjecí kolo
971 10 MoveFlag 3 description 6cea8671 Kolo po použití tohoto útoku přeskočí Pokémon svůj tah, aby se mohl dobít.
972 10 MoveFlag 3 name 80fd2238 Má dobíjecí kolo
973 10 MoveFlag 4 description 102038da Tento útok nebude fungovat, použil-li cíl toto kolo [Detect]{move} či [Protect]{move}. Tento útok nebude fungovat, použil-li cíl toto kolo []{move:detect} či [protect]{move:protect}.
974 10 MoveFlag 4 name d249c071 Blokované Detectem a Protectem
975 10 MoveFlag 5 name b343310a Odrazitelný
976 10 MoveFlag 6 description 6d5f5422 Tento útok bude ukraden, pokud jiný Pokémon toto kolo použil [Snatch]{move} Tento útok bude ukraden, pokud jiný Pokémon toto kolo použil []{move:snatch}
977 10 MoveFlag 6 name 3a15243a Ukradnutelný
978 10 MoveFlag 7 description 25e3b9d0 Pokémon co je cílem tohoto útoku ho může zkopírovat pomocí [Mirror Move]{move} Pokémon co je cílem tohoto útoku ho může zkopírovat pomocí []{move:mirror-move}
979 10 MoveFlag 7 name c4e8a756 Kopírovatelný Mirror Movem
980 10 MoveFlag 8 name ae7d93f1 Úderový
981 10 MoveFlag 9 description b34264c8 Pokémoni s [Soundproof]{ability} jsou proti tomuto útoku odolní. Pokémoni s []{ability:soundproof} jsou proti tomuto útoku odolní.
982 10 MoveFlag 9 name 752347d8 Zvukový
983 10 MoveFlag 10 description ee78fc04 Tento útok nelze použít při [zvýšené gravitaci]{move:Gravity} Tento útok nelze použít při [zvýšené gravitaci]{move:gravity}
984 10 MoveFlag 10 name 05543fc0 Nepoužitelný s Gravitací
985 10 MoveFlag 11 description e68d87da Tento útok může zmražený pokémon použít k rozmrznutí.
986 10 MoveFlag 11 name a2a771b1 Rozmrazí při použití
987 10 MoveFlag 13 description 5660882a Tento útok bude blokován [Heal Blockem]{move:Heal Block}. Tento útok bude blokován pomocí []{move:heal-block}.
988 10 MoveFlag 13 name eb08469e Léčí
989 10 MoveMetaAilment 1 name 5134bb3b Paralýza
990 10 MoveMetaAilment 2 name cef2eda8 Spánek

View file

@ -142,6 +142,8 @@ def create_translation_table(_table_name, foreign_class, relation_name,
def getset_factory(underlying_type, instance):
def getter(translations):
text = getattr(translations, column.name)
if text is None:
return text
session = object_session(translations)
language = translations.local_language
return string_getter(text, session, language)

View file

@ -1,6 +1,7 @@
# Encoding: UTF-8
from nose.tools import *
from sqlalchemy.orm.exc import NoResultFound
from pokedex.db import tables, connect, util, markdown
@ -102,3 +103,48 @@ class TestStrings(object):
print md.as_html(identifier_url=lambda category, ident: "%s/%s" % (category, ident))
assert md.as_html(identifier_url=lambda category, ident: "%s/%s" % (category, ident)) == (
'<p><a href="move/thunderbolt">Thunderbolt</a> <a href="mechanic/paralysis">paralyzes</a></p>')
def test_markdown_values(self):
"""Check all markdown values
Scans the database schema for Markdown columns, runs through every value
in each, and ensures that it's valid Markdown.
"""
# Move effects have their own special wrappers. Explicitly test them separately
yield self.check_markdown_column, tables.Move, None, 'effect'
yield self.check_markdown_column, tables.Move, None, 'short_effect'
for cls in tables.mapped_classes:
for translation_cls in cls.translation_classes:
for column in translation_cls.__table__.c:
if column.info.get('string_getter') == markdown.MarkdownString:
yield self.check_markdown_column, cls, translation_cls, column.name
def check_markdown_column(self, parent_class, translation_class, column_name):
"""Implementation for the above"""
query = self.connection.query(parent_class)
if translation_class:
query = query.join(translation_class)
for item in query:
for language, markdown in getattr(item, column_name + '_map').items():
if markdown is None:
continue
key = u"Markdown in {0} #{1}'s {2} (lang={3})".format(
parent_class.__name__, item.id, column_name, language.identifier)
try:
text = markdown.as_text()
except NoResultFound:
assert False, u"{0} references something that doesn't exist:\n{1}".format(
key, markdown.source_text)
except AttributeError:
print markdown
raise
error_message = u"{0} leaves syntax cruft:\n{1}"
error_message = error_message.format(key, text)
ok_(not any(char in text for char in '[]{}'), error_message)