Skip to content

Commit

Permalink
feat!: split CardDefs by language
Browse files Browse the repository at this point in the history
BREAKING CHANGE: data for languages other than enUS must now be loaded
separately at runtime. See README.
  • Loading branch information
azeier committed Feb 5, 2025
1 parent 01105a2 commit c491d74
Show file tree
Hide file tree
Showing 10 changed files with 321 additions and 68 deletions.
42 changes: 42 additions & 0 deletions HearthDb.Tests/CardDefsLoadTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using System.Collections.Generic;
using System.IO;
using HearthDb.CardDefs;
using HearthDb.Enums;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace HearthDb.Tests
{
[TestClass]
public class CardDefsLoadTest
{
[TestInitialize]
public void Init()
{
Cards.LoadBaseData(new CardDefs.CardDefs { Entites = new List<Entity>() });
}

[TestCleanup]
public void Cleanup()
{
Cards.LoadBaseData();
}

[TestMethod]
public void LoadCards_CorrectlyAssemblesData()
{
using var fsBase = File.OpenRead("Data/TestCardDefs.base.xml");
Cards.LoadBaseData(fsBase);

Assert.AreEqual("Nutthapon Petchthai", Cards.All["AT_001"].ArtistName);
Assert.AreEqual("Flame Lance", Cards.All["AT_001"].GetLocName(Locale.enUS));
Assert.AreEqual(null, Cards.All["AT_001"].GetLocName(Locale.deDE));

using var fsLocDe = File.OpenRead("Data/TestCardDefs.deDE.xml");
Cards.LoadLocaleData(fsLocDe, Locale.deDE);

Assert.AreEqual("Nutthapon Petchthai", Cards.All["AT_001"].ArtistName);
Assert.AreEqual("Flame Lance", Cards.All["AT_001"].GetLocName(Locale.enUS));
Assert.AreEqual("Flammenlanze", Cards.All["AT_001"].GetLocName(Locale.deDE));
}
}
}
23 changes: 23 additions & 0 deletions HearthDb.Tests/Data/TestCardDefs.base.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<CardDefs build="212197">
<Entity CardID="AT_001" ID="2539" version="2">
<Tag enumID="185" name="CARDNAME" type="LocString">
<enUS>Flame Lance</enUS>
</Tag>
<Tag enumID="184" name="CARDTEXT" type="LocString">
<enUS>Deal $25 damage
to a minion.</enUS>
</Tag>
<Tag enumID="351" name="FLAVORTEXT" type="LocString">
<enUS>It's on the rack next to ice lance, acid lance, and English muffin lance.</enUS>
</Tag>
<Tag enumID="342" name="ARTISTNAME" type="String">Nutthapon Petchthai</Tag>
<Tag enumID="48" name="COST" type="Int" value="5"/>
<Tag enumID="183" name="CARD_SET" type="Int" value="15"/>
<Tag enumID="199" name="CLASS" type="Int" value="4"/>
<Tag enumID="202" name="CARDTYPE" type="Int" value="5"/>
<Tag enumID="203" name="RARITY" type="Int" value="1"/>
<Tag enumID="321" name="COLLECTIBLE" type="Int" value="1"/>
<Tag enumID="1635" name="SPELL_SCHOOL" type="Int" value="2"/>
</Entity>
</CardDefs>
14 changes: 14 additions & 0 deletions HearthDb.Tests/Data/TestCardDefs.deDE.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<CardDefs build="212197">
<Entity CardID="AT_001" ID="2539" version="2">
<Tag enumID="185" name="CARDNAME" type="LocString">
<deDE>Flammenlanze</deDE>
</Tag>
<Tag enumID="184" name="CARDTEXT" type="LocString">
<deDE>Fügt einem Diener $25 Schaden zu.</deDE>
</Tag>
<Tag enumID="351" name="FLAVORTEXT" type="LocString">
<deDE>Die Sommerversion der Eislanze. Gut gegen chronisch kalte Hände.</deDE>
</Tag>
</Entity>
</CardDefs>
4 changes: 4 additions & 0 deletions HearthDb.Tests/HearthDb.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,8 @@
<ProjectReference Include="..\HearthDb\HearthDb.csproj" />
</ItemGroup>

<ItemGroup>
<None Update="Data/*" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

</Project>
5 changes: 3 additions & 2 deletions HearthDb.Tests/UnitTest1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public class UnitTest1
public void BasicTest()
{
Assert.AreEqual("Flame Lance", Cards.All["AT_001"].Name);
Assert.AreEqual("Flammenlanze", Cards.All["AT_001"].GetLocName(Locale.deDE));
// non-enUS no longer included by default. CardDefsLoadTest verifies this works.
// Assert.AreEqual("Flammenlanze", Cards.All["AT_001"].GetLocName(Locale.deDE));
Assert.AreEqual("Nutthapon Petchthai", Cards.All["AT_001"].ArtistName);
Assert.AreEqual(CardSet.TGT, Cards.All["AT_001"].Set);
Assert.AreEqual(true, Cards.All["AT_001"].Collectible);
Expand Down Expand Up @@ -80,7 +81,7 @@ public void TestCardText()
Assert.IsTrue(cramSession.Text.Contains("improved by"));

var flameLance = Cards.All[CardIds.Collectible.Mage.FlameLanceTGT];
Assert.IsTrue(flameLance.GetLocText(Locale.frFR).Contains("$25"));
Assert.IsTrue(flameLance.GetLocText(Locale.enUS).Contains("$25"));

var elvenArcher = Cards.All[CardIds.Collectible.Neutral.ElvenArcherVanilla];
Assert.IsTrue(elvenArcher.Text.Contains("Deal 1 damage"));
Expand Down
4 changes: 4 additions & 0 deletions HearthDb/CardDefs/CardDefs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,9 @@ public class CardDefs
{
[XmlElement("Entity")]
public List<Entity> Entites { get; set; }


[XmlAttribute("build")]
public string Build { get; set; }
}
}
Loading

0 comments on commit c491d74

Please sign in to comment.