Nikolay Sivov : xmllite: Report value for PI nodes.
Alexandre Julliard
julliard at winehq.org
Tue Jan 8 13:58:44 CST 2013
Module: wine
Branch: master
Commit: e79b2b3fc4f7d3ef66bca7429ea2d3559ceb20ff
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e79b2b3fc4f7d3ef66bca7429ea2d3559ceb20ff
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue Jan 8 15:42:57 2013 +0400
xmllite: Report value for PI nodes.
---
dlls/xmllite/reader.c | 6 +++++-
dlls/xmllite/tests/reader.c | 36 ++++++++++++++++++++++++------------
2 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 7d3d93a..fec4234 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -1031,7 +1031,7 @@ static HRESULT reader_parse_pitarget(xmlreader *reader, strval *target)
/* [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' */
static HRESULT reader_parse_pi(xmlreader *reader)
{
- const WCHAR *ptr, *start;
+ WCHAR *ptr, *start;
strval target;
HRESULT hr;
@@ -1051,6 +1051,7 @@ static HRESULT reader_parse_pi(xmlreader *reader)
reader->nodetype = XmlNodeType_ProcessingInstruction;
reader_set_strvalue(reader, StringValue_LocalName, &target);
reader_set_strvalue(reader, StringValue_QualifiedName, &target);
+ reader_set_strvalue(reader, StringValue_Value, &strval_empty);
return S_OK;
}
@@ -1066,12 +1067,15 @@ static HRESULT reader_parse_pi(xmlreader *reader)
{
if (ptr[1] == '>')
{
+ strval value = { start, ptr-start };
+
TRACE("%s\n", debugstr_wn(start, ptr-start));
/* skip '?>' */
reader_skipn(reader, 2);
reader->nodetype = XmlNodeType_ProcessingInstruction;
reader_set_strvalue(reader, StringValue_LocalName, &target);
reader_set_strvalue(reader, StringValue_QualifiedName, &target);
+ reader_set_strvalue(reader, StringValue_Value, &value);
return S_OK;
}
else
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index cd22f49..140c99e 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -799,6 +799,8 @@ static void test_read_comment(void)
static struct test_entry pi_tests[] = {
{ "<?pi?>", "pi", "", S_OK },
{ "<?pi ?>", "pi", "", S_OK },
+ { "<?pi pi data?>", "pi", "pi data", S_OK },
+ { "<?pi pi data ?>", "pi", "pi data ", S_OK },
{ "<?pi:pi?>", NULL, NULL, NC_E_NAMECOLON, WC_E_NAMECHARACTER },
{ "<?:pi ?>", NULL, NULL, WC_E_PI, WC_E_NAMECHARACTER },
{ "<?-pi ?>", NULL, NULL, WC_E_PI, WC_E_NAMECHARACTER },
@@ -832,29 +834,39 @@ static void test_read_pi(void)
ok(hr == test->hr, "got %08x for %s\n", hr, test->xml);
if (hr == S_OK)
{
- const WCHAR *name;
- WCHAR *name_exp;
+ const WCHAR *str;
+ WCHAR *str_exp;
UINT len;
ok(type == XmlNodeType_ProcessingInstruction, "got %d for %s\n", type, test->xml);
len = 0;
- name = NULL;
- hr = IXmlReader_GetLocalName(reader, &name, &len);
+ str = NULL;
+ hr = IXmlReader_GetLocalName(reader, &str, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(len == strlen(test->name), "got %u\n", len);
- name_exp = a2w(test->name);
- ok(!lstrcmpW(name, name_exp), "got %s\n", wine_dbgstr_w(name));
- free_str(name_exp);
+ str_exp = a2w(test->name);
+ ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str));
+ free_str(str_exp);
len = 0;
- name = NULL;
- hr = IXmlReader_GetQualifiedName(reader, &name, &len);
+ str = NULL;
+ hr = IXmlReader_GetQualifiedName(reader, &str, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(len == strlen(test->name), "got %u\n", len);
- name_exp = a2w(test->name);
- ok(!lstrcmpW(name, name_exp), "got %s\n", wine_dbgstr_w(name));
- free_str(name_exp);
+ str_exp = a2w(test->name);
+ ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str));
+ free_str(str_exp);
+
+ /* value */
+ len = !strlen(test->value);
+ str = NULL;
+ hr = IXmlReader_GetValue(reader, &str, &len);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(len == strlen(test->value), "got %u\n", len);
+ str_exp = a2w(test->value);
+ ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str));
+ free_str(str_exp);
}
IStream_Release(stream);
More information about the wine-cvs
mailing list