1 //**************************************************************************
4 // National Institute Of Standards and Technology
9 // Written by: Carmelo Montanez
11 // Ported to System.Xml by: Mizrahi Rafael rafim@mainsoft.com
12 // Mainsoft Corporation (c) 2003-2004
14 //**************************************************************************
18 using NUnit.Framework;
20 namespace nist_dom.fundamental
23 public class AttrTest//, ITest
25 public static int i = 1;
27 public testResults[] RunTests()
29 testResults[] tests = new testResults[] {core0001A(), core0002A(), core0003A(),core0004A(),
30 core0005A(), core0006A(), core0007A(), core0008A(),
31 core0009A(), core0010A(), core0011A(), core0012A(),
32 core0013A(), core0014A()};
37 //------------------------ test case core-0001A ------------------------
39 // Testing feature - The parentNode attribute for an Attr object should
42 // Testing approach - Retrieve the attribute named "domestic" from the last
43 // child of of the first employee and examine its
44 // parentNode attribute. This test uses the
45 // "GetNamedItem(name)" method from the NamedNodeMap
48 // Semantic Requirements: 1
50 //----------------------------------------------------------------------------
53 public void core0001A()
55 object computedValue = null;
56 object expectedValue = null;
57 System.Xml.XmlNode testNode = null;
58 System.Xml.XmlAttribute domesticAttr = null;
60 testResults results = new testResults("Core0001A");
64 results.description = "The ParentNode attribute should be null for" +
67 // Retrieve targeted data and examine parentNode attribute.
69 testNode = util.nodeObject(util.FIRST, util.SIXTH);
70 domesticAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("domestic");
71 computedValue = domesticAttr.ParentNode;
76 catch(System.Exception ex)
78 computedValue = "Exception " + ex.Message;
81 results.expected = (expectedValue == null).ToString();
82 results.actual = (computedValue == null).ToString();
83 Assert.AreEqual (results.expected, results.actual);
88 //------------------------ End test case core-0001A --------------------------
90 //------------------------- test case core-0002A ----------------------------
93 // Written By: Carmelo Montanez
95 // Testing feature - The previousSibling attribute for an Attr object
98 // Testing approach - Retrieve the attribute named "domestic" from the last
99 // child of of the first employee and examine its
100 // previousSibling attribute. This test uses the
101 // "GetNamedItem(name)" method from the NamedNodeMap
104 // Semantic Requirements: 1
106 //----------------------------------------------------------------------------
109 public void core0002A()
111 object computedValue = null;
112 object expectedValue = null;
113 System.Xml.XmlAttribute domesticAttr = null;
114 System.Xml.XmlNode testNode = null;
116 testResults results = new testResults("Core0002A");
119 results.description = "The previousSibling attribute should be " +
120 "null for an Attr object.";
122 // Retrieve the targeted data and examine its previousSibling attribute.
124 testNode = util.nodeObject(util.FIRST,util.SIXTH);
125 domesticAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("domestic");
126 computedValue = domesticAttr.PreviousSibling;
128 catch(System.Exception ex)
130 computedValue = "Exception " + ex.Message;
135 results.expected = (expectedValue == null).ToString();
136 results.actual = (computedValue == null).ToString();
138 Assert.AreEqual (results.expected, results.actual);
142 //------------------------ End test case core-0002A --------------------------
144 //------------------------- test case core-0003A ----------------------------
145 // Written By: Carmelo Montanez
147 // Testing feature - The nextSibling attribute for an Attr object should
150 // Testing approach - Retrieve the attribute named "domestic" from the
151 // last child of of the first employee and examine
152 // its nextSibling attribute. This test uses the
153 // "GetNamedItem(name)" method from the NamedNodeMap
156 // Semantic Requirements: 1
158 //----------------------------------------------------------------------------
161 public void core0003A()
163 object computedValue = null;
164 object expectedValue = null;
165 System.Xml.XmlAttribute domesticAttr = null;
166 System.Xml.XmlNode testNode = null;
168 testResults results = new testResults("Core0003A");
171 results.description = "The nextSibling attribute should be null " +
172 "for an Attr object.";
174 // Retrieve the targeted data and examine its nextSibling attribute.
176 testNode = util.nodeObject(util.FIRST,util.SIXTH);
177 domesticAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("domestic");
178 computedValue = domesticAttr.NextSibling;
180 catch(System.Exception ex)
182 computedValue = "Exception " + ex.Message;
187 results.expected = (expectedValue == null).ToString();
188 results.actual = (computedValue == null).ToString();
190 Assert.AreEqual (results.expected, results.actual);
194 //------------------------ End test case core-0003A --------------------------
196 //------------------------- test case core-0004A ----------------------------
198 // Written By: Carmelo Montanez
200 // Testing feature - Attr objects may be associated with Element nodes
201 // contained within a DocumentFragment.
203 // Testing approach - Create a new DocumentFragment object and add a newly
204 // created Element node to it (with one attribute). Once
205 // the element is added, its attribute should be available
206 // as an attribute associated with an Element within a
209 // Semantic Requirements: 2
211 //----------------------------------------------------------------------------
214 public void core0004A()
216 string computedValue = "";
217 string expectedValue = "domestic";
218 System.Xml.XmlAttribute domesticAttr = null;
220 testResults results = new testResults("Core0004A");
223 results.description = "Attr objects may be associated with Element " +
224 "nodes contained within a DocumentFragment.";
226 System.Xml.XmlDocumentFragment docFragment = util.getDOMDocument().CreateDocumentFragment();
227 System.Xml.XmlElement newElement = (System.Xml.XmlElement)util.createNode(util.ELEMENT_NODE,"element1");
229 // The new DocumentFragment is empty upon creation. Set an attribute for
230 // a newly created element and add the element to the documentFragment.
232 newElement.SetAttribute("domestic","Yes");
233 docFragment.AppendChild(newElement);
235 // Access the attributes of the only child of the documentFragment
237 domesticAttr = (System.Xml.XmlAttribute)docFragment.FirstChild.Attributes.Item(0) ;
238 computedValue = domesticAttr.Name;
240 catch(System.Exception ex)
242 computedValue = "Exception " + ex.Message;
247 results.expected = expectedValue;
248 results.actual = computedValue;
251 Assert.AreEqual (results.expected, results.actual);
255 //------------------------ End test case core-0004A --------------------------
257 //-------------------------- test case core-0005A ----------------------------
259 // Testing feature - If an Attr is explicitly assigned any value, then that
260 // value is the attribute's effective value.
262 // Testing approach - Retrieve the attribute name "domestic" from the last
263 // child of of the first employee element and examine its
264 // assigned value. This test uses the
265 // "GetNamedItem(name)" method from the NamedNodeMap
268 // Semantic Requirements: 3
270 //----------------------------------------------------------------------------
273 public void core0005A()
275 string computedValue = "";
276 string expectedValue = "Yes";
277 System.Xml.XmlAttribute domesticAttr = null;
278 System.Xml.XmlNode testNode = null;
280 testResults results = new testResults("Core0005A");
283 results.description = "If an attribute is explicitly assigned any value, " +
284 "then that value is the attribute's effective value.";
286 // Retrieve the targeted data and examine its assigned value.
288 testNode = util.nodeObject(util.FIRST,util.SIXTH);
289 domesticAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("domestic");
290 computedValue = domesticAttr.Value;
292 catch(System.Exception ex)
294 computedValue = "Exception " + ex.Message;
299 results.expected = expectedValue;
300 results.actual = computedValue;
302 Assert.AreEqual (results.expected, results.actual);
306 //------------------------ End test case core-0005A --------------------------
308 //-------------------------- test case core-0006A ----------------------------
310 // Testing feature - If there is no explicit value assigned to an attribute
311 // and there is a declaration for this attribute and that
312 // declaration includes a default value, then that default
313 // value is the Attribute's default value.
315 // Testing approach - Retrieve the attribute named "street" from the
316 // last child of of the first employee and examine its
317 // value. That value should be the value given during
318 // the declaration of the attribute in the DTD file.
319 // This test uses the "GetNamedItem(name)" method from
320 // the NamedNodeMap interface.
322 // Semantic Requirements: 4
324 //----------------------------------------------------------------------------
327 [Category ("NotDotNet")]
328 public void core0006A()
330 string computedValue = "";
331 string expectedValue = "Yes";
332 System.Xml.XmlAttribute streetAttr = null;
333 System.Xml.XmlNode testNode = null;
335 testResults results = new testResults("Core0006A");
338 results.description = "If there is no explicit value assigned to an " +
339 "attribute and there is a declaration for this " +
340 "attribute and that declaration includes a default " +
341 "value, then that default value is the Attribute's " +
344 // Retrieve the targeted data and examine its default value.
346 testNode = util.nodeObject(util.FIRST,util.SIXTH);
347 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
348 computedValue = streetAttr.Value;
350 catch(System.Exception ex)
352 computedValue = "Exception " + ex.Message;
357 results.expected = expectedValue;
358 results.actual = computedValue;
360 Assert.AreEqual (results.expected, results.actual);
364 //------------------------ End test case core-0006A --------------------------
366 //-------------------------- test case core-0007A ---------------------------
368 // Testing feature - The "name" Attribute of an Attribute node.
370 // Testing approach - Retrieve the attribute named "street" from the
371 // last child of the second employee and examine its "name"
372 // attribute. This test uses the "GetNamedItem(name)"
373 // method from the NamedNodeMap interface.
375 // Semantic Requirements: 5
377 //----------------------------------------------------------------------------
380 public void core0007A()
382 string computedValue = "";
383 string expectedValue = "street";
384 System.Xml.XmlAttribute streetAttr = null;
385 System.Xml.XmlNode testNode = null;
387 testResults results = new testResults("Core0007A");
390 results.description = "The \"name\" attribute of an Attr object contains " +
391 "the name of that attribute.";
393 // Retrieve the targeted data and capture its assigned name.
395 testNode = util.nodeObject(util.SECOND,util.SIXTH);
396 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
397 computedValue = streetAttr.Name;
399 catch(System.Exception ex)
401 computedValue = "Exception " + ex.Message;
406 results.expected = expectedValue;
407 results.actual = computedValue;
409 Assert.AreEqual (results.expected, results.actual);
413 //------------------------ End test case core-0007A --------------------------
415 //-------------------------- test case core-0008A ---------------------------
417 // Testing feature - The "specified" attribute of an Attr node should be set
418 // to true if the attribute was explicitly given a value.
420 // Testing approach - Retrieve the attribute named "doestic" from the last
421 // child of the first employee and examine its "specified"
422 // attribute. It should be set to true. This test
423 // uses the "GetNamedItem(name)" method from the
424 // NamedNodeMap interface.
426 // Semantic Requirements: 6
428 //----------------------------------------------------------------------------
431 public void core0008A()
433 string computedValue = "";//0;
434 string expectedValue = "True";
435 System.Xml.XmlNode testNode = null;
436 System.Xml.XmlAttribute domesticAttr = null;
438 testResults results = new testResults("Core0008A");
441 results.description = "The \"specified\" attribute for an Attr object " +
442 "should be set to true if the attribute was " +
443 "explictly given a value.";
445 // Retrieve the targeted data and capture its "specified" value.
447 testNode = util.nodeObject(util.FIRST,util.SIXTH);
448 domesticAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("domestic");;
449 computedValue = domesticAttr.Specified.ToString();
451 catch(System.Exception ex)
453 computedValue = "Exception " + ex.Message;
458 results.expected = expectedValue;
459 results.actual = computedValue;
461 Assert.AreEqual (results.expected, results.actual);
465 //------------------------ End test case core-0008A --------------------------
467 //-------------------------- test case core-0009A ---------------------------
469 // Testing feature - The "specified" attribute for an Attr node should be
470 // set to false if the attribute was not explicitly given
473 // Testing approach - Retrieve the attribute named "street"(not explicity
474 // given a value) from the last child of the first employee
475 // and examine its "specified" attribute. It should be
476 // set to false. This test uses the
477 // "GetNamedItem(name)" method from the NamedNodeMap
480 // Semantic Requirements: 6
482 //----------------------------------------------------------------------------
485 public void core0009A()
487 string computedValue = "";//0;
488 string expectedValue = "False";
489 System.Xml.XmlAttribute streetAttr = null;
490 System.Xml.XmlNode testNode = null;
492 testResults results = new testResults("Core0009A");
495 results.description = "The \"specified\" attribute for an Attr node " +
496 "should be set to false if the attribute was " +
497 "not explictly given a value.";
499 // Retrieve the targeted data and capture its "specified" attribute.
501 testNode = util.nodeObject(util.FIRST,util.SIXTH);
502 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
503 computedValue = streetAttr.Specified.ToString();
505 catch(System.Exception ex)
507 computedValue = "Exception " + ex.Message;
512 results.expected = expectedValue;
513 results.actual = computedValue;
515 Assert.AreEqual (results.expected, results.actual);
519 //------------------------ End test case core-0009A --------------------------
521 //-------------------------- test case core-0010A ---------------------------
523 // Testing feature - The "specified" attribute for an Attr node should be
524 // automatically flipped to true if value of the attribute
525 // is changed (even its ends up having a default DTD value)
527 // Testing approach - Retrieve the attribute named "street" from the last
528 // child of the third employee and change its value to "Yes"
529 // (which is its default DTD value). This should cause the
530 // "specified" attribute to be flipped to true. This test
531 // makes use of the "setAttribute(name,value )" method from
532 // the Element interface and the "GetNamedItem(name)"
533 // method from the NamedNodeMap interface.
535 // Semantic Requirements: 7
537 //----------------------------------------------------------------------------
540 public void core0010A()
542 string computedValue = "";//"";
543 string expectedValue = "True";
544 System.Xml.XmlAttribute streetAttr = null;
545 System.Xml.XmlElement testNode = null;
547 testResults results = new testResults("Core0010A");
550 results.description = "The \"specified\" attribute for an Attr node " +
551 "should be flipped to true if the attribute value " +
552 "is changed (even it changed to its default value).";
554 // Retrieve the targeted data and set a new attribute for it, then
555 // capture its "specified" attribute.
557 testNode = (System.Xml.XmlElement)util.nodeObject(util.THIRD,util.FIFTH);
558 testNode.SetAttribute("street","Yes");//testNode.node.setAttribute("street","Yes");
559 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
560 computedValue = streetAttr.Specified.ToString();
562 catch(System.Exception ex)
564 computedValue = "Exception " + ex.Message;
569 results.expected = expectedValue;
570 results.actual = computedValue;
572 Assert.AreEqual (results.expected, results.actual);
576 //------------------------ End test case core-0010A --------------------------
578 //-------------------------- test case core-0011A ---------------------------
580 // Testing feature - To respecify the attribute to its default value from the
581 // DTD, the attribute must be deleted. The implementation
582 // will then make a new attribute available with the
583 // "specified" attribute set to false.
585 // Testing approach - Retrieve the attribute named "street" from the last
586 // child of the third employee and delete it. The
587 // implementation should then create a new attribute with
588 // its default value and "specified" set to false. This
589 // test uses the "removeAttribute(name)" from the Element
590 // interface and the "GetNamedItem(name)" method from the
591 // NamedNodeMap interface.
593 // Semantic Requirements: 8
595 //----------------------------------------------------------------------------
598 public void core0011A()
600 string computedValue = "";//"";
601 string expectedValue = "False";
602 System.Xml.XmlAttribute streetAttr = null;
603 System.Xml.XmlElement testNode = null;
605 testResults results = new testResults("Core0011A");
608 results.description = "Re-setting an attribute to its default value " +
609 "requires that the attribute be deleted. The " +
610 "implementation should create a new attribute " +
611 "with its \"specified\" attribute set to false.";
613 // Retrieve the targeted data, remove the "street" attribute and capture
614 // its specified attribute.
616 testNode = (System.Xml.XmlElement)util.nodeObject(util.THIRD,util.SIXTH);
617 testNode.RemoveAttribute("street");//testNode.node.removeAttribute("street");
618 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
619 computedValue = streetAttr.Specified.ToString();
621 catch(System.Exception ex)
623 computedValue = "Exception " + ex.Message;
628 results.expected = expectedValue;
629 results.actual = computedValue;
631 Assert.AreEqual (results.expected, results.actual);
635 //------------------------ End test case core-0011A --------------------------
637 //-------------------------- test case core-0012A ---------------------------
639 // Testing feature - Upon retrieval, the "value" of an attribute is returned
640 // as a string with characters and general entity references
641 // replaced with their values.
643 // Testing approach - Retrieve the attribute named "street" from the last
644 // child of the fourth employee and examine its value
645 // attribute. This value should be "Yes" after the
646 // EntityReference is replaced with its value. This
647 // test uses the "GetNamedItem(name)" method from
648 // the NamedNodeMap interface.
650 // Semantic Requirements: 9
652 //----------------------------------------------------------------------------
655 public void core0012A()
657 string computedValue = "";
658 string expectedValue = "Yes";
659 System.Xml.XmlAttribute streetAttr = null;
660 System.Xml.XmlNode testNode = null;
662 testResults results = new testResults("Core0012A");
665 results.description = "Upon retrieval the \"value\" attribute of an Attr" +
666 "object is returned as a string with any Entity " +
667 "References replaced with their values.";
669 // Retrieve the targeted data.
671 testNode = util.nodeObject(util.FOURTH,util.SIXTH);
672 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
673 computedValue = streetAttr.Value;
675 catch(System.Exception ex)
677 computedValue = "Exception " + ex.Message;
682 results.expected = expectedValue;
683 results.actual = computedValue;
685 Assert.AreEqual (results.expected, results.actual);
689 //------------------------ End test case core-0012A --------------------------
691 //-------------------------- test case core-0013A ---------------------------
693 // Testing feature - On setting, the "value" attribute of an Attr node
694 // creates a Text node with the unparsed content of
697 // Testing approach - Retrieve the attribute named "street" from the last
698 // child of the fourth employee and assign the "Y%ent1;"
699 // string to its value attribute. This value is not yet
700 // parsed and therefore should still be the same upon
701 // retrieval. This test uses the "GetNamedItem(name)"
702 // method from the NamedNodeMap interface.
704 // Semantic Requirements: 10
706 //----------------------------------------------------------------------------
709 public void core0013A()
711 string computedValue = "";
712 string expectedValue = "Y%ent1;";
713 System.Xml.XmlAttribute streetAttr = null;
714 System.Xml.XmlNode testNode = null;
716 testResults results = new testResults("Core0013A");
719 results.description = "On setting, the \"value\" attribute of an Attr " +
720 "object creates a Text node with the unparsed " +
721 "content of the string.";
723 // Retrieve the targeted data, assign a value to it and capture its
724 // "value" attribute.
726 testNode = util.nodeObject(util.FOURTH,util.SIXTH);
727 streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
728 streetAttr.Value = "Y%ent1;";
729 computedValue = streetAttr.Value;
731 catch(System.Exception ex)
733 computedValue = "Exception " + ex.Message;
738 results.expected = expectedValue;
739 results.actual = computedValue;
741 Assert.AreEqual (results.expected, results.actual);
745 //------------------------ End test case core-0013A --------------------------
747 //-------------------------- test case core-0014A ---------------------------
749 // Testing feature - Setting the "value" attribute raises a
750 // NO_MODIFICATION_ALLOWED_ERR Exception if the
753 // Testing approach - Retrieve the first attribute of the Entity node named
754 // "ent4" and attempt to change its value attribute.
755 // Since the descendants of Entity nodes are readonly, the
756 // desired exception should be raised.
758 // Semantic Requirements: 11
760 //----------------------------------------------------------------------------
763 [Category ("NotDotNet")] // MS DOM is buggy
764 public void core0014A()
766 string computedValue = "";
767 System.Xml.XmlNode testNode = null;
768 System.Xml.XmlAttribute readOnlyAttribute = null;
769 string expectedValue = "System.ArgumentException";//util.NO_MODIFICATION_ALLOWED_ERR;
771 testResults results = new testResults("Core0014A");
774 results.description = "Setting the \"value\" attribute raises a " +
775 "NO_MODIFICATION_ALLOWED_ERR Exception if " +
776 "the node is readonly.";
779 // Retrieve the targeted data.
781 testNode = util.getEntity("ent4");
782 readOnlyAttribute = (System.Xml.XmlAttribute)testNode.FirstChild.Attributes.Item(0);
784 // attempt to set a value on a readonly node should raise an exception.
788 readOnlyAttribute.Value = "ABCD";
790 catch (ArgumentException ex)
792 computedValue = ex.GetType ().FullName;
795 catch(System.Exception ex)
797 computedValue = "Exception " + ex.Message;
799 results.expected = expectedValue;
800 results.actual = computedValue;
804 Assert.AreEqual (results.expected, results.actual);
807 //------------------------ End test case core-0014A --------------------------