@@ -668,7 +668,7 @@ describe("TestRadiusJewelStatDiff", function()
668668 " limited unique radius jewels should rebuild only the same-unique slot that will be displayed" )
669669 end )
670670
671- it (" AddItemTooltip reuses slot-only radius jewel comparison specs until output changes" , function ()
671+ it (" AddItemTooltip reuses slot-only radius jewel comparison outputs until output changes" , function ()
672672 local spec , sockets = setupAllocatedSockets (2 )
673673
674674 local item = newCustomLeapJewel (" Cached Leap" )
@@ -678,29 +678,50 @@ describe("TestRadiusJewelStatDiff", function()
678678
679679 local originalSlotOnlyTooltips = main .slotOnlyTooltips
680680 main .slotOnlyTooltips = true
681+ build .itemsTab .jewelComparisonOutputCache = nil
681682 local specClass = getmetatable (spec )
682683 local originalBuildAllDependsAndPaths = specClass .BuildAllDependsAndPaths
683684 local rebuilds = 0
684685 specClass .BuildAllDependsAndPaths = function (self , ...)
685686 rebuilds = rebuilds + 1
686687 return originalBuildAllDependsAndPaths (self , ... )
687688 end
689+ local originalGetMiscCalculator = build .calcsTab .GetMiscCalculator
690+ local calcCalls = 0
691+ build .calcsTab .GetMiscCalculator = function (self , ...)
692+ local calcFunc , calcBase = originalGetMiscCalculator (self , ... )
693+ return function (...)
694+ calcCalls = calcCalls + 1
695+ return calcFunc (... )
696+ end , calcBase
697+ end
688698
689699 local ok , err = pcall (function ()
690700 local tooltip = new (" Tooltip" ):Tooltip ()
691701 build .itemsTab :AddItemTooltip (tooltip , item , slot )
702+ local firstPassTooltipText = tooltipText (tooltip )
703+ local firstPassCalcCalls = calcCalls
704+ assert .is_true (firstPassCalcCalls > 0 ,
705+ " slot-only radius jewel hover should calculate its output on first pass" )
692706 tooltip = new (" Tooltip" ):Tooltip ()
693707 build .itemsTab :AddItemTooltip (tooltip , item , slot )
708+ assert .are .equals (firstPassTooltipText , tooltipText (tooltip ),
709+ " cached slot-only radius output should preserve tooltip content" )
694710 assert .are .equals (1 , rebuilds ,
695- " slot-only radius jewel hover should reuse its cached comparison spec" )
711+ " slot-only radius jewel hover should reuse its cached comparison output" )
712+ assert .are .equals (firstPassCalcCalls , calcCalls ,
713+ " slot-only radius jewel hover should not recalculate a cached output" )
696714
697715 build .outputRevision = build .outputRevision + 1
698716 tooltip = new (" Tooltip" ):Tooltip ()
699717 build .itemsTab :AddItemTooltip (tooltip , item , slot )
700718 assert .are .equals (2 , rebuilds ,
701- " slot-only radius jewel comparison spec cache should reset when output changes" )
719+ " slot-only radius jewel output cache should reset when output changes" )
720+ assert .is_true (calcCalls > firstPassCalcCalls ,
721+ " slot-only radius jewel comparison should recalculate after output changes" )
702722 end )
703723 specClass .BuildAllDependsAndPaths = originalBuildAllDependsAndPaths
724+ build .calcsTab .GetMiscCalculator = originalGetMiscCalculator
704725 main .slotOnlyTooltips = originalSlotOnlyTooltips
705726 if not ok then
706727 error (err )
@@ -723,10 +744,13 @@ describe("TestRadiusJewelStatDiff", function()
723744 local originalSlotOnlyTooltips = main .slotOnlyTooltips
724745 main .slotOnlyTooltips = true
725746 local specClass = getmetatable (spec )
747+ local originalBuildAllDependsAndPaths = specClass .BuildAllDependsAndPaths
726748 local originalBuildPathFromNode = specClass .BuildPathFromNode
727749 local originalSetNodeDistanceToClassStart = specClass .SetNodeDistanceToClassStart
750+ local originalBuildSplitPersonalityPath = specClass .BuildSplitPersonalityPath
728751 local buildPathCalls = 0
729752 local distanceCalls = 0
753+ local splitPersonalityPathCalls = 0
730754 specClass .BuildPathFromNode = function (self , ...)
731755 buildPathCalls = buildPathCalls + 1
732756 return originalBuildPathFromNode (self , ... )
@@ -735,22 +759,42 @@ describe("TestRadiusJewelStatDiff", function()
735759 distanceCalls = distanceCalls + 1
736760 return originalSetNodeDistanceToClassStart (self , ... )
737761 end
762+ specClass .BuildSplitPersonalityPath = function (self , ...)
763+ splitPersonalityPathCalls = splitPersonalityPathCalls + 1
764+ return originalBuildSplitPersonalityPath (self , ... )
765+ end
738766
739767 local ok , err = pcall (function ()
740768 local tooltip = new (" Tooltip" ):Tooltip ()
741769 build .itemsTab :AddItemTooltip (tooltip , radiusItem , radiusSlot )
770+ local calculationOnlyTooltipText = tooltipText (tooltip )
771+ assert .are .equals (0 , buildPathCalls ,
772+ " calculation-only tooltip specs should not rebuild UI node paths" )
773+ assert .is_true (distanceCalls > 0 ,
774+ " calculation-only tooltip specs should refresh jewel socket distances used by calc" )
775+ assert .are .equals (0 , splitPersonalityPathCalls ,
776+ " calculation-only tooltip specs should not rebuild Split Personality highlight paths" )
777+
778+ build .itemsTab .jewelComparisonOutputCache = nil
779+ specClass .BuildAllDependsAndPaths = function (self )
780+ return originalBuildAllDependsAndPaths (self )
781+ end
782+ local fullRebuildTooltip = new (" Tooltip" ):Tooltip ()
783+ build .itemsTab :AddItemTooltip (fullRebuildTooltip , radiusItem , radiusSlot )
784+ assert .are .equals (calculationOnlyTooltipText , tooltipText (fullRebuildTooltip ),
785+ " calculation-only radius jewel specs should preserve full-rebuild tooltip output" )
786+ assert .is_true (splitPersonalityPathCalls > 0 ,
787+ " the full-rebuild comparison should exercise Split Personality highlight paths" )
742788 end )
789+ specClass .BuildAllDependsAndPaths = originalBuildAllDependsAndPaths
743790 specClass .BuildPathFromNode = originalBuildPathFromNode
744791 specClass .SetNodeDistanceToClassStart = originalSetNodeDistanceToClassStart
792+ specClass .BuildSplitPersonalityPath = originalBuildSplitPersonalityPath
745793 main .slotOnlyTooltips = originalSlotOnlyTooltips
746794 if not ok then
747795 error (err )
748796 end
749797
750- assert .are .equals (0 , buildPathCalls ,
751- " temporary tooltip specs should not rebuild UI node paths" )
752- assert .is_true (distanceCalls > 0 ,
753- " temporary tooltip specs should still refresh jewel socket distances used by calc" )
754798 end )
755799
756800 it (" AddItemTooltip reuses full radius jewel comparison outputs until output changes" , function ()
@@ -764,7 +808,6 @@ describe("TestRadiusJewelStatDiff", function()
764808 local originalSlotOnlyTooltips = main .slotOnlyTooltips
765809 main .slotOnlyTooltips = false
766810 build .itemsTab .jewelComparisonOutputCache = nil
767- build .itemsTab .slotOnlyJewelComparisonSpecCache = nil
768811
769812 local originalGetMiscCalculator = build .calcsTab .GetMiscCalculator
770813 local calcCalls = 0
0 commit comments