diff options
Diffstat (limited to 'mcs/class/System.XML/Test/XmlNamespaceManagerTests.cs')
-rw-r--r-- | mcs/class/System.XML/Test/XmlNamespaceManagerTests.cs | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/mcs/class/System.XML/Test/XmlNamespaceManagerTests.cs b/mcs/class/System.XML/Test/XmlNamespaceManagerTests.cs new file mode 100644 index 00000000000..b1b520e2ecc --- /dev/null +++ b/mcs/class/System.XML/Test/XmlNamespaceManagerTests.cs @@ -0,0 +1,138 @@ +// +// XmlNamespaceManagerTests.cs +// +// Author: +// Jason Diamond (jason@injektilo.org) +// +// (C) 2002 Jason Diamond http://injektilo.org/ +// + +using System; +using System.Xml; + +using NUnit.Framework; + +namespace Ximian.Mono.Tests +{ + public class XmlNamespaceManagerTests : TestCase + { + public XmlNamespaceManagerTests () : base ("Ximian.Mono.Tests.XmlNameSpaceManagerTests testsuite") { } + public XmlNamespaceManagerTests (string name) : base (name) { } + + private XmlNameTable nameTable; + private XmlNamespaceManager namespaceManager; + + protected override void SetUp () + { + nameTable = new NameTable (); + namespaceManager = new XmlNamespaceManager (nameTable); + } + + public void TestNewNamespaceManager () + { + // make sure that you can call PopScope when there aren't any to pop. + Assert (!namespaceManager.PopScope ()); + + // the following strings should have been added to the name table by the + // namespace manager. + string xmlnsPrefix = nameTable.Get ("xmlns"); + string xmlPrefix = nameTable.Get ("xml"); + string stringEmpty = nameTable.Get (String.Empty); + string xmlnsNamespace = "http://www.w3.org/2000/xmlns/"; + string xmlNamespace = "http://www.w3.org/XML/1998/namespace"; + + // none of them should be null. + AssertNotNull (xmlnsPrefix); + AssertNotNull (xmlPrefix); + AssertNotNull (stringEmpty); + AssertNotNull (xmlnsNamespace); + AssertNotNull (xmlNamespace); + + // Microsoft's XmlNamespaceManager reports that these three + // namespaces aren't declared for some reason. + Assert (!namespaceManager.HasNamespace ("xmlns")); + Assert (!namespaceManager.HasNamespace ("xml")); + Assert (!namespaceManager.HasNamespace (String.Empty)); + + // these three namespaces are declared by default. + AssertEquals ("http://www.w3.org/2000/xmlns/", namespaceManager.LookupNamespace ("xmlns")); + AssertEquals ("http://www.w3.org/XML/1998/namespace", namespaceManager.LookupNamespace ("xml")); + AssertEquals (String.Empty, namespaceManager.LookupNamespace (String.Empty)); + + // the namespaces should be the same references found in the name table. + AssertSame (xmlnsNamespace, namespaceManager.LookupNamespace ("xmlns")); + AssertSame (xmlNamespace, namespaceManager.LookupNamespace ("xml")); + AssertSame (stringEmpty, namespaceManager.LookupNamespace (String.Empty)); + + // looking up undeclared namespaces should return null. + AssertNull (namespaceManager.LookupNamespace ("foo")); + } + + public void TestAddNamespace () + { + // add a new namespace. + namespaceManager.AddNamespace ("foo", "http://foo/"); + // make sure the new namespace is there. + Assert (namespaceManager.HasNamespace ("foo")); + AssertEquals ("http://foo/", namespaceManager.LookupNamespace ("foo")); + } + + public void TestAddNamespaceWithNameTable () + { + // add a known reference to the name table. + string fooNamespace = "http://foo/"; + nameTable.Add(fooNamespace); + + // create a new string with the same value but different address. + string fooNamespace2 = "http://"; + fooNamespace2 += "foo/"; + + // the references must be different in order for this test to prove anything. + Assert (!Object.ReferenceEquals (fooNamespace, fooNamespace2)); + + // add the namespace with the reference that's not in the name table. + namespaceManager.AddNamespace ("foo", fooNamespace2); + + // the returned reference should be the same one that's in the name table. + AssertSame (fooNamespace, namespaceManager.LookupNamespace ("foo")); + } + + public void TestPushScope () + { + // add a new namespace. + namespaceManager.AddNamespace ("foo", "http://foo/"); + // make sure the new namespace is there. + Assert (namespaceManager.HasNamespace ("foo")); + AssertEquals ("http://foo/", namespaceManager.LookupNamespace ("foo")); + // push a new scope. + namespaceManager.PushScope (); + // add a new namespace. + namespaceManager.AddNamespace ("bar", "http://bar/"); + // make sure the old namespace is not in this new scope. + Assert (!namespaceManager.HasNamespace ("foo")); + // but we're still supposed to be able to lookup the old namespace. + AssertEquals ("http://foo/", namespaceManager.LookupNamespace ("foo")); + // make sure the new namespace is there. + Assert (namespaceManager.HasNamespace ("bar")); + AssertEquals ("http://bar/", namespaceManager.LookupNamespace ("bar")); + } + + public void TestPopScope () + { + // add some namespaces and a scope. + TestPushScope (); + // pop the scope. + Assert (namespaceManager.PopScope ()); + // make sure the first namespace is still there. + Assert (namespaceManager.HasNamespace ("foo")); + AssertEquals ("http://foo/", namespaceManager.LookupNamespace ("foo")); + // make sure the second namespace is no longer there. + Assert (!namespaceManager.HasNamespace ("bar")); + AssertNull (namespaceManager.LookupNamespace ("bar")); + // make sure there are no more scopes to pop. + Assert (!namespaceManager.PopScope ()); + // make sure that popping again doesn't cause an exception. + Assert (!namespaceManager.PopScope ()); + } + } +} |