Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions spec/System/TestImportReimport_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,49 @@ Fireball 20/0 1
assert.are.equal(55, importedItem.requirements.level)
end)

it("imports scaled Darkness Enthroned augments from account data without rescaling them", function()
build.importTab.controls.charImportItemsClearItems.state = true
build.importTab.controls.charImportItemsClearSkills.state = true

local belt = makeImportItem("Fine Belt", "Belt", "test-import-darkness-enthroned")
belt.frameType = 3
belt.name = "Darkness Enthroned"
belt.sockets = {
{ type = "rune" },
{ type = "rune" },
}
belt.socketedItems = {
{ baseType = "Rune of the Blossom" },
{ baseType = "Fox Idol" },
}
belt.runeMods = {
"+83 to Spirit",
"Idols socketed in this item gain the benefits of their Bonded modifiers",
"-1 to Spirit per 2 Levels",
"Bonded: +8% to Quality of all Skills",
}
belt.explicitMods = {
"This item gains bonuses from Socketed Items as though it was a Body Armour",
"66% increased effect of Socketed Augment Items",
}

build.importTab:ImportItemsAndSkills(buildImportPayload({ belt }, {}))
runCallback("OnFrame")

local importedItem = build.itemsTab.items[build.itemsTab.slots.Belt.selItemId]
assert.are.same({ "Rune of the Blossom", "Fox Idol" }, importedItem.runes)
local rawItem = importedItem:BuildRaw()
assert.is_not_nil(rawItem:match("%+83 to Spirit"))
assert.is_not_nil(rawItem:match("%-1 to Spirit per 2 Levels"))
assert.is_not_nil(rawItem:match("Bonded: %+8%% to Quality of all Skills"))

importedItem:BuildAndParseRaw()
assert.are.same({ "Rune of the Blossom", "Fox Idol" }, importedItem.runes)
rawItem = importedItem:BuildRaw()
assert.is_not_nil(rawItem:match("%+83 to Spirit"))
assert.is_not_nil(rawItem:match("Bonded: %+8%% to Quality of all Skills"))
end)

it("preserves skill part selection when reimporting items and skills", function()
assertReimportPreservesSkillSubstate("Twig Focus", "Offhand", "Dark Effigy", "skillPart", 2)
end)
Expand Down
191 changes: 191 additions & 0 deletions spec/System/TestItemParse_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -865,6 +865,197 @@ describe("TestItemParse", function()

end)

