diff --git a/tests/DOM/DOMTest/DTest.cpp b/tests/DOM/DOMTest/DTest.cpp
index 3f667ff097ad92d5ab1835c88de54a5d59d6863a..93d6e09cf65a476e34ffeff47dc913d9e3a8da6f 100644
--- a/tests/DOM/DOMTest/DTest.cpp
+++ b/tests/DOM/DOMTest/DTest.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.28  2002/08/16 19:22:29  tng
+ * Test DOM L3 lookupNamespacePrefix, lookupNamespaceURI support.   Added by Gareth Reakes.
+ *
  * Revision 1.27  2002/08/16 16:03:02  tng
  * [Bug 11360] Release user data using handler.
  *
@@ -163,6 +166,43 @@
         OK = false; \
     }
 
+#define LOOKUPNSTEST(thisNode, prefix, uri, pass, line) \
+    prefixResult = XMLString::compareString(thisNode->lookupNamespacePrefix(uri, false), prefix); \
+    prefixResult2 = XMLString::compareString(thisNode->lookupNamespacePrefix(uri, true), prefix); \
+    uriResult = XMLString::compareString(thisNode->lookupNamespaceURI(prefix), uri); \
+    if(pass) { \
+        if(prefixResult != 0) { \
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", line); \
+        OK = false; \
+        } \
+        if(prefixResult2 != 0) { \
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", line); \
+        OK = false; \
+        } \
+            if(uriResult != 0) { \
+        fprintf(stderr, "DOMNode::lookupNamespaceURI does not work in line %i\n", line); \
+        OK = false;\
+            } \
+        } \
+    else { \
+        if(prefixResult == 0) { \
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", line); \
+        OK = false; \
+        } \
+        if(prefixResult2 == 0) { \
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", line); \
+        OK = false; \
+        } \
+            if(uriResult == 0) { \
+        fprintf(stderr, "DOMNode::lookupNamespaceURI does not work in line %i\n", line); \
+        OK = false; \
+            } \
+        } \
+
+int prefixResult;
+int prefixResult2;
+int uriResult;
+
 #define COMPARETREEPOSITIONTEST(thisNode, otherNode, position, line) \
     myposition = thisNode->compareTreePosition(otherNode); \
     if (position == DOMNode::TREE_POSITION_DISCONNECTED) {  \
@@ -508,6 +548,108 @@ bool DOMTest::docBuilder(DOMDocument* document, XMLCh* nameIn)
     COMPARETREEPOSITIONTEST(docNotation, docFirstElement, DOMNode::TREE_POSITION_DISCONNECTED, __LINE__);
 
 
+    //now do some lookupNamespaceURI and lookupNamespacePrefix
+    //first lets add some attributes
+    XMLString::transcode("http://www.w3.org/2000/xmlns/", tempStr, 3999);
+    XMLString::transcode("xmlns:pre1", tempStr2, 3999);
+    XMLString::transcode("pre1URI", tempStr3, 3999);
+    XMLString::transcode("pre1", tempStr4, 3999);
+
+    DOMAttr *attr1 = doc->createAttributeNS(tempStr, tempStr2);
+    attr1->setValue(tempStr3);
+    docFirstElement->setAttributeNodeNS(attr1);
+
+
+    LOOKUPNSTEST(docProcessingInstruction, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel24, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel23, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel21, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel31, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel32, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docCDATASection, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docFirstElement, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docReferenceEntity, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docFirstElementAttr, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(doc, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docNotation, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docTextNode2, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docTextNode4, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docComment, tempStr4, tempStr3, true, __LINE__);
+
+    XMLString::transcode("xmlns:pre2", tempStr2, 3999);
+    XMLString::transcode("pre2URI", tempStr3, 3999);
+    XMLString::transcode("pre2", tempStr4, 3999);
+
+    DOMAttr *attr2 = doc->createAttributeNS(tempStr, tempStr2);
+    attr2->setValue(tempStr3);
+    docBodyLevel21->setAttributeNodeNS(attr2);
+
+
+    LOOKUPNSTEST(docProcessingInstruction, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docBodyLevel24, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docBodyLevel23, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docBodyLevel21, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel31, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel32, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docCDATASection, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docFirstElement, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docReferenceEntity, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docFirstElementAttr, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(doc, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docNotation, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docComment, tempStr4, tempStr3, false, __LINE__);
+    LOOKUPNSTEST(docTextNode2, tempStr4, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docTextNode4, tempStr4, tempStr3, false, __LINE__);
+
+
+    XMLString::transcode("xmlns", tempStr2, 3999);
+    XMLString::transcode("default", tempStr3, 3999);
+    XMLString::transcode("", tempStr4, 3999);
+
+
+    DOMAttr *attr3 = doc->createAttributeNS(tempStr, tempStr2);
+    attr3->setValue(tempStr3);
+    docFirstElement->setAttributeNodeNS(attr3);
+
+    LOOKUPNSTEST(docProcessingInstruction, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel24, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel23, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel21, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel31, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docBodyLevel32, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docCDATASection, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docFirstElement, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docReferenceEntity, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docFirstElementAttr, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(doc, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docComment, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docTextNode2, 0, tempStr3, true, __LINE__);
+    LOOKUPNSTEST(docTextNode4, 0, tempStr3, true, __LINE__);
+
+    //this has to be done separately because negative lookup is the same as default ns lookup!!!
+
+    prefixResult = XMLString::compareString(docNotation->lookupNamespacePrefix(tempStr3, false), 0);
+    prefixResult2 = XMLString::compareString(docNotation->lookupNamespacePrefix(tempStr3, true), 0);
+
+    uriResult = XMLString::compareString(docNotation->lookupNamespaceURI(0), 0);
+    if(prefixResult != 0) {
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", __LINE__);
+        OK = false;
+    }
+    if(prefixResult2 != 0) {
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", __LINE__);
+        OK = false;
+    }
+    if(uriResult != 0) {
+        fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %i\n", __LINE__);
+        OK = false;
+    }
+
+
+    docFirstElement->removeAttributeNode(attr1);
+    docBodyLevel21->removeAttributeNode(attr2);
+    docFirstElement->removeAttributeNode(attr3);
+
 //***********Following are for errorTests
     DOMDocumentFragment* docDocFragment = doc->createDocumentFragment();