extras.pp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. {**********************************************************************
  2. This file is part of the Free Component Library (FCL)
  3. DOM Test cases which are missing from w3.org test suite
  4. Copyright (c) 2008 by Sergei Gorelkin, [email protected]
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. unit extras;
  12. {$mode objfpc}{$H+}
  13. interface
  14. uses
  15. SysUtils, Classes, DOM, xmlread, domunit, testregistry;
  16. implementation
  17. type
  18. TDOMTestExtra = class(TDOMTestBase)
  19. published
  20. procedure attr_ownership01;
  21. procedure attr_ownership02;
  22. procedure attr_ownership03;
  23. procedure attr_ownership04;
  24. end;
  25. { TDOMTestExtra }
  26. // verify that an attribute created by Element.SetAttribute()
  27. // has its OwnerElement assigned properly
  28. procedure TDOMTestExtra.attr_ownership01;
  29. var
  30. doc: TDOMDocument;
  31. el: TDOMElement;
  32. attr: TDOMAttr;
  33. attrOwner: TDOMElement;
  34. begin
  35. LoadStringData(doc, '<doc/>');
  36. el := doc.CreateElement('element1');
  37. el.SetAttribute('newAttr', 'newValue');
  38. attr := el.GetAttributeNode('newAttr');
  39. AssertNotNull('attribute', attr);
  40. attrOwner := attr.OwnerElement;
  41. AssertEquals('ownerElement', el, attrOwner);
  42. AssertTrue('specified', attr.Specified);
  43. end;
  44. // verify that an attribute created by Element.SetAttributeNS()
  45. // has its OwnerElement assigned properly
  46. procedure TDOMTestExtra.attr_ownership02;
  47. var
  48. doc: TDOMDocument;
  49. el: TDOMElement;
  50. attr: TDOMAttr;
  51. attrOwner: TDOMElement;
  52. begin
  53. LoadStringData(doc, '<doc/>');
  54. el := doc.CreateElement('element1');
  55. el.SetAttributeNS('http://www.freepascal.org', 'fpc:newAttr', 'newValue');
  56. attr := el.GetAttributeNodeNS('http://www.freepascal.org', 'newAttr');
  57. AssertNotNull('attribute', attr);
  58. attrOwner := attr.OwnerElement;
  59. AssertEquals('ownerElement', el, attrOwner);
  60. AssertTrue('specified', attr.Specified);
  61. end;
  62. // verify that NamedNodeMap.SetNamedItem() resets OwnerElement
  63. // of the attribute being replaced
  64. procedure TDOMTestExtra.attr_ownership03;
  65. var
  66. doc: TDOMDocument;
  67. el: TDOMElement;
  68. attr, attr2: TDOMAttr;
  69. retNode: TDOMNode;
  70. begin
  71. LoadStringData(doc, '<doc/>');
  72. el := doc.CreateElement('element1');
  73. attr := doc.CreateAttribute('newAttr');
  74. el.SetAttributeNode(attr);
  75. AssertEquals('ownerElement_before', el, attr.OwnerElement);
  76. attr2 := doc.CreateAttribute('newAttr');
  77. retNode := el.Attributes.SetNamedItem(attr2);
  78. AssertSame('retNode', attr, retNode);
  79. AssertNull('ownerElement_after', attr.OwnerElement);
  80. AssertEquals('ownerElement2', el, attr2.OwnerElement);
  81. end;
  82. // verify that NamedNodeMap.SetNamedItemNS() resets OwnerElement
  83. // of the attribute being replaced
  84. procedure TDOMTestExtra.attr_ownership04;
  85. var
  86. doc: TDOMDocument;
  87. el: TDOMElement;
  88. attr, attr2: TDOMAttr;
  89. retNode: TDOMNode;
  90. begin
  91. LoadStringData(doc, '<doc/>');
  92. el := doc.CreateElement('element1');
  93. attr := doc.CreateAttributeNS('http://www.freepascal.org', 'fpc:newAttr');
  94. el.SetAttributeNodeNS(attr);
  95. AssertEquals('ownerElement_before', el, attr.OwnerElement);
  96. attr2 := doc.CreateAttributeNS('http://www.freepascal.org', 'fpc:newAttr');
  97. retNode := el.Attributes.SetNamedItemNS(attr2);
  98. AssertSame('retNode', attr, retNode);
  99. AssertNull('ownerElement_after', attr.OwnerElement);
  100. AssertEquals('ownerElement2', el, attr2.OwnerElement);
  101. end;
  102. initialization
  103. RegisterTest(TDOMTestExtra);
  104. end.