1- # mypy: allow-untyped-defs
21from __future__ import annotations
32
43from datetime import datetime
@@ -41,7 +40,7 @@ def __init__(self, pytester: Pytester, schema: xmlschema.XMLSchema) -> None:
4140
4241 def __call__ (
4342 self , * args : str | os .PathLike [str ], family : str | None = "xunit1"
44- ) -> tuple [RunResult , DomNode ]:
43+ ) -> tuple [RunResult , DomDocument ]:
4544 if family :
4645 args = ("-o" , "junit_family=" + family , * args )
4746 xml_path = self .pytester .path .joinpath ("junit.xml" )
@@ -50,7 +49,7 @@ def __call__(
5049 with xml_path .open (encoding = "utf-8" ) as f :
5150 self .schema .validate (f )
5251 xmldoc = minidom .parse (str (xml_path ))
53- return result , DomNode (xmldoc )
52+ return result , DomDocument (xmldoc )
5453
5554
5655@pytest .fixture
@@ -76,25 +75,21 @@ def nodeval(node: minidom.Element, name: str) -> str | None:
7675 assert on_node == expected
7776
7877
79- class DomNode :
80- def __init__ (self , dom : minidom .Element | minidom . Document ):
78+ class DomDocument :
79+ def __init__ (self , dom : minidom .Document ):
8180 self .__node = dom
8281
83- def __repr__ (self ) -> str :
84- return self .__node .toxml ()
82+ __node : minidom .Document
8583
8684 def find_first_by_tag (self , tag : str ) -> DomNode | None :
8785 return self .find_nth_by_tag (tag , 0 )
8886
89- @property
90- def children (self ) -> list [DomNode ]:
91- return [type (self )(x ) for x in self .__node .childNodes ]
92-
93- @property
94- def get_unique_child (self ) -> DomNode :
95- children = self .children
96- assert len (children ) == 1
97- return children [0 ]
87+ def get_first_by_tag (self , tag : str ) -> DomNode :
88+ maybe = self .find_first_by_tag (tag )
89+ if maybe is None :
90+ raise LookupError (tag )
91+ else :
92+ return maybe
9893
9994 def find_nth_by_tag (self , tag : str , n : int ) -> DomNode | None :
10095 items = self .__node .getElementsByTagName (tag )
@@ -103,15 +98,35 @@ def find_nth_by_tag(self, tag: str, n: int) -> DomNode | None:
10398 except IndexError :
10499 return None
105100 else :
106- return type ( self ) (nth )
101+ return DomNode (nth )
107102
108103 def find_by_tag (self , tag : str ) -> list [DomNode ]:
109- t = type (self )
110- return [t (x ) for x in self .__node .getElementsByTagName (tag )]
104+ return [DomNode (x ) for x in self .__node .getElementsByTagName (tag )]
105+
106+ @property
107+ def children (self ) -> list [DomNode ]:
108+ return [DomNode (x ) for x in self .__node .childNodes ]
109+
110+ @property
111+ def get_unique_child (self ) -> DomNode :
112+ children = self .children
113+ assert len (children ) == 1
114+ return children [0 ]
115+
116+ def toxml (self ) -> str :
117+ return self .__node .toxml ()
118+
119+
120+ class DomNode (DomDocument ):
121+ __node : minidom .Element
122+
123+ def __init__ (self , dom : minidom .Element ):
124+ self .__node = dom
125+
126+ def __repr__ (self ) -> str :
127+ return self .toxml ()
111128
112129 def __getitem__ (self , key : str ) -> str :
113- if isinstance (self .__node , minidom .Document ):
114- raise TypeError (type (self .__node ))
115130 node = self .__node .getAttributeNode (key )
116131 if node is not None :
117132 return cast (str , node .value )
@@ -120,31 +135,19 @@ def __getitem__(self, key: str) -> str:
120135
121136 def assert_attr (self , ** kwargs : object ) -> None :
122137 __tracebackhide__ = True
123- assert isinstance (self .__node , minidom .Element )
124138 return assert_attr (self .__node , ** kwargs )
125139
126- def toxml (self ) -> str :
127- return self .__node .toxml ()
128-
129140 @property
130141 def text (self ) -> str :
131142 return cast (str , self .__node .childNodes [0 ].wholeText )
132143
133144 @property
134145 def tag (self ) -> str :
135- assert isinstance (self .__node , minidom .Element )
136146 return self .__node .tagName
137147
138148 @property
139149 def next_sibling (self ) -> DomNode :
140- return type (self )(self .__node .nextSibling )
141-
142- def get_first_by_tag (self , tag : str ) -> DomNode :
143- maybe = self .find_first_by_tag (tag )
144- if maybe is None :
145- raise LookupError (tag )
146- else :
147- return maybe
150+ return DomNode (self .__node .nextSibling )
148151
149152
150153parametrize_families = pytest .mark .parametrize ("xunit_family" , ["xunit1" , "xunit2" ])
0 commit comments