1- # mypy: allow-untyped-defs
21from __future__ import annotations
32
43from datetime import datetime
@@ -40,7 +39,7 @@ def __init__(self, pytester: Pytester, schema: xmlschema.XMLSchema) -> None:
4039
4140 def __call__ (
4241 self , * args : str | os .PathLike [str ], family : str | None = "xunit1"
43- ) -> tuple [RunResult , DomNode ]:
42+ ) -> tuple [RunResult , DomDocument ]:
4443 if family :
4544 args = ("-o" , "junit_family=" + family , * args )
4645 xml_path = self .pytester .path .joinpath ("junit.xml" )
@@ -49,7 +48,7 @@ def __call__(
4948 with xml_path .open (encoding = "utf-8" ) as f :
5049 self .schema .validate (f )
5150 xmldoc = minidom .parse (str (xml_path ))
52- return result , DomNode (xmldoc )
51+ return result , DomDocument (xmldoc )
5352
5453
5554@pytest .fixture
@@ -75,25 +74,21 @@ def nodeval(node: minidom.Element, name: str) -> str | None:
7574 assert on_node == expected
7675
7776
78- class DomNode :
79- def __init__ (self , dom : minidom .Element | minidom . Document ):
77+ class DomDocument :
78+ def __init__ (self , dom : minidom .Document ):
8079 self .__node = dom
8180
82- def __repr__ (self ) -> str :
83- return self .__node .toxml ()
81+ __node : minidom .Document
8482
8583 def find_first_by_tag (self , tag : str ) -> DomNode | None :
8684 return self .find_nth_by_tag (tag , 0 )
8785
88- @property
89- def children (self ) -> list [DomNode ]:
90- return [type (self )(x ) for x in self .__node .childNodes ]
91-
92- @property
93- def get_unique_child (self ) -> DomNode :
94- children = self .children
95- assert len (children ) == 1
96- return children [0 ]
86+ def get_first_by_tag (self , tag : str ) -> DomNode :
87+ maybe = self .find_first_by_tag (tag )
88+ if maybe is None :
89+ raise LookupError (tag )
90+ else :
91+ return maybe
9792
9893 def find_nth_by_tag (self , tag : str , n : int ) -> DomNode | None :
9994 items = self .__node .getElementsByTagName (tag )
@@ -102,15 +97,35 @@ def find_nth_by_tag(self, tag: str, n: int) -> DomNode | None:
10297 except IndexError :
10398 return None
10499 else :
105- return type ( self ) (nth )
100+ return DomNode (nth )
106101
107102 def find_by_tag (self , tag : str ) -> list [DomNode ]:
108- t = type (self )
109- return [t (x ) for x in self .__node .getElementsByTagName (tag )]
103+ return [DomNode (x ) for x in self .__node .getElementsByTagName (tag )]
104+
105+ @property
106+ def children (self ) -> list [DomNode ]:
107+ return [DomNode (x ) for x in self .__node .childNodes ]
108+
109+ @property
110+ def get_unique_child (self ) -> DomNode :
111+ children = self .children
112+ assert len (children ) == 1
113+ return children [0 ]
114+
115+ def toxml (self ) -> str :
116+ return self .__node .toxml ()
117+
118+
119+ class DomNode (DomDocument ):
120+ __node : minidom .Element
121+
122+ def __init__ (self , dom : minidom .Element ):
123+ self .__node = dom
124+
125+ def __repr__ (self ) -> str :
126+ return self .toxml ()
110127
111128 def __getitem__ (self , key : str ) -> str :
112- if isinstance (self .__node , minidom .Document ):
113- raise TypeError (type (self .__node ))
114129 node = self .__node .getAttributeNode (key )
115130 if node is not None :
116131 return cast (str , node .value )
@@ -119,31 +134,19 @@ def __getitem__(self, key: str) -> str:
119134
120135 def assert_attr (self , ** kwargs : object ) -> None :
121136 __tracebackhide__ = True
122- assert isinstance (self .__node , minidom .Element )
123137 return assert_attr (self .__node , ** kwargs )
124138
125- def toxml (self ) -> str :
126- return self .__node .toxml ()
127-
128139 @property
129140 def text (self ) -> str :
130141 return cast (str , self .__node .childNodes [0 ].wholeText )
131142
132143 @property
133144 def tag (self ) -> str :
134- assert isinstance (self .__node , minidom .Element )
135145 return self .__node .tagName
136146
137147 @property
138148 def next_sibling (self ) -> DomNode :
139- return type (self )(self .__node .nextSibling )
140-
141- def get_first_by_tag (self , tag : str ) -> DomNode :
142- maybe = self .find_first_by_tag (tag )
143- if maybe is None :
144- raise LookupError (tag )
145- else :
146- return maybe
149+ return DomNode (self .__node .nextSibling )
147150
148151
149152parametrize_families = pytest .mark .parametrize ("xunit_family" , ["xunit1" , "xunit2" ])
0 commit comments