{**********************************************************************
This file is part of the Free Component Library (FCL)
DOM Test cases which are missing from w3.org test suite
Copyright (c) 2008 by Sergei Gorelkin, sergei_gorelkin@mail.ru
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
unit extras;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Classes, DOM, xmlread, domunit, testregistry;
implementation
type
TDOMTestExtra = class(TDOMTestBase)
published
procedure attr_ownership01;
procedure attr_ownership02;
procedure attr_ownership03;
procedure attr_ownership04;
end;
{ TDOMTestExtra }
// verify that an attribute created by Element.SetAttribute()
// has its OwnerElement assigned properly
procedure TDOMTestExtra.attr_ownership01;
var
doc: TDOMDocument;
el: TDOMElement;
attr: TDOMAttr;
attrOwner: TDOMElement;
begin
LoadStringData(doc, '');
el := doc.CreateElement('element1');
el.SetAttribute('newAttr', 'newValue');
attr := el.GetAttributeNode('newAttr');
AssertNotNull('attribute', attr);
attrOwner := attr.OwnerElement;
AssertEquals('ownerElement', el, attrOwner);
AssertTrue('specified', attr.Specified);
end;
// verify that an attribute created by Element.SetAttributeNS()
// has its OwnerElement assigned properly
procedure TDOMTestExtra.attr_ownership02;
var
doc: TDOMDocument;
el: TDOMElement;
attr: TDOMAttr;
attrOwner: TDOMElement;
begin
LoadStringData(doc, '');
el := doc.CreateElement('element1');
el.SetAttributeNS('http://www.freepascal.org', 'fpc:newAttr', 'newValue');
attr := el.GetAttributeNodeNS('http://www.freepascal.org', 'newAttr');
AssertNotNull('attribute', attr);
attrOwner := attr.OwnerElement;
AssertEquals('ownerElement', el, attrOwner);
AssertTrue('specified', attr.Specified);
end;
// verify that NamedNodeMap.SetNamedItem() resets OwnerElement
// of the attribute being replaced
procedure TDOMTestExtra.attr_ownership03;
var
doc: TDOMDocument;
el: TDOMElement;
attr, attr2: TDOMAttr;
retNode: TDOMNode;
begin
LoadStringData(doc, '');
el := doc.CreateElement('element1');
attr := doc.CreateAttribute('newAttr');
el.SetAttributeNode(attr);
AssertEquals('ownerElement_before', el, attr.OwnerElement);
attr2 := doc.CreateAttribute('newAttr');
retNode := el.Attributes.SetNamedItem(attr2);
AssertSame('retNode', attr, retNode);
AssertNull('ownerElement_after', attr.OwnerElement);
AssertEquals('ownerElement2', el, attr2.OwnerElement);
end;
// verify that NamedNodeMap.SetNamedItemNS() resets OwnerElement
// of the attribute being replaced
procedure TDOMTestExtra.attr_ownership04;
var
doc: TDOMDocument;
el: TDOMElement;
attr, attr2: TDOMAttr;
retNode: TDOMNode;
begin
LoadStringData(doc, '');
el := doc.CreateElement('element1');
attr := doc.CreateAttributeNS('http://www.freepascal.org', 'fpc:newAttr');
el.SetAttributeNodeNS(attr);
AssertEquals('ownerElement_before', el, attr.OwnerElement);
attr2 := doc.CreateAttributeNS('http://www.freepascal.org', 'fpc:newAttr');
retNode := el.Attributes.SetNamedItemNS(attr2);
AssertSame('retNode', attr, retNode);
AssertNull('ownerElement_after', attr.OwnerElement);
AssertEquals('ownerElement2', el, attr2.OwnerElement);
end;
initialization
RegisterTest(TDOMTestExtra);
end.