Skip to content
This repository has been archived by the owner on Dec 13, 2023. It is now read-only.

Commit

Permalink
Add test to ensure context updates through update blockers
Browse files Browse the repository at this point in the history
  • Loading branch information
LPGhatguy committed Mar 18, 2020
1 parent 501eb09 commit 90626bb
Showing 1 changed file with 56 additions and 1 deletion.
57 changes: 56 additions & 1 deletion src/createContext.spec.lua
@@ -1,7 +1,10 @@
return function()
local Component = require(script.Parent.Component)
local NoopRenderer = require(script.Parent.NoopRenderer)
local Children = require(script.Parent.PropMarkers.Children)
local createContext = require(script.Parent.createContext)
local createElement = require(script.Parent.createElement)
local NoopRenderer = require(script.Parent.NoopRenderer)
local createFragment = require(script.Parent.createFragment)
local createReconciler = require(script.Parent.createReconciler)
local createSpy = require(script.Parent.createSpy)

Expand Down Expand Up @@ -118,6 +121,58 @@ return function()

noopReconciler.unmountVirtualTree(tree)
end)

--[[
This test is the same as the one above, but with a component that
always blocks updates in the middle. We expect behavior to be the
same.
]]
it("should update when the value updates through an update blocking component", function()
local valueSpy = createSpy()
local context = createContext("Test")

local UpdateBlocker = Component:extend("UpdateBlocker")

function UpdateBlocker:render()
return createFragment(self.props[Children])
end

function UpdateBlocker:shouldUpdate()
return false
end

local function Listener()
return createElement(context.Consumer, {
render = valueSpy.value,
})
end

local element = createElement(context.Provider, {
value = "NewTest",
}, {
Blocker = createElement(UpdateBlocker, nil, {
Listener = createElement(Listener),
}),
})

local tree = noopReconciler.mountVirtualTree(element, nil, "Provide Tree")

expect(valueSpy.callCount).to.equal(1)
valueSpy:assertCalledWith("NewTest")

noopReconciler.updateVirtualTree(tree, createElement(context.Provider, {
value = "ThirdTest",
}, {
Blocker = createElement(UpdateBlocker, nil, {
Listener = createElement(Listener),
}),
}))

expect(valueSpy.callCount).to.equal(2)
valueSpy:assertCalledWith("ThirdTest")

noopReconciler.unmountVirtualTree(tree)
end)
end)

describe("Update order", function()
Expand Down

0 comments on commit 90626bb

Please sign in to comment.