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
162 changes: 162 additions & 0 deletions spec/System/TestCalcSectionOverlay_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
describe("TestCalcSectionOverlay", function()
before_each(function()
newBuild()
end)

local function findSections()
local pinnable

Check warning on line 7 in spec/System/TestCalcSectionOverlay_spec.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (pinnable)
local controlled
for _, section in ipairs(build.calcsTab.sectionList) do
if section.hasControls then
controlled = controlled or section
else
pinnable = pinnable or section

Check warning on line 13 in spec/System/TestCalcSectionOverlay_spec.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (pinnable)

Check warning on line 13 in spec/System/TestCalcSectionOverlay_spec.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (pinnable)
end
end
return pinnable, controlled

Check warning on line 16 in spec/System/TestCalcSectionOverlay_spec.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (pinnable)
end

it("initializes overlay state and pop-out controls", function()
assert.same({ }, build.overlayPanes)

local pinnable, controlled = findSections()

Check warning on line 22 in spec/System/TestCalcSectionOverlay_spec.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (pinnable)
assert.is_not_nil(pinnable)
assert.is_not_nil(controlled)
assert.is_not_nil(pinnable.controls.popOut)
assert.is_not_nil(controlled.controls.popOut)

pinnable.enabled = true
controlled.enabled = true
assert.is_true(pinnable.controls.popOut.shown())
assert.is_false(controlled.controls.popOut.shown())
end)

it("adds, raises, and removes overlay panes", function()
local first = findSections()
local second
for _, section in ipairs(build.calcsTab.sectionList) do
if section ~= first and not section.hasControls then
second = section
break
end
end
assert.is_not_nil(second)

first.x, first.y = 100, 120
second.x, second.y = 200, 220
first:ToggleOverlay()
second:ToggleOverlay()
assert.same({ first, second }, build.overlayPanes)
assert.is_true(first.isOverlay)
assert.is_false(first.shown())

first:RaiseOverlay()
assert.same({ second, first }, build.overlayPanes)

first:ToggleOverlay()
assert.same({ second }, build.overlayPanes)
assert.is_false(first.isOverlay)
assert.is_false(first.dragging)
end)

it("closes an overlay through its close button", function()
local section = findSections()
section.x, section.y = 100, 120
section:ToggleOverlay()

section:HandleOverlayClick("LEFTBUTTON", section.overlayX + section.width - 10, section.overlayY + 10)

assert.is_false(section.isOverlay)
assert.same({ }, build.overlayPanes)
end)

it("draws a populated overlay outside the Calcs tab", function()
build.viewMode = "CALCS"
runCallback("OnFrame")
local section
for _, candidate in ipairs(build.calcsTab.sectionList) do
if candidate.enabled and not candidate.hasControls then
section = candidate
break
end
end
assert.is_not_nil(section)
section:ToggleOverlay()
build.viewMode = "TREE"

assert.has_no.errors(function()
runCallback("OnFrame")
end)
end)

it("routes a click only to the topmost overlay", function()
local clicked = { }
local function fakePane(name)
return {
isOverlay = true,
IsMouseInOverlay = function()
return true
end,
HandleOverlayClick = function()
table.insert(clicked, name)
end,
HandleOverlayRelease = function()
end,
DrawOverlay = function()
end,
}
end
build.overlayPanes = { fakePane("bottom"), fakePane("top") }
local inputEvents = { { type = "KeyDown", key = "LEFTBUTTON" } }

build:OnFrame(inputEvents)

assert.same({ "top" }, clicked)
assert.is_nil(inputEvents[1])
end)

it("unpins a stat breakdown when its cell is clicked again", function()
local displayData
for _, section in ipairs(build.calcsTab.sectionList) do
for _, subSection in ipairs(section.subSection) do
for _, rowData in ipairs(subSection.data) do
for _, colData in ipairs(rowData) do
if colData.format then
displayData = colData
break
end
end
if displayData then break end
end
if displayData then break end
end
if displayData then break end
end
assert.is_not_nil(displayData)
assert.is_not_nil(displayData.calcSection)
build.calcsTab.controls.breakdown.SetBreakdownData = function()
end

build.calcsTab:SetDisplayStat(displayData, true)
assert.are.equal(displayData, build.calcsTab.displayData)
assert.is_true(build.calcsTab.displayPinned)

build.calcsTab:SetDisplayStat(displayData, true)
assert.is_nil(build.calcsTab.displayData)
assert.is_nil(build.calcsTab.displayPinned)
end)

it("does not attach another pane's pinned breakdown to a hovered overlay", function()
local section = findSections()
local pinnedData = { calcSection = section }
local hoveredData = { calcSection = section }
build.calcsTab.controls.breakdown.SetBreakdownData = function()
end
build.calcsTab:SetDisplayStat(pinnedData, true)

section:SetOverlayDisplayStat(hoveredData)

assert.are.equal(pinnedData, build.calcsTab.displayData)
assert.is_false(section.overlayBreakdownCell)
end)
end)
Loading
Loading