[PATCH 1/3] msxml3/tests: Add test for treating namespaces as attributes.
Daniel Lehman
dlehman25 at gmail.com
Sun Aug 26 11:27:21 CDT 2018
Signed-off-by: Daniel Lehman <dlehman25 at gmail.com>
---
dlls/msxml3/tests/domdoc.c | 129 +++++++++++++++++++++++++++++++++++++
1 file changed, 129 insertions(+)
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 35fa42a6d1..ffb9e1462d 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -12830,6 +12830,134 @@ todo_wine {
IXMLDOMDocument2_Release(doc);
}
+typedef struct _namespace_as_attribute_t {
+ const GUID *guid;
+ const char *clsid;
+ const char *xmlns_uri;
+ BOOL todo;
+} namespace_as_attribute_t;
+
+static const namespace_as_attribute_t namespace_as_attribute_test_data[] = {
+ { &CLSID_DOMDocument, "CLSID_DOMDocument", "", FALSE },
+ { &CLSID_DOMDocument2, "CLSID_DOMDocument2", "", FALSE },
+ { &CLSID_DOMDocument26, "CLSID_DOMDocument26", "", FALSE },
+ { &CLSID_DOMDocument30, "CLSID_DOMDocument30", "", FALSE },
+ { &CLSID_DOMDocument40, "CLSID_DOMDocument40", "", FALSE },
+ { &CLSID_DOMDocument60, "CLSID_DOMDocument60", "http://www.w3.org/2000/xmlns/", TRUE },
+ { 0 }
+};
+
+void test_namespaces_as_attributes(void)
+{
+ const namespace_as_attribute_t *entry = namespace_as_attribute_test_data;
+ static const char ns_as_attr_doc[] = {
+ "<?xml version=\"1.0\"?>"
+ "<a ns:b=\"b attr\" d=\"d attr\" xmlns:ns=\"nshref\" />"
+ };
+ static const char *names[] = { "ns:b", "d", "xmlns:ns" };
+ static const char *prefixes[] = { "ns", NULL, "xmlns" };
+ static const char *basenames[] = { "b", "d", "ns" };
+ static const char *uris[] = { "nshref", NULL, "" };
+ static const char *texts[] = { "b attr", "d attr", "nshref" };
+ IXMLDOMNamedNodeMap *map;
+ IXMLDOMDocument *doc;
+ IXMLDOMNode *node;
+ IXMLDOMNode *item;
+ VARIANT_BOOL b;
+ HRESULT hr;
+ BSTR str;
+ LONG len;
+ LONG i;
+
+ while (entry->guid)
+ {
+ if (!is_clsid_supported(entry->guid, &IID_IXMLDOMDocument2))
+ {
+ entry++;
+ continue;
+ }
+
+ hr = CoCreateInstance(entry->guid, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IXMLDOMDocument2, (void**)&doc);
+ EXPECT_HR(hr, S_OK);
+
+ hr = IXMLDOMDocument_loadXML(doc, _bstr_(ns_as_attr_doc), &b);
+ EXPECT_HR(hr, S_OK);
+
+ node = NULL;
+ hr = IXMLDOMDocument_selectSingleNode(doc, _bstr_("a"), &node);
+ EXPECT_HR(hr, S_OK);
+
+ hr = IXMLDOMNode_get_attributes(node, &map);
+ EXPECT_HR(hr, S_OK);
+
+ len = -1;
+ hr = IXMLDOMNamedNodeMap_get_length(map, &len);
+ EXPECT_HR(hr, S_OK);
+ todo_wine ok(len == 3, "got %d\n", len);
+
+ for (i = 0; i < len; i++)
+ {
+ item = NULL;
+ hr = IXMLDOMNamedNodeMap_get_item(map, i, &item);
+ EXPECT_HR(hr, S_OK);
+
+ str = NULL;
+ hr = IXMLDOMNode_get_nodeName(item, &str);
+ EXPECT_HR(hr, S_OK);
+ ok(!lstrcmpW(str, _bstr_(names[i])), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ str = NULL;
+ hr = IXMLDOMNode_get_prefix(item, &str);
+ if (prefixes[i])
+ {
+ EXPECT_HR(hr, S_OK);
+ ok(!lstrcmpW(str, _bstr_(prefixes[i])), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+ }
+ else
+ EXPECT_HR(hr, S_FALSE);
+
+ str = NULL;
+ hr = IXMLDOMNode_get_baseName(item, &str);
+ EXPECT_HR(hr, S_OK);
+ ok(!lstrcmpW(str, _bstr_(basenames[i])), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ str = NULL;
+ hr = IXMLDOMNode_get_namespaceURI(item, &str);
+ if (uris[i])
+ {
+ EXPECT_HR(hr, S_OK);
+ if (prefixes[i] && !strcmp(prefixes[i], "xmlns"))
+ todo_wine_if(entry->todo)
+ ok(!lstrcmpW(str, _bstr_(entry->xmlns_uri)), "got %s\n", wine_dbgstr_w(str));
+ else
+ ok(!lstrcmpW(str, _bstr_(uris[i])), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+ }
+ else
+ EXPECT_HR(hr, S_FALSE);
+
+ str = NULL;
+ hr = IXMLDOMNode_get_text(item, &str);
+ EXPECT_HR(hr, S_OK);
+ ok(!lstrcmpW(str, _bstr_(texts[i])), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ IXMLDOMNode_Release(item);
+ }
+
+ IXMLDOMNamedNodeMap_Release(map);
+ IXMLDOMNode_Release(node);
+ IXMLDOMDocument_Release(doc);
+
+ entry++;
+ }
+ free_bstrs();
+}
+
START_TEST(domdoc)
{
HRESULT hr;
@@ -12914,6 +13042,7 @@ START_TEST(domdoc)
test_merging_text();
test_transformNodeToObject();
test_normalize_attribute_values();
+ test_namespaces_as_attributes();
test_xsltemplate();
test_xsltext();
--
2.17.1
More information about the wine-devel
mailing list