it("loads Darkness Enthroned with two augment sockets", function()
local item = new("Item", data.uniques.belt[6])

assert.are.equals("Darkness Enthroned, Fine Belt", item.name)
assert.are.equals(2, item.itemSocketCount)
assert.are.equals(2, #item.sockets)

item.variant = 1 -- Helmet
item:BuildModList()
local baseType, specificType = item:GetSocketedAugmentTypes()
assert.are.equals("armour", baseType)
assert.are.equals("helmet", specificType)
end)

it("infers helmet augments from an advanced copy of Darkness Enthroned", function()
local item = new("Item", [[
Item Class: Belts
Rarity: Unique
Darkness Enthroned
Fine Belt
--------
Requires: Level 62
--------
Sockets: S S
--------
Item Level: 83
--------
28% increased Armour, Evasion and Energy Shield (rune)
12% increased Skill Effect Duration (rune)
12% increased Cooldown Recovery Rate (rune)
--------
{ Implicit Modifier }
Flasks gain 0.17 charges per Second
{ Implicit Modifier — Charm }
Has 1(1-3) Charm Slot
--------
{ Unique Modifier }
This item gains bonuses from Socketed Items as though it was a Helmet — Unscalable Value
{ Unique Modifier }
61(50-100)% increased effect of Socketed Augment Items — Unscalable Value
--------
Kulemak sat triumphant, raising the crown.
Darkness coiled the world in eternal night.
Victory, a mere moment, came crashing down.
No conqueror, no conquered, only searing Light.
--------
Corrupted
--------
Note: ~b/o 40 exalted
]])

assert.are.same({ "Greater Iron Rune", "Quipolatl's Soul Core of Flow" }, item.runes)
local rawItem = item:BuildRaw()
assert.is_not_nil(rawItem:match("28%% increased Armour, Evasion and Energy Shield"))
assert.is_not_nil(rawItem:match("12%% increased Skill Effect Duration"))
assert.is_not_nil(rawItem:match("12%% increased Cooldown Recovery Rate"))

item:BuildAndParseRaw()
assert.are.same({ "Greater Iron Rune", "Quipolatl's Soul Core of Flow" }, item.runes)
rawItem = item:BuildRaw()
assert.is_not_nil(rawItem:match("28%% increased Armour, Evasion and Energy Shield"))
assert.is_not_nil(rawItem:match("12%% increased Skill Effect Duration"))
assert.is_not_nil(rawItem:match("12%% increased Cooldown Recovery Rate"))
end)

it("infers body armour augments from an advanced copy of Darkness Enthroned", function()
local item = new("Item", [[
Item Class: Belts
Rarity: Unique
Darkness Enthroned
Fine Belt
--------
Requires: Level 62
--------
Sockets: S S
--------
Item Level: 86
--------
+83 to Spirit (rune)
Idols socketed in this item gain the benefits of their Bonded modifiers (rune)
-1 to Spirit per 2 Levels (rune)
Bonded: +8% to Quality of all Skills (rune)
--------
{ Implicit Modifier }
Flasks gain 0.17 charges per Second
{ Implicit Modifier — Charm }
Has 1(1-3) Charm Slot
--------
{ Unique Modifier }
This item gains bonuses from Socketed Items as though it was a Body Armour — Unscalable Value
{ Unique Modifier }
66(50-100)% increased effect of Socketed Augment Items — Unscalable Value
--------
Kulemak sat triumphant, raising the crown.
Darkness coiled the world in eternal night.
Victory, a mere moment, came crashing down.
No conqueror, no conquered, only searing Light.
--------
Corrupted
--------
Note: ~b/o 1 divine
]])

assert.are.same({ "Rune of the Blossom", "Fox Idol" }, item.runes)
local rawItem = item:BuildRaw()
assert.is_not_nil(rawItem:match("%+83 to Spirit"))
assert.is_not_nil(rawItem:match("%-1 to Spirit per 2 Levels"))
assert.is_not_nil(rawItem:match("Bonded: %+8%% to Quality of all Skills"))

item:BuildAndParseRaw()
assert.are.same({ "Rune of the Blossom", "Fox Idol" }, item.runes)
rawItem = item:BuildRaw()
assert.is_not_nil(rawItem:match("%+83 to Spirit"))
assert.is_not_nil(rawItem:match("%-1 to Spirit per 2 Levels"))
assert.is_not_nil(rawItem:match("Bonded: %+8%% to Quality of all Skills"))
end)

it("parses Atziri's Splendour soul core socket types", function()
local item = new("Item", data.uniques.body[1])
item.variant = 1 -- Helmet
item:BuildModList()

assert.is_true(item.socketedSoulCoreTypes["helmet"])
assert.is_nil(item.socketedSoulCoreTypes["gloves"])
end)

it("infers Soul Cores using Atziri's Splendour's variant type", function()
local item = new("Item", [[
Item Class: Body Armours
Rarity: Unique
Atziri's Splendour
Sacrificial Regalia
--------
Sockets: S S S S S S
--------
Item Level: 86
--------
8% increased Skill Effect Duration (rune)
8% increased Cooldown Recovery Rate (rune)
--------
Only Soul Cores can be Socketed in this item
This item gains bonuses from Socketed Soul Cores as though it was also a Helmet
]])

assert.are.same({ "Quipolatl's Soul Core of Flow" }, item.runes)
item:BuildAndParseRaw()
assert.are.same({ "Quipolatl's Soul Core of Flow", "None", "None", "None", "None", "None" }, item.runes)
assert.are.equals(2, #item.runeModLines)

item = new("Item", [[
Item Class: Body Armours
Rarity: Unique
Atziri's Splendour
Sacrificial Regalia
--------
Sockets: S S S S S S
--------
Item Level: 86
--------
Hits against you have 40% reduced Critical Damage Bonus (rune)
--------
Only Soul Cores can be Socketed in this item
This item gains bonuses from Socketed Soul Cores as though it was also a Shield
]])

assert.are.same({ "Soul Core of Ticaba" }, item.runes)
item:BuildAndParseRaw()
assert.are.same({ "Soul Core of Ticaba", "None", "None", "None", "None", "None" }, item.runes)
assert.are.equals("Hits against you have 40% reduced Critical Damage Bonus", item.runeModLines[1].line)
end)

it("infers pasted Soul Core lines with socketed Soul Core effect", function()
local item = new("Item", [[
Item Class: Shields
Rarity: Unique
Mahuxotl's Machination
Omen Crest Shield
--------
Sockets: S
--------
Hits against you have 40% reduced Critical Damage Bonus (rune)
--------
100% increased effect of Socketed Soul Cores
]])

assert.are.same({ "Soul Core of Ticaba" }, item.runes)
item:BuildAndParseRaw()
assert.are.same({ "Soul Core of Ticaba" }, item.runes)
assert.is_not_nil(item:BuildRaw():match("Hits against you have 40%% reduced Critical Damage Bonus"))
end)

it("jewel sockets", function()
local item = new("Item", [[
Six Socket Body
Expand Down
115 changes: 115 additions & 0 deletions spec/System/TestItemsTab_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,121 @@ describe("TestItemsTab", function()
assert.is_true(build.itemsTab:IsSocketBoundRune(item, item.runes[1], validRunes))
assert.is_false(build.itemsTab:IsSocketBoundRune(item, item.runes[2], validRunes))
end)

it("uses variant socket types for valid augments", function ()
for _, itemRaw in ipairs({ data.uniques.belt[6], data.uniques.body[1] }) do
local item = new("Item", itemRaw)
item.variant = 1 -- Helmet
item:BuildModList()

local foundHelmetSoulCore = false
for _, rune in ipairs(build.itemsTab:GetValidRunesForItem(item)) do
if rune.name == "Quipolatl's Soul Core of Flow" then
foundHelmetSoulCore = true
break
end
end
assert.is_true(foundHelmetSoulCore)

item.runes[1] = "Quipolatl's Soul Core of Flow"
item:UpdateRunes()

assert.are.equals(2, #item.runeModLines)
assert.are.equals("8% increased Skill Effect Duration", item.runeModLines[1].line)
assert.are.equals("8% increased Cooldown Recovery Rate", item.runeModLines[2].line)
end
end)

it("refreshes valid augments when the item variant changes", function ()
local item = new("Item", data.uniques.body[1])
item.variant = 3 -- Boots
item:BuildModList()
build.itemsTab:SetDisplayItem(item)

build.itemsTab.controls.displayItemVariant:SetSel(1) -- Helmet

local foundMaximumRage = false
for _, rune in ipairs(build.itemsTab.controls.displayItemRune1.list) do
if rune.name == "Tzamoto's Soul Core of Ferocity" then
foundMaximumRage = true
break
end
end
assert.is_true(foundMaximumRage)
end)

it("keeps Darkness Enthroned's socket editor available at zero sockets", function ()
build.itemsTab:CreateDisplayItemFromRaw([[
Item Class: Belts
Rarity: Unique
Darkness Enthroned
Fine Belt
--------
Sockets: S S
--------
This item gains bonuses from Socketed Items as though it was a Helmet
81% increased effect of Socketed Augment Items
]], true)

assert.are.equals(2, build.itemsTab.displayItem.itemSocketCount)
build.itemsTab.controls.displayItemSocketRuneEdit:SetText(0, true)
assert.is_true(build.itemsTab.controls.displayItemSocketRune:IsShown())
build.itemsTab.controls.displayItemSocketRuneEdit:SetText(2, true)
assert.are.equals(2, build.itemsTab.displayItem.itemSocketCount)
end)

it("selects inferred augments from an advanced copy of Darkness Enthroned", function ()
build.itemsTab:CreateDisplayItemFromRaw([[
Item Class: Belts
Rarity: Unique
Darkness Enthroned
Fine Belt
--------
Requires: Level 62
--------
Sockets: S S
--------
Item Level: 86
--------
+83 to Spirit (rune)
Idols socketed in this item gain the benefits of their Bonded modifiers (rune)
-1 to Spirit per 2 Levels (rune)
Bonded: +8% to Quality of all Skills (rune)
--------
{ Implicit Modifier }
Flasks gain 0.17 charges per Second
{ Implicit Modifier — Charm }
Has 1(1-3) Charm Slot
--------
{ Unique Modifier }
This item gains bonuses from Socketed Items as though it was a Body Armour — Unscalable Value
{ Unique Modifier }
66(50-100)% increased effect of Socketed Augment Items — Unscalable Value
]], true)

assert.are.same({ "Rune of the Blossom", "Fox Idol" }, build.itemsTab.displayItem.runes)
assert.are.equals("Rune of the Blossom", build.itemsTab.controls.displayItemRune1.list[build.itemsTab.controls.displayItemRune1.selIndex].name)
assert.are.equals("Fox Idol", build.itemsTab.controls.displayItemRune2.list[build.itemsTab.controls.displayItemRune2.selIndex].name)
end)

it("deduplicates valid augments by socketed item name", function ()
local item = new("Item", data.uniques.body[1])
item.variant = 4 -- Shield
item:BuildModList()

local ticabaCount = 0
local ticabaRune
for _, rune in ipairs(build.itemsTab:GetValidRunesForItem(item)) do
if rune.name == "Soul Core of Ticaba" then
ticabaCount = ticabaCount + 1
ticabaRune = rune
end
end
assert.are.equals(1, ticabaCount)
assert.are.equals(2, #ticabaRune.lines)
assert.are.equals("Hits against you have 20% reduced Critical Damage Bonus", ticabaRune.lines[1])
assert.are.equals("Hits against you have 20% reduced Critical Damage Bonus", ticabaRune.lines[2])
end)
end)

it("does nothing when no matching item is equipped", function ()
Expand Down
Loading
Loading