Skip to content

Commit 91d3b18

Browse files
author
David Emanuel Luksic
committed
Add tests for nesting context
1 parent af13719 commit 91d3b18

1 file changed

Lines changed: 37 additions & 1 deletion

File tree

packages/solid/web/test/context.spec.tsx

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,39 @@ describe("Testing Context", () => {
110110
expect(div.children[1].innerHTML).toBe("dark");
111111
});
112112

113-
const ThemeContextWithoutDefault = createContext<string>();
113+
const ThemeContextWithUndefined = createContext<string | undefined>("light");
114+
const ComponentWithUndefined = () => {
115+
const theme = useContext(ThemeContextWithUndefined);
116+
// ?? 'undefined' will never get reached
117+
return <div>{theme ?? "undefined"}</div>;
118+
};
119+
120+
it("should override when nesting", () => {
121+
const div = document.createElement("div");
122+
render(
123+
() => (
124+
<>
125+
<ComponentWithUndefined />
126+
<ThemeContextWithUndefined.Provider value="dark">
127+
<ComponentWithUndefined />
128+
<ThemeContextWithUndefined.Provider value="darker">
129+
<ComponentWithUndefined />
130+
<ThemeContextWithUndefined.Provider value={undefined}>
131+
<ComponentWithUndefined />
132+
</ThemeContextWithUndefined.Provider>
133+
</ThemeContextWithUndefined.Provider>
134+
</ThemeContextWithUndefined.Provider>
135+
</>
136+
),
137+
div
138+
);
139+
expect(div.children[0].innerHTML!).toBe("light");
140+
expect(div.children[1].innerHTML!).toBe("dark");
141+
expect(div.children[2].innerHTML!).toBe("darker");
142+
expect(div.children[3].innerHTML!).toBe("light");
143+
});
144+
145+
const ThemeContextWithoutDefault = createContext<string | undefined>();
114146
const ComponentWithoutDefault = () => {
115147
const theme = useContext(ThemeContextWithoutDefault);
116148
return <div>{theme ?? "no-default"}</div>;
@@ -124,12 +156,16 @@ describe("Testing Context", () => {
124156
<ComponentWithoutDefault />
125157
<ThemeContextWithoutDefault.Provider value="dark">
126158
<ComponentWithoutDefault />
159+
<ThemeContextWithoutDefault.Provider value={undefined}>
160+
<ComponentWithoutDefault />
161+
</ThemeContextWithoutDefault.Provider>
127162
</ThemeContextWithoutDefault.Provider>
128163
</>
129164
),
130165
div
131166
);
132167
expect(div.children[0].innerHTML!).toBe("no-default");
133168
expect(div.children[1].innerHTML!).toBe("dark");
169+
expect(div.children[2].innerHTML!).toBe("no-default");
134170
});
135171
});

0 commit comments

Comments
 (0)