static void test_responseXML(const char *expect_text) { IDispatch *disp; IXMLDOMDocument *xmldom; IObjectSafety *safety; DWORD enabled = 0, supported = 0; HRESULT hres; disp = NULL; hres = IHTMLXMLHttpRequest_get_responseXML(xhr, &disp); ok(hres == S_OK, "get_responseXML failed: %08x\n", hres); ok(disp != NULL, "disp == NULL\n"); xmldom = NULL; hres = IDispatch_QueryInterface(disp, &IID_IXMLDOMDocument, (void**)&xmldom); ok(hres == S_OK, "QueryInterface(IXMLDOMDocument) failed: %08x\n", hres); ok(xmldom != NULL, "xmldom == NULL\n"); hres = IXMLDOMDocument_QueryInterface(xmldom, &IID_IObjectSafety, (void**)&safety); ok(hres == S_OK, "QueryInterface IObjectSafety failed: %08x\n", hres); hres = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres); ok(broken(supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA)) || supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER) /* msxml3 SP8+ */, "Expected supported: (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), got %08x\n", supported); ok(enabled == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), "Expected enabled: (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), got 0x%08x\n", enabled); IObjectSafety_Release(safety); if(!expect_text) test_illegal_xml(xmldom); IXMLDOMDocument_Release(xmldom); IDispatch_Release(disp); }
static HRESULT WINAPI HTMLXMLHttpRequest_get_responseXML(IHTMLXMLHttpRequest *iface, IDispatch **p) { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface); IXMLDOMDocument *xmldoc = NULL; BSTR str; HRESULT hres; VARIANT_BOOL vbool; IObjectSafety *safety; TRACE("(%p)->(%p)\n", This, p); hres = CoCreateInstance(&CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&xmldoc); if(FAILED(hres)) { ERR("CoCreateInstance failed: %08x\n", hres); return hres; } hres = IHTMLXMLHttpRequest_get_responseText(iface, &str); if(FAILED(hres)) { IXMLDOMDocument_Release(xmldoc); ERR("get_responseText failed: %08x\n", hres); return hres; } hres = IXMLDOMDocument_loadXML(xmldoc, str, &vbool); SysFreeString(str); if(hres != S_OK || vbool != VARIANT_TRUE) WARN("loadXML failed: %08x, returning an empty xmldoc\n", hres); hres = IXMLDOMDocument_QueryInterface(xmldoc, &IID_IObjectSafety, (void**)&safety); assert(SUCCEEDED(hres)); hres = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER); assert(SUCCEEDED(hres)); IObjectSafety_Release(safety); *p = (IDispatch*)xmldoc; return S_OK; }
static HRESULT WINAPI xslprocessor_put_input( IXSLProcessor *iface, VARIANT input ) { xslprocessor *This = impl_from_IXSLProcessor( iface ); IXMLDOMNode *input_node; HRESULT hr; TRACE("(%p)->(%s)\n", This, debugstr_variant(&input)); /* try IXMLDOMNode directly first */ if (V_VT(&input) == VT_UNKNOWN) hr = IUnknown_QueryInterface(V_UNKNOWN(&input), &IID_IXMLDOMNode, (void**)&input_node); else if (V_VT(&input) == VT_DISPATCH) hr = IDispatch_QueryInterface(V_DISPATCH(&input), &IID_IXMLDOMNode, (void**)&input_node); else { IXMLDOMDocument *doc; hr = DOMDocument_create(MSXML_DEFAULT, (void**)&doc); if (hr == S_OK) { VARIANT_BOOL b; hr = IXMLDOMDocument_load(doc, input, &b); if (hr == S_OK) hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMNode, (void**)&input_node); IXMLDOMDocument_Release(doc); } } if (hr == S_OK) { if (This->input) IXMLDOMNode_Release(This->input); This->input = input_node; } return hr; }
static HRESULT WINAPI domattr_get_nodeTypedValue( IXMLDOMAttribute *iface, VARIANT* value) { domattr *This = impl_from_IXMLDOMAttribute( iface ); IXMLDOMDocument *doc; HRESULT hr; TRACE("(%p)->(%p)\n", This, value); hr = IXMLDOMAttribute_get_ownerDocument(iface, &doc); if (hr == S_OK) { IXMLDOMDocument3 *doc3; hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMDocument3, (void**)&doc3); IXMLDOMDocument_Release(doc); if (hr == S_OK) { VARIANT schemas; hr = IXMLDOMDocument3_get_schemas(doc3, &schemas); IXMLDOMDocument3_Release(doc3); if (hr != S_OK) return IXMLDOMAttribute_get_value(iface, value); else { FIXME("need to query schema for attribute type\n"); VariantClear(&schemas); } } } return return_null_var(value); }
void kull_m_xml_ReleaseDom(IXMLDOMDocument *pDoc) { if(pDoc) IXMLDOMDocument_Release(pDoc); }
/******************************************************************************* * GAMEUX_ParseGDFBinary * * Helper function, loads given binary and parses embed GDF if there's any. * * Parameters: * GameData [I/O] Structure with game's data. Content of field * sGDFBinaryPath defines path to binary, from * which embed GDF will be loaded. Data from * GDF will be stored in other fields of this * structure. */ static HRESULT GAMEUX_ParseGDFBinary(struct GAMEUX_GAME_DATA *GameData) { static const WCHAR sRes[] = {'r','e','s',':','/','/',0}; static const WCHAR sDATA[] = {'D','A','T','A',0}; static const WCHAR sSlash[] = {'/',0}; HRESULT hr = S_OK; WCHAR sResourcePath[MAX_PATH]; VARIANT variant; VARIANT_BOOL isSuccessful; IXMLDOMDocument *document; IXMLDOMNode *gdNode; IXMLDOMElement *root, *gdElement; TRACE("(%p)->sGDFBinaryPath = %s\n", GameData, debugstr_w(GameData->sGDFBinaryPath)); /* prepare path to GDF, using res:// prefix */ lstrcpyW(sResourcePath, sRes); lstrcatW(sResourcePath, GameData->sGDFBinaryPath); lstrcatW(sResourcePath, sSlash); lstrcatW(sResourcePath, sDATA); lstrcatW(sResourcePath, sSlash); lstrcatW(sResourcePath, ID_GDF_XML_STR); hr = CoCreateInstance(&CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&document); if(SUCCEEDED(hr)) { /* load GDF into MSXML */ V_VT(&variant) = VT_BSTR; V_BSTR(&variant) = SysAllocString(sResourcePath); if(!V_BSTR(&variant)) hr = E_OUTOFMEMORY; if(SUCCEEDED(hr)) { hr = IXMLDOMDocument_load(document, variant, &isSuccessful); if(hr == S_FALSE || isSuccessful == VARIANT_FALSE) hr = E_FAIL; } SysFreeString(V_BSTR(&variant)); if(SUCCEEDED(hr)) { hr = IXMLDOMDocument_get_documentElement(document, &root); if(hr == S_FALSE) hr = E_FAIL; } if(SUCCEEDED(hr)) { hr = IXMLDOMElement_get_firstChild(root, &gdNode); if(hr == S_FALSE) hr = E_FAIL; if(SUCCEEDED(hr)) { hr = IXMLDOMNode_QueryInterface(gdNode, &IID_IXMLDOMElement, (LPVOID*)&gdElement); if(SUCCEEDED(hr)) { hr = GAMEUX_ParseGameDefinition(gdElement, GameData); IXMLDOMElement_Release(gdElement); } IXMLDOMNode_Release(gdNode); } IXMLDOMElement_Release(root); } IXMLDOMDocument_Release(document); } return hr; }
/******************************************************************* * GAMEUX_loadGameStatisticsFromFile * Helper function, loads game statistics from file and stores them * in the structure. * * Parameters: * data [I/O] structure containing file name to * load and data fields to store data in */ static HRESULT GAMEUX_loadStatisticsFromFile(struct GAMEUX_STATS *data) { static const WCHAR sStatistics[] = {'S','t','a','t','i','s','t','i','c','s',0}; static const WCHAR sCategory[] = {'C','a','t','e','g','o','r','y',0}; static const WCHAR sIndex[] = {'I','n','d','e','x',0}; static const WCHAR sStatistic[] = {'S','t','a','t','i','s','t','i','c',0}; static const WCHAR sName[] = {'N','a','m','e',0}; static const WCHAR sValue[] = {'V','a','l','u','e',0}; HRESULT hr = S_OK; IXMLDOMDocument *document = NULL; IXMLDOMElement *root = NULL, *categoryElement, *statisticElement; IXMLDOMNode *categoryNode, *statisticNode; IXMLDOMNodeList *rootChildren = NULL, *categoryChildren; VARIANT vStatsFilePath, vValue; BSTR bstrStatistics = NULL, bstrCategory = NULL, bstrIndex = NULL, bstrStatistic = NULL, bstrName = NULL, bstrValue = NULL; VARIANT_BOOL isSuccessful = VARIANT_FALSE; int i, j; TRACE("(%p)\n", data); V_VT(&vStatsFilePath) = VT_BSTR; V_BSTR(&vStatsFilePath) = SysAllocString(data->sStatsFile); if(!V_BSTR(&vStatsFilePath)) hr = E_OUTOFMEMORY; if(SUCCEEDED(hr)) hr = CoCreateInstance(&CLSID_DOMDocument30, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&document); if(SUCCEEDED(hr)) { bstrStatistics = SysAllocString(sStatistics); if(!bstrStatistics) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrCategory = SysAllocString(sCategory); if(!bstrCategory) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrIndex = SysAllocString(sIndex); if(!bstrIndex) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrStatistic = SysAllocString(sStatistic); if(!bstrStatistic) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrName = SysAllocString(sName); if(!bstrName) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrValue = SysAllocString(sValue); if(!bstrValue) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) hr = IXMLDOMDocument_load(document, vStatsFilePath, &isSuccessful); if(hr == S_OK && isSuccessful != VARIANT_TRUE) hr = S_FALSE; if( hr == S_OK ) hr = IXMLDOMDocument_get_documentElement(document, &root); if(hr == S_OK) hr = IXMLDOMElement_get_childNodes(root, &rootChildren); if(hr == S_OK) { hr = S_OK; while(hr == S_OK) { hr = IXMLDOMNodeList_nextNode(rootChildren, &categoryNode); if(hr == S_OK) { hr = IXMLDOMNode_QueryInterface(categoryNode, &IID_IXMLDOMElement, (LPVOID*)&categoryElement); if(SUCCEEDED(hr)) { hr = IXMLDOMElement_getAttribute(categoryElement, bstrIndex, &vValue); if( hr == S_OK && V_VT(&vValue) != VT_BSTR) hr = E_FAIL; if(SUCCEEDED(hr)) { i = StrToIntW(V_BSTR(&vValue)); hr = IXMLDOMElement_getAttribute(categoryElement, bstrName, &vValue); if( hr == S_OK && V_VT(&vValue) != VT_BSTR) hr = E_FAIL; } if(SUCCEEDED(hr)) { lstrcpynW(data->categories[i].sName, V_BSTR(&vValue), MAX_CATEGORY_LENGTH); TRACE("category %d name %s\n", i, debugstr_w(data->categories[i].sName)); hr = IXMLDOMElement_get_childNodes(categoryElement, &categoryChildren); } if(SUCCEEDED(hr)) { hr = S_OK; while(hr == S_OK) { hr = IXMLDOMNodeList_nextNode(categoryChildren, &statisticNode); if(hr == S_OK) { hr = IXMLDOMNode_QueryInterface(statisticNode, &IID_IXMLDOMElement, (LPVOID*)&statisticElement); if(SUCCEEDED(hr)) { hr = IXMLDOMElement_getAttribute(statisticElement, bstrIndex, &vValue); if( hr == S_OK && V_VT(&vValue) != VT_BSTR) hr = E_FAIL; if(SUCCEEDED(hr)) { j = StrToIntW(V_BSTR(&vValue)); hr = IXMLDOMElement_getAttribute(statisticElement, bstrName, &vValue); if( hr == S_OK && V_VT(&vValue) != VT_BSTR) hr = E_FAIL; } if(SUCCEEDED(hr)) { lstrcpynW(data->categories[i].stats[j].sName, V_BSTR(&vValue), MAX_NAME_LENGTH); hr = IXMLDOMElement_getAttribute(statisticElement, bstrValue, &vValue); if( hr == S_OK && V_VT(&vValue) != VT_BSTR) hr = E_FAIL; } if(SUCCEEDED(hr)) { lstrcpynW(data->categories[i].stats[j].sValue, V_BSTR(&vValue), MAX_VALUE_LENGTH); TRACE("statistic %d name %s value %s\n", j, debugstr_w(data->categories[i].stats[j].sName), debugstr_w(data->categories[i].stats[j].sValue)); } IXMLDOMElement_Release(statisticElement); } IXMLDOMNode_Release(statisticNode); } } if(SUCCEEDED(hr)) hr = S_OK; } IXMLDOMElement_Release(categoryElement); } IXMLDOMNode_Release(categoryNode); } } if(SUCCEEDED(hr)) hr = S_OK; } if(rootChildren) IXMLDOMNodeList_Release(rootChildren); if(root) IXMLDOMElement_Release(root); if(document) IXMLDOMDocument_Release(document); SysFreeString(bstrValue); SysFreeString(bstrName); SysFreeString(bstrStatistic); SysFreeString(bstrIndex); SysFreeString(bstrCategory); SysFreeString(bstrStatistics); SysFreeString(V_BSTR(&vStatsFilePath)); return hr; }
/******************************************************************* * GAMEUX_updateStatisticsFile * * Helper function updating data stored in statistics file * * Parameters: * data [I] pointer to struct containing * statistics data */ static HRESULT GAMEUX_updateStatisticsFile(struct GAMEUX_STATS *stats) { static const WCHAR sStatistics[] = {'S','t','a','t','i','s','t','i','c','s',0}; static const WCHAR sCategory[] = {'C','a','t','e','g','o','r','y',0}; static const WCHAR sIndex[] = {'I','n','d','e','x',0}; static const WCHAR sStatistic[] = {'S','t','a','t','i','s','t','i','c',0}; static const WCHAR sName[] = {'N','a','m','e',0}; static const WCHAR sValue[] = {'V','a','l','u','e',0}; HRESULT hr = S_OK; IXMLDOMDocument *document; IXMLDOMElement *root, *categoryElement, *statisticsElement; IXMLDOMNode *categoryNode, *statisticsNode; VARIANT vStatsFilePath, vValue; BSTR bstrStatistics = NULL, bstrCategory = NULL, bstrIndex = NULL, bstrStatistic = NULL, bstrName = NULL, bstrValue = NULL; int i, j; TRACE("(%p)\n", stats); V_VT(&vStatsFilePath) = VT_BSTR; V_BSTR(&vStatsFilePath) = SysAllocString(stats->sStatsFile); if(!V_BSTR(&vStatsFilePath)) hr = E_OUTOFMEMORY; if(SUCCEEDED(hr)) hr = CoCreateInstance(&CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&document); if(SUCCEEDED(hr)) { bstrStatistics = SysAllocString(sStatistics); if(!bstrStatistics) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) hr = IXMLDOMDocument_createElement(document, bstrStatistics, &root); if(SUCCEEDED(hr)) { bstrCategory = SysAllocString(sCategory); if(!bstrCategory) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrIndex = SysAllocString(sIndex); if(!bstrIndex) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrStatistic = SysAllocString(sStatistic); if(!bstrStatistic) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrName = SysAllocString(sName); if(!bstrName) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { bstrValue = SysAllocString(sValue); if(!bstrValue) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) for(i=0; i<MAX_CATEGORIES; ++i) { if(lstrlenW(stats->categories[i].sName)==0) continue; V_VT(&vValue) = VT_INT; V_INT(&vValue) = NODE_ELEMENT; hr = IXMLDOMDocument_createNode(document, vValue, bstrCategory, NULL, &categoryNode); if(SUCCEEDED(hr)) hr = IXMLDOMNode_QueryInterface(categoryNode, &IID_IXMLDOMElement, (LPVOID*)&categoryElement); V_INT(&vValue) = i; if(SUCCEEDED(hr)) hr = IXMLDOMElement_setAttribute(categoryElement, bstrIndex, vValue); if(SUCCEEDED(hr)) { V_VT(&vValue) = VT_BSTR; V_BSTR(&vValue) = SysAllocString(stats->categories[i].sName); if(!V_BSTR(&vValue)) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { TRACE("storing category %d: %s\n", i, debugstr_w(V_BSTR(&vValue))); hr = IXMLDOMElement_setAttribute(categoryElement, bstrName, vValue); } SysFreeString(V_BSTR(&vValue)); if(SUCCEEDED(hr)) { for(j=0; j<MAX_STATS_PER_CATEGORY; ++j) { if(lstrlenW(stats->categories[i].stats[j].sName)==0) continue; V_VT(&vValue) = VT_INT; V_INT(&vValue) = NODE_ELEMENT; hr = IXMLDOMDocument_createNode(document, vValue, bstrStatistic, NULL, &statisticsNode); if(SUCCEEDED(hr)) hr = IXMLDOMNode_QueryInterface(statisticsNode, &IID_IXMLDOMElement, (LPVOID*)&statisticsElement); V_INT(&vValue) = j; if(SUCCEEDED(hr)) hr = IXMLDOMElement_setAttribute(statisticsElement, bstrIndex, vValue); if(SUCCEEDED(hr)) { V_VT(&vValue) = VT_BSTR; V_BSTR(&vValue) = SysAllocString(stats->categories[i].stats[j].sName); if(!V_BSTR(&vValue)) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { TRACE(" storing statistic %d: name: %s\n", j, debugstr_w(V_BSTR(&vValue))); hr = IXMLDOMElement_setAttribute(statisticsElement, bstrName, vValue); } SysFreeString(V_BSTR(&vValue)); if(SUCCEEDED(hr)) { V_VT(&vValue) = VT_BSTR; V_BSTR(&vValue) = SysAllocString(stats->categories[i].stats[j].sValue); if(!V_BSTR(&vValue)) hr = E_OUTOFMEMORY; } if(SUCCEEDED(hr)) { TRACE(" storing statistic %d: name: %s\n", j, debugstr_w(V_BSTR(&vValue))); hr = IXMLDOMElement_setAttribute(statisticsElement, bstrValue, vValue); } SysFreeString(V_BSTR(&vValue)); if(SUCCEEDED(hr)) hr = IXMLDOMNode_appendChild(categoryNode, statisticsNode, &statisticsNode); IXMLDOMElement_Release(statisticsElement); IXMLDOMNode_Release(statisticsNode); } } if(SUCCEEDED(hr)) hr = IXMLDOMElement_appendChild(root, categoryNode, &categoryNode); IXMLDOMElement_Release(categoryElement); IXMLDOMNode_Release(categoryNode); if(FAILED(hr)) break; } if(SUCCEEDED(hr)) hr = IXMLDOMDocument_putref_documentElement(document, root); IXMLDOMElement_Release(root); TRACE("saving game statistics in %s file\n", debugstr_w(stats->sStatsFile)); if(SUCCEEDED(hr)) hr = GAMEUX_createStatsDirectory(stats->sStatsFile); if(SUCCEEDED(hr)) hr = IXMLDOMDocument_save(document, vStatsFilePath); IXMLDOMDocument_Release(document); SysFreeString(bstrValue); SysFreeString(bstrName); SysFreeString(bstrStatistic); SysFreeString(bstrIndex); SysFreeString(bstrCategory); SysFreeString(bstrStatistics); SysFreeString(V_BSTR(&vStatsFilePath)); TRACE("ret=0x%x\n", hr); return hr; }
static void test_saxreader(void) { HRESULT hr; ISAXXMLReader *reader = NULL; VARIANT var; ISAXContentHandler *lpContentHandler; ISAXErrorHandler *lpErrorHandler; SAFEARRAY *pSA; SAFEARRAYBOUND SADim[1]; char *pSAData = NULL; IStream *iStream; ULARGE_INTEGER liSize; LARGE_INTEGER liPos; ULONG bytesWritten; HANDLE file; static const CHAR testXmlA[] = "test.xml"; static const WCHAR testXmlW[] = {'t','e','s','t','.','x','m','l',0}; IXMLDOMDocument *domDocument; BSTR bstrData; VARIANT_BOOL vBool; hr = CoCreateInstance(&CLSID_SAXXMLReader, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (LPVOID*)&reader); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); hr = ISAXXMLReader_getContentHandler(reader, NULL); ok(hr == E_POINTER, "Expected E_POINTER, got %08x\n", hr); hr = ISAXXMLReader_getErrorHandler(reader, NULL); ok(hr == E_POINTER, "Expected E_POINTER, got %08x\n", hr); hr = ISAXXMLReader_getContentHandler(reader, &lpContentHandler); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); ok(lpContentHandler == NULL, "Expected %p, got %p\n", NULL, lpContentHandler); hr = ISAXXMLReader_getErrorHandler(reader, &lpErrorHandler); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); ok(lpErrorHandler == NULL, "Expected %p, got %p\n", NULL, lpErrorHandler); hr = ISAXXMLReader_putContentHandler(reader, NULL); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); hr = ISAXXMLReader_putContentHandler(reader, &contentHandler); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); hr = ISAXXMLReader_putErrorHandler(reader, &errorHandler); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); hr = ISAXXMLReader_getContentHandler(reader, &lpContentHandler); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); ok(lpContentHandler == &contentHandler, "Expected %p, got %p\n", &contentHandler, lpContentHandler); V_VT(&var) = VT_BSTR; V_BSTR(&var) = SysAllocString(szSimpleXML); expectCall = contentHandlerTest1; hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); test_expect_call(CH_ENDTEST); VariantClear(&var); SADim[0].lLbound= 0; SADim[0].cElements= sizeof(szTestXML)-1; pSA = SafeArrayCreate(VT_UI1, 1, SADim); SafeArrayAccessData(pSA, (void**)&pSAData); memcpy(pSAData, szTestXML, sizeof(szTestXML)-1); SafeArrayUnaccessData(pSA); V_VT(&var) = VT_ARRAY|VT_UI1; V_ARRAY(&var) = pSA; expectCall = contentHandlerTest1; hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); test_expect_call(CH_ENDTEST); SafeArrayDestroy(pSA); CreateStreamOnHGlobal(NULL, TRUE, &iStream); liSize.QuadPart = strlen(szTestXML); IStream_SetSize(iStream, liSize); IStream_Write(iStream, szTestXML, strlen(szTestXML), &bytesWritten); liPos.QuadPart = 0; IStream_Seek(iStream, liPos, STREAM_SEEK_SET, NULL); V_VT(&var) = VT_UNKNOWN|VT_DISPATCH; V_UNKNOWN(&var) = (IUnknown*)iStream; expectCall = contentHandlerTest1; hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); test_expect_call(CH_ENDTEST); IStream_Release(iStream); V_VT(&var) = VT_BSTR; V_BSTR(&var) = SysAllocString(szCarriageRetTest); expectCall = contentHandlerTest2; hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); test_expect_call(CH_ENDTEST); VariantClear(&var); file = CreateFileA(testXmlA, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); ok(file != INVALID_HANDLE_VALUE, "Could not create file: %u\n", GetLastError()); WriteFile(file, szTestXML, sizeof(szTestXML)-1, &bytesWritten, NULL); CloseHandle(file); expectCall = contentHandlerTest1; hr = ISAXXMLReader_parseURL(reader, testXmlW); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); test_expect_call(CH_ENDTEST); DeleteFileA(testXmlA); hr = CoCreateInstance(&CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&domDocument); if(FAILED(hr)) { skip("Failed to create DOMDocument instance\n"); return; } bstrData = SysAllocString(szSimpleXML); hr = IXMLDOMDocument_loadXML(domDocument, bstrData, &vBool); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown*)domDocument; expectCall = contentHandlerTest2; hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); test_expect_call(CH_ENDTEST); IXMLDOMDocument_Release(domDocument); ISAXXMLReader_Release(reader); SysFreeString(bstrData); }