@@ -188,6 +188,7 @@ class FakeDocument:
188188
189189 values : dict [str , str ] = field (default_factory = dict )
190190 log : list [str ] = field (default_factory = list )
191+ nodes : dict [str , FakeElement ] = field (default_factory = dict )
191192
192193
193194@pytest .fixture
@@ -197,39 +198,57 @@ def fake_document() -> Iterable[FakeDocument]:
197198
198199
199200@dataclass
200- class ElementNode :
201- """An element node."""
201+ class FakeElementNode :
202+ """Fake for PyScript's ``element`` accessor that gets DOM node."""
203+
204+ log : list [str ] = field (default_factory = list )
205+
206+ def removeAttribute (self , name : str ) -> None : # noqa
207+ """Pretend to remove an attribute from this node."""
208+ self .log .append (f"Removed { name } " )
209+
210+
211+ @dataclass
212+ class FakeElement :
213+ """A fake for PyScript's Element global."""
202214
203215 value : str
204216 document : FakeDocument
217+ element : FakeElementNode = FakeElementNode ()
205218
206219 def write (self , value : str ) -> None :
207220 """Collect anything that is written to the node."""
208221 self .document .log .append (value )
209222
210- def removeAttribute (self , name : str ) -> None : # noqa
211- """Pretend to remove an attribute from this node."""
212- pass
213-
214223
215224@dataclass
216225class ElementCallable :
217- """A callable that returns an ElementNode."""
226+ """A callable that registers and returns an ElementNode."""
218227
219228 document : FakeDocument
220229
221- def __call__ (self , key : str ) -> ElementNode :
230+ def __call__ (self , key : str ) -> FakeElement :
222231 """Return an ElementNode."""
223232 value = self .document .values [key ]
224- node = ElementNode (value , self .document )
233+ node = FakeElement (value , self .document )
234+ self .document .nodes [key ] = node
225235 return node
226236
237+ def removeAttribute (self , attr : str ) -> None : # noqa: N802
238+ """Fake the remove attribute call."""
239+ pass
240+
241+ def write (self , content : str ) -> None :
242+ """Fake the write call."""
243+ pass
244+
227245
228246@pytest .fixture
229- def fake_element (fake_document : FakeDocument ) -> None : # type: ignore [misc]
247+ def fake_element (fake_document : FakeDocument ) -> ElementCallable : # type: ignore [misc]
230248 """Install the stateful Element into builtins."""
231249 try :
232- builtins .Element = ElementCallable (fake_document ) #type: ignore [attr-defined]
233- yield
250+ this_element = ElementCallable (fake_document )
251+ builtins .Element = this_element # type: ignore [attr-defined]
252+ yield this_element
234253 finally :
235254 delattr (builtins , "Element" )
0 commit comments