@@ -117,6 +117,44 @@ func verifyNodePointers(t *testing.T, n *Node) {
117117 testTrue (t , parent == nil || parent .LastChild == cur )
118118}
119119
120+ func TestChildren (t * testing.T ) {
121+ t .Run ("Has 3 children" , func (t * testing.T ) {
122+ node := & Node {Type : ElementNode }
123+
124+ AddChild (node , & Node {Type : CommentNode })
125+ AddChild (node , & Node {Type : ElementNode })
126+ AddChild (node , & Node {Type : TextNode })
127+
128+ children := node .Children ()
129+
130+ testTrue (t , len (children ) == 3 )
131+ })
132+ }
133+
134+ func TestChildNodes (t * testing.T ) {
135+ t .Run ("Has 1 child node" , func (t * testing.T ) {
136+ node := & Node {Type : ElementNode }
137+
138+ AddChild (node , & Node {Type : CommentNode })
139+ AddChild (node , & Node {Type : ElementNode })
140+ AddChild (node , & Node {Type : TextNode })
141+
142+ children , err := node .ChildNodes ()
143+
144+ testTrue (t , err == nil )
145+ testTrue (t , len (children ) == 1 )
146+ })
147+
148+ t .Run ("Cannot have child nodes" , func (t * testing.T ) {
149+ node := & Node {Type : CommentNode }
150+
151+ children , err := node .ChildNodes ()
152+
153+ testTrue (t , children == nil )
154+ testTrue (t , err != nil )
155+ })
156+ }
157+
120158func TestAddAttr (t * testing.T ) {
121159 for _ , test := range []struct {
122160 name string
@@ -232,6 +270,59 @@ func TestRemoveAttr(t *testing.T) {
232270 }
233271}
234272
273+ func TestIsElementLike (t * testing.T ) {
274+ for _ , test := range []struct {
275+ name string
276+ n * Node
277+ expected bool
278+ }{
279+ {
280+ name : "DocumentNode can have children" ,
281+ n : & Node {Type : DocumentNode },
282+ expected : true ,
283+ },
284+ {
285+ name : "DeclarationNode can have children" ,
286+ n : & Node {Type : DeclarationNode },
287+ expected : true ,
288+ },
289+ {
290+ name : "ElementNode can have children" ,
291+ n : & Node {Type : ElementNode },
292+ expected : true ,
293+ },
294+ {
295+ name : "TextNode cannot have children" ,
296+ n : & Node {Type : TextNode },
297+ expected : false ,
298+ },
299+ {
300+ name : "CharDataNode cannot have children" ,
301+ n : & Node {Type : CharDataNode },
302+ expected : false ,
303+ },
304+ {
305+ name : "CommentNode cannot have children" ,
306+ n : & Node {Type : CommentNode },
307+ expected : false ,
308+ },
309+ {
310+ name : "AttributeNode cannot have children" ,
311+ n : & Node {Type : AttributeNode },
312+ expected : false ,
313+ },
314+ {
315+ name : "NotationNode cannot have children" ,
316+ n : & Node {Type : NotationNode },
317+ expected : false ,
318+ },
319+ } {
320+ t .Run (test .name , func (t * testing.T ) {
321+ testValue (t , test .n .IsElementLike (), test .expected )
322+ })
323+ }
324+ }
325+
235326func TestRemoveFromTree (t * testing.T ) {
236327 xml := `<?procinst?>
237328 <!--comment-->
0 commit comments