diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-31 16:56:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-31 16:56:56 +0200 |
commit | 5394b2ef0f1c7b48e8886257b93698358abb575f (patch) | |
tree | fa864bdefed2097131158b6dd548a9c809c21f62 /tests | |
parent | 1e8cb1ed1f374e5aaaafad7b6c283000bce8aaee (diff) |
UnitTests: Add a first set of item hyperlink tests
Diffstat (limited to 'tests')
-rw-r--r-- | tests/DummyData.cpp | 129 | ||||
-rw-r--r-- | tests/DummyData.h | 38 | ||||
-rw-r--r-- | tests/game/Hyperlinks.cpp | 59 |
3 files changed, 214 insertions, 12 deletions
diff --git a/tests/DummyData.cpp b/tests/DummyData.cpp new file mode 100644 index 00000000000..916edb0accd --- /dev/null +++ b/tests/DummyData.cpp @@ -0,0 +1,129 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "DummyData.h" + +#include "ItemDefines.h" +#include "ItemTemplate.h" +#include "ObjectMgr.h" + +/*static*/ ItemTemplate& UnitTestDataLoader::GetItemTemplate(uint32 itemId, std::string_view name) +{ + ItemTemplate& t = sObjectMgr->_itemTemplateStore[itemId]; + t.ItemId = itemId; + t.Class = ItemClass::ITEM_CLASS_MISC; + t.SubClass = 0; + t.SoundOverrideSubclass = 0; + t.Name1 = name; + t.DisplayInfoID = 0; + t.Quality = ItemQualities::ITEM_QUALITY_ARTIFACT; + t.Flags = 0; + t.Flags2 = 0; + t.BuyCount = 1; + t.BuyPrice = 0; + t.SellPrice = 0; + t.InventoryType = InventoryType::INVTYPE_NON_EQUIP; + t.AllowableClass = static_cast<uint32>(-1); + t.AllowableRace = static_cast<uint32>(-1); + t.ItemLevel = 1; + t.RequiredLevel = 0; + t.RequiredSkill = 0; + t.RequiredSkillRank = 0; + t.RequiredSpell = 0; + t.RequiredHonorRank = 0; + t.RequiredCityRank = 0; + t.RequiredReputationFaction = 0; + t.RequiredReputationRank = 0; + t.MaxCount = 0; + t.Stackable = 1; + t.ContainerSlots = 0; + t.StatsCount = 0; + t.ItemStat = {}; + t.ScalingStatDistribution = 0; + t.ScalingStatValue = 0; + t.Damage = {}; + t.Armor = 0; + t.HolyRes = 0; + t.FireRes = 0; + t.NatureRes = 0; + t.FrostRes = 0; + t.ShadowRes = 0; + t.ArcaneRes = 0; + t.Delay = 0; + t.AmmoType = 0; + t.RangedModRange = 0.0f; + t.Spells = {}; + t.Bonding = ItemBondingType::NO_BIND; + t.Description = ""; + t.PageText = 0; + t.LanguageID = 0; + t.PageMaterial = 0; + t.StartQuest = 0; + t.LockID = 0; + t.Material = static_cast<uint32>(-1); + t.Sheath = 0; + t.RandomProperty = 0; + t.RandomSuffix = 0; + t.Block = 0; + t.ItemSet = 0; + t.MaxDurability = 0; + t.Area = 0; + t.Map = 0; + t.BagFamily = 0; + t.TotemCategory = 0; + t.Socket = {}; + t.socketBonus = 0; + t.GemProperties = 0; + t.RequiredDisenchantSkill = static_cast<uint32>(-1); + t.ArmorDamageModifier = 0.0; + t.Duration = 0; + t.ItemLevel = 0; + t.HolidayId = 0; + t.ScriptId = 0; + t.DisenchantID = 0; + t.FoodType = 0; + t.MinMoneyLoot = 0; + t.MaxMoneyLoot = 0; + + return t; +} + +/*static*/ void UnitTestDataLoader::SetItemLocale(uint32 id, LocaleConstant locale, std::string_view name) +{ + size_t const i = static_cast<size_t>(locale); + ItemLocale& localeData = sObjectMgr->_itemLocaleStore[id]; + if (localeData.Name.size() <= i) + localeData.Name.resize(i + 1); + localeData.Name[i] = name; +} + +/*static*/ void UnitTestDataLoader::LoadItemTemplates() +{ + if (!sObjectMgr->_itemTemplateStore.empty()) + return; + + ItemTemplate& hearthstone = GetItemTemplate(6948, "Hearthstone"); + hearthstone.SoundOverrideSubclass = -1; + hearthstone.DisplayInfoID = 6418; + hearthstone.Quality = ItemQualities::ITEM_QUALITY_NORMAL; + hearthstone.Flags = ItemFlags::ITEM_FLAG_PLAYERCAST; + hearthstone.MaxCount = 1; + hearthstone.Spells[0].SpellId = 8690; + hearthstone.Bonding = ItemBondingType::BIND_WHEN_PICKED_UP; + + SetItemLocale(6948, LocaleConstant::LOCALE_esMX, "Piedra de hogar"); +} diff --git a/tests/DummyData.h b/tests/DummyData.h new file mode 100644 index 00000000000..98812d3b6b8 --- /dev/null +++ b/tests/DummyData.h @@ -0,0 +1,38 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITY_DUMMYDATA_H +#define TRINITY_DUMMYDATA_H + +#include "Common.h" +#include "Define.h" + +#include <string_view> + +struct ItemTemplate; + +class UnitTestDataLoader +{ + public: + static void LoadItemTemplates(); + + private: + static ItemTemplate& GetItemTemplate(uint32 id, std::string_view name); + static void SetItemLocale(uint32 id, LocaleConstant locale, std::string_view name); +}; + +#endif diff --git a/tests/game/Hyperlinks.cpp b/tests/game/Hyperlinks.cpp index ff9062af905..e7ac5287f74 100644 --- a/tests/game/Hyperlinks.cpp +++ b/tests/game/Hyperlinks.cpp @@ -17,23 +17,58 @@ #include "tc_catch2.h" +#include "DummyData.h" #include "Hyperlinks.h" -#include "ChatCommand.h" +#include "World.h" using namespace std::string_view_literals; using namespace Trinity::Hyperlinks; TEST_CASE("Basic link structure", "[Hyperlinks]") { - HyperlinkInfo info = ParseSingleHyperlink("|c12345678|Htag:data1:data2:data3:data4:data5|h[Text]|h|rtail"); - REQUIRE(info.ok); - REQUIRE(info.color == 0x12345678); - REQUIRE(info.color.a == 0x12); - REQUIRE(info.color.r == 0x34); - REQUIRE(info.color.g == 0x56); - REQUIRE(info.color.b == 0x78); - REQUIRE(info.tag == "tag"); - REQUIRE(info.data == "data1:data2:data3:data4:data5"); - REQUIRE(info.text == "Text"); - REQUIRE(info.tail == "tail"); + SECTION("Link without data") + { + HyperlinkInfo info = ParseSingleHyperlink("|cabcdef01|HTag|h[text]|h|r"); + REQUIRE(info.ok); + REQUIRE(info.color == 0xabcdef01); + REQUIRE(info.color.a == 0xab); + REQUIRE(info.color.r == 0xcd); + REQUIRE(info.color.g == 0xef); + REQUIRE(info.color.b == 0x01); + REQUIRE(info.tag == "Tag"); + REQUIRE(info.data == ""); + REQUIRE(info.text == "text"); + REQUIRE(info.tail == ""); + } + SECTION("Link with data") + { + HyperlinkInfo info = ParseSingleHyperlink("|c12345678|Htag:data1:data2:data3:data4:data5|h[Text]|h|rtail"); + REQUIRE(info.ok); + REQUIRE(info.color == 0x12345678); + REQUIRE(info.color.a == 0x12); + REQUIRE(info.color.r == 0x34); + REQUIRE(info.color.g == 0x56); + REQUIRE(info.color.b == 0x78); + REQUIRE(info.tag == "tag"); + REQUIRE(info.data == "data1:data2:data3:data4:data5"); + REQUIRE(info.text == "Text"); + REQUIRE(info.tail == "tail"); + } +} + +TEST_CASE("|Hitem validation", "[Hyperlinks]") +{ + UnitTestDataLoader::LoadItemTemplates(); + sWorld->setIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY, 1); + + SECTION("Basic item link") + { + REQUIRE(true == CheckAllLinks("This is my |cffffffff|Hitem:6948:0:0:0:0:0:0:0:80|h[Hearthstone]|h|r. There are many like it, but this one is mine.")); + REQUIRE(true == CheckAllLinks("Some might call it their |cffffffff|Hitem:6948:0:0:0:0:0:0:0:80|h[Piedra de hogar]|h|r. They all still take you home.")); + REQUIRE(false == CheckAllLinks("However, if you call it a |cffffffff|Hitem:6948:0:0:0:0:0:0:0:80|h[Doormat]|h|r, that's a step too far. Get it? Step?")); + REQUIRE(false == CheckAllLinks("Or if you try to pronounce |cffffffff|Hitem:0:0:0:0:0:0:0:0:80|h[Cthulhu fhtagn]|h|r. Also too far.")); + REQUIRE(false == CheckAllLinks("I'm out of witty one-liners. |cffffffff|Hitem|h[This]|h|r is just lacking data.")); + REQUIRE(false == CheckAllLinks("This is a mis-colored |cffa335ee|Hitem:6948:0:0:0:0:0:0:0:80|h[Hearthstone]|h|r.")); + REQUIRE(false == CheckAllLinks("This is a |cffffffff|Hitem:6948:-1:0:0:0:0:0:0:-1|h[Hearthstone]|h|r that is quite negative.")); + } } |