BSTR sPart1 = _bstr_(szBasicTransformSSXMLPart1);
BSTR sPart2 = _bstr_(szBasicTransformSSXMLPart2);
BSTR sFileName = _bstr_(lpPathBuffer);
- int nLegnth = lstrlenW(sPart1) + lstrlenW(sPart2) + lstrlenW(sFileName) + 1;
+ int nLength = lstrlenW(sPart1) + lstrlenW(sPart2) + lstrlenW(sFileName) + 1;
- sXSL = SysAllocStringLen(NULL, nLegnth);
+ sXSL = SysAllocStringLen(NULL, nLength);
lstrcpyW(sXSL, sPart1);
lstrcatW(sXSL, sFileName);
lstrcatW(sXSL, sPart2);
{
const get_attributes_t *entry = get_attributes;
IXMLDOMNamedNodeMap *map;
- IXMLDOMDocument *doc;
+ IXMLDOMDocument *doc, *doc2;
IXMLDOMNode *node, *node2;
+ IXMLDOMElement *elem;
VARIANT_BOOL b;
HRESULT hr;
+ VARIANT v;
BSTR str;
LONG length;
IXMLDOMNamedNodeMap_Release(map);
+ /* append created element a different document, map still works */
+ hr = IXMLDOMDocument_createElement(doc, _bstr_("test"), &elem);
+ ok(hr == S_OK, "createElement failed: %08x\n", hr);
+
+ V_VT(&v) = VT_I4;
+ V_I4(&v) = 1;
+ hr = IXMLDOMElement_setAttribute(elem, _bstr_("testattr"), v);
+ ok(hr == S_OK, "setAttribute failed: %08x\n", hr);
+
+ hr = IXMLDOMElement_get_attributes(elem, &map);
+ ok(hr == S_OK, "get_attributes failed: %08x\n", hr);
+
+ length = 0;
+ hr = IXMLDOMNamedNodeMap_get_length(map, &length);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(length == 1, "got %d\n", length);
+
+ doc2 = create_document(&IID_IXMLDOMDocument);
+
+ hr = IXMLDOMDocument_appendChild(doc2, (IXMLDOMNode*)elem, &node);
+ ok(hr == S_OK, "appendChild failed: %08x\n", hr);
+ ok(node == (IXMLDOMNode*)elem, "node != elem\n");
+ IXMLDOMNode_Release(node);
+ IXMLDOMElement_Release(elem);
+ IXMLDOMDocument_Release(doc2);
+
+ length = 0;
+ hr = IXMLDOMNamedNodeMap_get_length(map, &length);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(length == 1, "got %d\n", length);
+
+ IXMLDOMNamedNodeMap_Release(map);
+
while (entry->type)
{
VARIANT var;
#define EXPECT_REF(obj,ref) _expect_ref((IUnknown*)obj, ref, __LINE__)
static void _expect_ref(IUnknown* obj, ULONG ref, int line)
{
- ULONG rc = IUnknown_AddRef(obj);
- IUnknown_Release(obj);
- ok_(__FILE__,line)(rc-1 == ref, "expected refcount %d, got %d\n", ref, rc-1);
+ ULONG rc;
+ IUnknown_AddRef(obj);
+ rc = IUnknown_Release(obj);
+ ok_(__FILE__, line)(rc == ref, "expected refcount %d, got %d\n", ref, rc);
}
static LONG get_refcount(void *iface)
ok(hr == S_OK, "%s, expected S_OK, got %08x\n", wine_dbgstr_guid(riids[i]), hr);
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
EXPECT_REF(writer, 3);
- EXPECT_REF(writer2, 3);
IMXWriter_Release(writer2);
IUnknown_Release(handler);
}
pos2.QuadPart = 0;
hr = IStream_Seek(stream, pos, STREAM_SEEK_CUR, &pos2);
EXPECT_HR(hr, S_OK);
-todo_wine
ok(pos2.QuadPart != 0, "unexpected stream beginning\n");
hr = IMXWriter_get_output(writer, NULL);
V_UNKNOWN(&dest) = (IUnknown*)&mxstream;
hr = IMXWriter_put_output(writer, dest);
ok(hr == S_OK, "put_output failed with %08x on test %d\n", hr, current_stream_test_index);
- VariantClear(&dest);
hr = IMXWriter_put_byteOrderMark(writer, test->bom);
ok(hr == S_OK, "put_byteOrderMark failed with %08x on test %d\n", hr, current_stream_test_index);
ISAXLexicalHandler *lexical;
IVBSAXDeclHandler *vbdecl;
ISAXDeclHandler *decl;
+ ISAXDTDHandler *dtd;
IMXWriter *writer;
VARIANT dest;
HRESULT hr;
hr = IVBSAXDeclHandler_externalEntityDecl(vbdecl, NULL, NULL, NULL);
ok(hr == E_POINTER, "got 0x%08x\n", hr);
+ hr = ISAXDeclHandler_externalEntityDecl(decl, _bstr_("name"), 0, NULL, 0, NULL, 0);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
hr = ISAXDeclHandler_externalEntityDecl(decl, _bstr_("name"), -1, NULL, 0, NULL, 0);
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
_bstr_("sysid"), strlen("sysid"));
ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = ISAXDeclHandler_externalEntityDecl(decl, _bstr_("name"), strlen("name"), NULL, 0, _bstr_("sysid"), strlen("sysid"));
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = ISAXDeclHandler_externalEntityDecl(decl, _bstr_("name"), strlen("name"), _bstr_("pubid"), strlen("pubid"),
+ NULL, 0);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
V_VT(&dest) = VT_EMPTY;
hr = IMXWriter_get_output(writer, &dest);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(V_VT(&dest) == VT_BSTR, "got %d\n", V_VT(&dest));
- ok(!lstrcmpW(_bstr_("<!ENTITY name PUBLIC \"pubid\" \"sysid\">\r\n"), V_BSTR(&dest)), "got wrong content %s\n", wine_dbgstr_w(V_BSTR(&dest)));
+ ok(!lstrcmpW(_bstr_(
+ "<!ENTITY name PUBLIC \"pubid\" \"sysid\">\r\n"
+ "<!ENTITY name SYSTEM \"sysid\">\r\n"),
+ V_BSTR(&dest)), "got wrong content %s\n", wine_dbgstr_w(V_BSTR(&dest)));
+
VariantClear(&dest);
+ /* notation declaration */
+ hr = IMXWriter_QueryInterface(writer, &IID_ISAXDTDHandler, (void**)&dtd);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ V_VT(&dest) = VT_EMPTY;
+ hr = IMXWriter_put_output(writer, dest);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = ISAXDTDHandler_notationDecl(dtd, NULL, 0, NULL, 0, NULL, 0);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+ hr = ISAXDTDHandler_notationDecl(dtd, _bstr_("name"), strlen("name"), NULL, 0, NULL, 0);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+ hr = ISAXDTDHandler_notationDecl(dtd, _bstr_("name"), strlen("name"), _bstr_("pubid"), strlen("pubid"), NULL, 0);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = ISAXDTDHandler_notationDecl(dtd, _bstr_("name"), strlen("name"), _bstr_("pubid"), strlen("pubid"), _bstr_("sysid"), strlen("sysid"));
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = ISAXDTDHandler_notationDecl(dtd, _bstr_("name"), strlen("name"), NULL, 0, _bstr_("sysid"), strlen("sysid"));
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IMXWriter_get_output(writer, &dest);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(V_VT(&dest) == VT_BSTR, "got %d\n", V_VT(&dest));
+ ok(!lstrcmpW(_bstr_(
+ "<!NOTATION name"
+ "<!NOTATION name PUBLIC \"pubid\">\r\n"
+ "<!NOTATION name PUBLIC \"pubid\" \"sysid\">\r\n"
+ "<!NOTATION name SYSTEM \"sysid\">\r\n"),
+ V_BSTR(&dest)), "got wrong content %s\n", wine_dbgstr_w(V_BSTR(&dest)));
+
+ VariantClear(&dest);
+
+ ISAXDTDHandler_Release(dtd);
+
ISAXContentHandler_Release(content);
ISAXLexicalHandler_Release(lexical);
IVBSAXLexicalHandler_Release(vblexical);
if(FAILED(hr))
{
- skip("Failed to create SAXXMLReader instance\n");
+ win_skip("Failed to create SAXXMLReader instance\n");
CoUninitialize();
return;
}
test_mxattr_dispex();
}
else
- skip("SAXAttributes not supported\n");
+ win_skip("SAXAttributes not supported\n");
CoUninitialize();
}
VARIANT_BOOL b;
BSTR str;
LONG len;
+ HRESULT hr;
doc = create_document(&IID_IXMLDOMDocument2);
if (!doc)
ole_check(IXMLDOMSchemaCollection_get_length(cache, &len));
ok(len == 0, "got %d\n", len);
+ /* same, but with VT_UNKNOWN type */
+ V_VT(&v) = VT_UNKNOWN;
+ V_UNKNOWN(&v) = (IUnknown*)doc;
+ hr = IXMLDOMSchemaCollection_add(cache, NULL, v);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ len = -1;
+ hr = IXMLDOMSchemaCollection_get_length(cache, &len);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(len == 1, "got %d\n", len);
+
+ hr = IXMLDOMSchemaCollection_remove(cache, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ len = -1;
+ hr = IXMLDOMSchemaCollection_get_length(cache, &len);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(len == 0, "got %d\n", len);
+
str = SysAllocString(xdr_schema_uri);
ole_check(IXMLDOMSchemaCollection_add(cache, str, _variantdoc_(doc)));
free_bstrs();
}
+static void test_ifaces(void)
+{
+ IXMLDOMSchemaCollection2 *cache;
+ IUnknown *unk;
+ HRESULT hr;
+
+ cache = create_cache_version(60, &IID_IXMLDOMSchemaCollection2);
+ if (!cache) return;
+
+ /* CLSID_XMLSchemaCache60 is returned as an interface (the same as IXMLDOMSchemaCollection2). */
+ hr = IXMLDOMSchemaCollection2_QueryInterface(cache, &CLSID_XMLSchemaCache60, (void**)&unk);
+ ok (hr == S_OK, "Could not get CLSID_XMLSchemaCache60 iface: %08x\n", hr);
+ ok (unk == (IUnknown*)cache, "unk != cache\n");
+
+ IUnknown_Release(unk);
+ IXMLDOMSchemaCollection2_Release(cache);
+}
+
START_TEST(schema)
{
HRESULT r;
test_dispex();
test_get();
test_remove();
+ test_ifaces();
CoUninitialize();
}