diff --git a/dlls/webservices/tests/reader.c b/dlls/webservices/tests/reader.c index 81b762e35e4..e66100c14ba 100644 --- a/dlls/webservices/tests/reader.c +++ b/dlls/webservices/tests/reader.c @@ -1051,7 +1051,7 @@ static void test_WsReadEndElement(void) hr = WsReadEndElement( reader, NULL ); ok( hr == WS_E_INVALID_FORMAT, "got %08x\n", hr ); - hr = set_input( reader, "", sizeof("") - 1 ); + hr = set_input( reader, "", sizeof("") - 1 ); ok( hr == S_OK, "got %08x\n", hr ); hr = WsFillReader( reader, sizeof("") - 1, NULL, NULL ); @@ -1722,6 +1722,7 @@ static void test_WsMoveReader(void) WS_XML_STRING localname = {1, (BYTE *)"a"}, localname2 = {1, (BYTE *)"b"}, ns = {0, NULL}; const WS_XML_NODE *node; WS_XML_ELEMENT_NODE *elem; + WS_XML_UTF8_TEXT utf8; hr = WsCreateReader( NULL, 0, &reader, NULL ) ; ok( hr == S_OK, "got %08x\n", hr ); @@ -1803,7 +1804,7 @@ static void test_WsMoveReader(void) hr = WsGetReaderNode( reader, &node, NULL ); ok( hr == S_OK, "got %08x\n", hr ); - ok( node->nodeType == WS_XML_NODE_TYPE_END_ELEMENT, "got %u\n", elem->node.nodeType ); + ok( node->nodeType == WS_XML_NODE_TYPE_END_ELEMENT, "got %u\n", node->nodeType ); /* EOF node is last child of BOF node */ hr = WsMoveReader( reader, WS_MOVE_TO_BOF, NULL, NULL ); @@ -1814,14 +1815,14 @@ static void test_WsMoveReader(void) hr = WsGetReaderNode( reader, &node, NULL ); ok( hr == S_OK, "got %08x\n", hr ); - ok( node->nodeType == WS_XML_NODE_TYPE_ELEMENT, "got %u\n", elem->node.nodeType ); + ok( node->nodeType == WS_XML_NODE_TYPE_ELEMENT, "got %u\n", node->nodeType ); hr = WsMoveReader( reader, WS_MOVE_TO_NEXT_NODE, NULL, NULL ); ok( hr == S_OK, "got %08x\n", hr ); hr = WsGetReaderNode( reader, &node, NULL ); ok( hr == S_OK, "got %08x\n", hr ); - ok( node->nodeType == WS_XML_NODE_TYPE_EOF, "got %u\n", elem->node.nodeType ); + ok( node->nodeType == WS_XML_NODE_TYPE_EOF, "got %u\n", node->nodeType ); hr = WsMoveReader( reader, WS_MOVE_TO_ROOT_ELEMENT, NULL, NULL ); ok( hr == S_OK, "got %08x\n", hr ); @@ -1848,7 +1849,7 @@ static void test_WsMoveReader(void) hr = WsGetReaderNode( reader, &node, NULL ); ok( hr == S_OK, "got %08x\n", hr ); - ok( node->nodeType == WS_XML_NODE_TYPE_END_ELEMENT, "got %u\n", elem->node.nodeType ); + ok( node->nodeType == WS_XML_NODE_TYPE_END_ELEMENT, "got %u\n", node->nodeType ); hr = WsMoveReader( reader, WS_MOVE_TO_PARENT_ELEMENT, NULL, NULL ); ok( hr == S_OK, "got %08x\n", hr ); @@ -1875,11 +1876,86 @@ static void test_WsMoveReader(void) hr = WsGetReaderNode( reader, &node, NULL ); ok( hr == S_OK, "got %08x\n", hr ); - ok( node->nodeType == WS_XML_NODE_TYPE_BOF, "got %u\n", elem->node.nodeType ); + ok( node->nodeType == WS_XML_NODE_TYPE_BOF, "got %u\n", node->nodeType ); hr = WsMoveReader( reader, WS_MOVE_TO_PARENT_ELEMENT, NULL, NULL ); ok( hr == WS_E_INVALID_FORMAT, "got %08x\n", hr ); + WsFreeWriter( writer ); + WsFreeHeap( heap ); + + hr = WsCreateHeap( 1 << 16, 0, NULL, 0, &heap, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsCreateXmlBuffer( heap, NULL, 0, &buffer, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsCreateWriter( NULL, 0, &writer, NULL ) ; + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsSetOutputToBuffer( writer, buffer, NULL, 0, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + /* test */ + hr = WsWriteStartElement( writer, NULL, &localname, &ns, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsWriteStartElement( writer, NULL, &localname2, &ns, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + utf8.text.textType = WS_XML_TEXT_TYPE_UTF8; + utf8.value.bytes = (BYTE *)"test"; + utf8.value.length = sizeof("test") - 1; + hr = WsWriteText( writer, &utf8.text, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsWriteEndElement( writer, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsWriteEndElement( writer, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsSetInputToBuffer( reader, buffer, NULL, 0, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsMoveReader( reader, WS_MOVE_TO_ROOT_ELEMENT, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsGetReaderNode( reader, &node, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( node->nodeType == WS_XML_NODE_TYPE_ELEMENT, "got %u\n", node->nodeType ); + + hr = WsMoveReader( reader, WS_MOVE_TO_NEXT_NODE, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsGetReaderNode( reader, &node, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( node->nodeType == WS_XML_NODE_TYPE_EOF, "got %u\n", node->nodeType ); + + hr = WsMoveReader( reader, WS_MOVE_TO_ROOT_ELEMENT, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsMoveReader( reader, WS_MOVE_TO_CHILD_NODE, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsGetReaderNode( reader, &node, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( node->nodeType == WS_XML_NODE_TYPE_ELEMENT, "got %u\n", node->nodeType ); + + hr = WsGetReaderNode( reader, &node, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + elem = (WS_XML_ELEMENT_NODE *)node; + ok( elem->node.nodeType == WS_XML_NODE_TYPE_ELEMENT, "got %u\n", elem->node.nodeType ); + ok( elem->localName->length == 1, "got %u\n", elem->localName->length ); + ok( !memcmp( elem->localName->bytes, "b", 1 ), "wrong data\n" ); + + hr = WsMoveReader( reader, WS_MOVE_TO_NEXT_NODE, NULL, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsGetReaderNode( reader, &node, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( node->nodeType == WS_XML_NODE_TYPE_END_ELEMENT, "got %u\n", node->nodeType ); + WsFreeReader( reader ); WsFreeWriter( writer ); WsFreeHeap( heap );