msxml3: Use the associated schema for domelem_get_dataType().
This commit is contained in:
parent
b6a1951925
commit
c19fa9b04b
@ -38,6 +38,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
|
||||
|
||||
#ifdef HAVE_LIBXML2
|
||||
|
||||
static const xmlChar DT_nsURI[] = "urn:schemas-microsoft-com:datatypes";
|
||||
|
||||
typedef struct _domelem
|
||||
{
|
||||
xmlnode node;
|
||||
@ -429,12 +431,256 @@ static HRESULT WINAPI domelem_get_definition(
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static inline BYTE hex_to_byte(xmlChar c)
|
||||
{
|
||||
if(c <= '9') return c-'0';
|
||||
if(c <= 'F') return c-'A'+10;
|
||||
return c-'a'+10;
|
||||
}
|
||||
|
||||
static inline BYTE base64_to_byte(xmlChar c)
|
||||
{
|
||||
if(c == '+') return 62;
|
||||
if(c == '/') return 63;
|
||||
if(c <= '9') return c-'0'+52;
|
||||
if(c <= 'Z') return c-'A';
|
||||
return c-'a'+26;
|
||||
}
|
||||
|
||||
static inline HRESULT VARIANT_from_DT(XDR_DT dt, xmlChar* str, VARIANT* v)
|
||||
{
|
||||
VARIANT src;
|
||||
HRESULT hr = S_OK;
|
||||
BOOL handled = FALSE;
|
||||
|
||||
VariantInit(&src);
|
||||
|
||||
switch (dt)
|
||||
{
|
||||
case DT_INVALID:
|
||||
case DT_STRING:
|
||||
case DT_NMTOKEN:
|
||||
case DT_NMTOKENS:
|
||||
case DT_NUMBER:
|
||||
case DT_URI:
|
||||
case DT_UUID:
|
||||
{
|
||||
V_VT(v) = VT_BSTR;
|
||||
V_BSTR(v) = bstr_from_xmlChar(str);
|
||||
|
||||
if(!V_BSTR(v))
|
||||
return E_OUTOFMEMORY;
|
||||
handled = TRUE;
|
||||
}
|
||||
break;
|
||||
case DT_DATE:
|
||||
case DT_DATE_TZ:
|
||||
case DT_DATETIME:
|
||||
case DT_DATETIME_TZ:
|
||||
case DT_TIME:
|
||||
case DT_TIME_TZ:
|
||||
{
|
||||
WCHAR *p, *e;
|
||||
SYSTEMTIME st;
|
||||
DOUBLE date = 0.0;
|
||||
|
||||
st.wYear = 1899;
|
||||
st.wMonth = 12;
|
||||
st.wDay = 30;
|
||||
st.wDayOfWeek = st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0;
|
||||
|
||||
V_VT(&src) = VT_BSTR;
|
||||
V_BSTR(&src) = bstr_from_xmlChar(str);
|
||||
|
||||
if(!V_BSTR(&src))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
p = V_BSTR(&src);
|
||||
e = p + SysStringLen(V_BSTR(&src));
|
||||
|
||||
if(p+4<e && *(p+4)=='-') /* parse date (yyyy-mm-dd) */
|
||||
{
|
||||
st.wYear = atoiW(p);
|
||||
st.wMonth = atoiW(p+5);
|
||||
st.wDay = atoiW(p+8);
|
||||
p += 10;
|
||||
|
||||
if(*p == 'T') p++;
|
||||
}
|
||||
|
||||
if(p+2<e && *(p+2)==':') /* parse time (hh:mm:ss.?) */
|
||||
{
|
||||
st.wHour = atoiW(p);
|
||||
st.wMinute = atoiW(p+3);
|
||||
st.wSecond = atoiW(p+6);
|
||||
p += 8;
|
||||
|
||||
if(*p == '.')
|
||||
{
|
||||
p++;
|
||||
while(isdigitW(*p)) p++;
|
||||
}
|
||||
}
|
||||
|
||||
SystemTimeToVariantTime(&st, &date);
|
||||
V_VT(v) = VT_DATE;
|
||||
V_DATE(v) = date;
|
||||
|
||||
if(*p == '+') /* parse timezone offset (+hh:mm) */
|
||||
V_DATE(v) += (DOUBLE)atoiW(p+1)/24 + (DOUBLE)atoiW(p+4)/1440;
|
||||
else if(*p == '-') /* parse timezone offset (-hh:mm) */
|
||||
V_DATE(v) -= (DOUBLE)atoiW(p+1)/24 + (DOUBLE)atoiW(p+4)/1440;
|
||||
|
||||
VariantClear(&src);
|
||||
handled = TRUE;
|
||||
}
|
||||
break;
|
||||
case DT_BIN_HEX:
|
||||
{
|
||||
SAFEARRAYBOUND sab;
|
||||
int i, len;
|
||||
|
||||
len = xmlStrlen(str)/2;
|
||||
sab.lLbound = 0;
|
||||
sab.cElements = len;
|
||||
|
||||
V_VT(v) = (VT_ARRAY|VT_UI1);
|
||||
V_ARRAY(v) = SafeArrayCreate(VT_UI1, 1, &sab);
|
||||
|
||||
if(!V_ARRAY(v))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
for(i=0; i<len; i++)
|
||||
((BYTE*)V_ARRAY(v)->pvData)[i] = (hex_to_byte(str[2*i])<<4)
|
||||
+ hex_to_byte(str[2*i+1]);
|
||||
handled = TRUE;
|
||||
}
|
||||
break;
|
||||
case DT_BIN_BASE64:
|
||||
{
|
||||
SAFEARRAYBOUND sab;
|
||||
int i, len;
|
||||
|
||||
len = xmlStrlen(str);
|
||||
if(str[len-2] == '=') i = 2;
|
||||
else if(str[len-1] == '=') i = 1;
|
||||
else i = 0;
|
||||
|
||||
sab.lLbound = 0;
|
||||
sab.cElements = len/4*3-i;
|
||||
|
||||
V_VT(v) = (VT_ARRAY|VT_UI1);
|
||||
V_ARRAY(v) = SafeArrayCreate(VT_UI1, 1, &sab);
|
||||
|
||||
if(!V_ARRAY(v))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
for(i=0; i<len/4; i++)
|
||||
{
|
||||
((BYTE*)V_ARRAY(v)->pvData)[3*i] = (base64_to_byte(str[4*i])<<2)
|
||||
+ (base64_to_byte(str[4*i+1])>>4);
|
||||
if(3*i+1 < sab.cElements)
|
||||
((BYTE*)V_ARRAY(v)->pvData)[3*i+1] = (base64_to_byte(str[4*i+1])<<4)
|
||||
+ (base64_to_byte(str[4*i+2])>>2);
|
||||
if(3*i+2 < sab.cElements)
|
||||
((BYTE*)V_ARRAY(v)->pvData)[3*i+2] = (base64_to_byte(str[4*i+2])<<6)
|
||||
+ base64_to_byte(str[4*i+3]);
|
||||
}
|
||||
handled = TRUE;
|
||||
}
|
||||
break;
|
||||
case DT_BOOLEAN:
|
||||
V_VT(v) = VT_BOOL;
|
||||
break;
|
||||
case DT_FIXED_14_4:
|
||||
V_VT(v) = VT_CY;
|
||||
break;
|
||||
case DT_I1:
|
||||
V_VT(v) = VT_I1;
|
||||
break;
|
||||
case DT_I2:
|
||||
V_VT(v) = VT_I2;
|
||||
break;
|
||||
case DT_I4:
|
||||
case DT_INT:
|
||||
V_VT(v) = VT_I4;
|
||||
break;
|
||||
case DT_I8:
|
||||
V_VT(v) = VT_I8;
|
||||
break;
|
||||
case DT_R4:
|
||||
V_VT(v) = VT_R4;
|
||||
break;
|
||||
case DT_FLOAT:
|
||||
case DT_R8:
|
||||
V_VT(v) = VT_R8;
|
||||
break;
|
||||
case DT_UI1:
|
||||
V_VT(v) = VT_UI1;
|
||||
break;
|
||||
case DT_UI2:
|
||||
V_VT(v) = VT_UI2;
|
||||
break;
|
||||
case DT_UI4:
|
||||
V_VT(v) = VT_UI4;
|
||||
break;
|
||||
case DT_UI8:
|
||||
V_VT(v) = VT_UI8;
|
||||
break;
|
||||
case DT_CHAR:
|
||||
case DT_ENTITY:
|
||||
case DT_ENTITIES:
|
||||
case DT_ENUMERATION:
|
||||
case DT_ID:
|
||||
case DT_IDREF:
|
||||
case DT_IDREFS:
|
||||
case DT_NOTATION:
|
||||
FIXME("need to handle dt:%s\n", dt_get_str(dt));
|
||||
V_VT(v) = VT_BSTR;
|
||||
V_BSTR(v) = bstr_from_xmlChar(str);
|
||||
if (!V_BSTR(v))
|
||||
return E_OUTOFMEMORY;
|
||||
handled = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!handled)
|
||||
{
|
||||
V_VT(&src) = VT_BSTR;
|
||||
V_BSTR(&src) = bstr_from_xmlChar(str);
|
||||
|
||||
if(!V_BSTR(&src))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
hr = VariantChangeTypeEx(v, &src,
|
||||
MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT),0, V_VT(v));
|
||||
VariantClear(&src);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI domelem_get_nodeTypedValue(
|
||||
IXMLDOMElement *iface,
|
||||
VARIANT* var1)
|
||||
{
|
||||
domelem *This = impl_from_IXMLDOMElement( iface );
|
||||
return IXMLDOMNode_get_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 );
|
||||
XDR_DT dt;
|
||||
xmlChar* content;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, var1);
|
||||
|
||||
if(!var1)
|
||||
return E_INVALIDARG;
|
||||
|
||||
V_VT(var1) = VT_NULL;
|
||||
|
||||
dt = element_get_dt(get_element(This));
|
||||
content = xmlNodeGetContent(get_element(This));
|
||||
hr = VARIANT_from_DT(dt, content, var1);
|
||||
xmlFree(content);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI domelem_put_nodeTypedValue(
|
||||
@ -472,25 +718,106 @@ static HRESULT WINAPI domelem_put_nodeTypedValue(
|
||||
return hr;
|
||||
}
|
||||
|
||||
XDR_DT element_get_dt(xmlNodePtr node)
|
||||
{
|
||||
XDR_DT dt = DT_INVALID;
|
||||
|
||||
TRACE("(%p)\n", node);
|
||||
if(node->type != XML_ELEMENT_NODE)
|
||||
{
|
||||
FIXME("invalid element node\n");
|
||||
return dt;
|
||||
}
|
||||
|
||||
if (node->ns && xmlStrEqual(node->ns->href, DT_nsURI))
|
||||
{
|
||||
dt = dt_get_type(node->name, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
xmlChar* pVal = xmlGetNsProp(node, BAD_CAST "dt", DT_nsURI);
|
||||
if (pVal)
|
||||
{
|
||||
dt = dt_get_type(pVal, -1);
|
||||
xmlFree(pVal);
|
||||
}
|
||||
else if (node->doc)
|
||||
{
|
||||
IXMLDOMDocument3* doc = (IXMLDOMDocument3*)create_domdoc((xmlNodePtr)node->doc);
|
||||
if (doc)
|
||||
{
|
||||
VARIANT v;
|
||||
VariantInit(&v);
|
||||
|
||||
if (IXMLDOMDocument3_get_schemas(doc, &v) == S_OK &&
|
||||
V_VT(&v) == VT_DISPATCH)
|
||||
{
|
||||
dt = SchemaCache_get_node_dt((IXMLDOMSchemaCollection2*)V_DISPATCH(&v), node);
|
||||
}
|
||||
VariantClear(&v);
|
||||
IXMLDOMDocument3_Release(doc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("=> dt:%s\n", dt_get_str(dt));
|
||||
return dt;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI domelem_get_dataType(
|
||||
IXMLDOMElement *iface,
|
||||
VARIANT* typename)
|
||||
{
|
||||
domelem *This = impl_from_IXMLDOMElement( iface );
|
||||
xmlChar *pVal = xmlGetNsProp(get_element(This), (const xmlChar*)"dt",
|
||||
(const xmlChar*)"urn:schemas-microsoft-com:datatypes");
|
||||
XDR_DT dt;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, typename);
|
||||
|
||||
V_VT(typename) = VT_NULL;
|
||||
if (!typename)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (pVal)
|
||||
dt = element_get_dt(get_element(This));
|
||||
switch (dt)
|
||||
{
|
||||
V_VT(typename) = VT_BSTR;
|
||||
V_BSTR(typename) = bstr_from_xmlChar( pVal );
|
||||
xmlFree(pVal);
|
||||
}
|
||||
case DT_BIN_BASE64:
|
||||
case DT_BIN_HEX:
|
||||
case DT_BOOLEAN:
|
||||
case DT_CHAR:
|
||||
case DT_DATE:
|
||||
case DT_DATE_TZ:
|
||||
case DT_DATETIME:
|
||||
case DT_DATETIME_TZ:
|
||||
case DT_FIXED_14_4:
|
||||
case DT_FLOAT:
|
||||
case DT_I1:
|
||||
case DT_I2:
|
||||
case DT_I4:
|
||||
case DT_I8:
|
||||
case DT_INT:
|
||||
case DT_NUMBER:
|
||||
case DT_R4:
|
||||
case DT_R8:
|
||||
case DT_TIME:
|
||||
case DT_TIME_TZ:
|
||||
case DT_UI1:
|
||||
case DT_UI2:
|
||||
case DT_UI4:
|
||||
case DT_UI8:
|
||||
case DT_URI:
|
||||
case DT_UUID:
|
||||
V_VT(typename) = VT_BSTR;
|
||||
V_BSTR(typename) = bstr_from_xmlChar(dt_get_str(dt));
|
||||
|
||||
if (!V_BSTR(typename))
|
||||
return E_OUTOFMEMORY;
|
||||
break;
|
||||
default:
|
||||
/* Other types (DTD equivalents) do not return anything here,
|
||||
* but the pointer part of the VARIANT is set to NULL */
|
||||
V_VT(typename) = VT_NULL;
|
||||
V_BSTR(typename) = NULL;
|
||||
break;
|
||||
}
|
||||
return (V_VT(typename) != VT_NULL) ? S_OK : S_FALSE;
|
||||
}
|
||||
|
||||
|
@ -270,6 +270,7 @@ extern XDR_DT SchemaCache_get_node_dt(IXMLDOMSchemaCollection2* iface, xmlNodeP
|
||||
|
||||
extern XDR_DT dt_get_type(xmlChar const* str, int len /* calculated if -1 */);
|
||||
extern xmlChar const* dt_get_str(XDR_DT dt);
|
||||
extern XDR_DT element_get_dt(xmlNodePtr node);
|
||||
|
||||
extern BSTR EnsureCorrectEOL(BSTR);
|
||||
|
||||
|
@ -669,6 +669,7 @@ static inline BYTE base64_to_byte(xmlChar c)
|
||||
return c-'a'+26;
|
||||
}
|
||||
|
||||
/* TODO: phasing this version out */
|
||||
static inline HRESULT VARIANT_from_xmlChar(xmlChar *str, VARIANT *v, BSTR type)
|
||||
{
|
||||
if(!type || !lstrcmpiW(type, szString) ||
|
||||
@ -850,19 +851,23 @@ static HRESULT WINAPI xmlnode_get_nodeTypedValue(
|
||||
|
||||
V_VT(typedValue) = VT_NULL;
|
||||
|
||||
if(This->node->type == XML_ELEMENT_NODE ||
|
||||
This->node->type == XML_TEXT_NODE ||
|
||||
This->node->type == XML_ENTITY_REF_NODE)
|
||||
if (This->node->type == XML_TEXT_NODE || This->node->type == XML_ENTITY_REF_NODE)
|
||||
{
|
||||
VariantInit(&type);
|
||||
hres = IXMLDOMNode_get_dataType(This->iface, &type);
|
||||
|
||||
if(hres != S_OK && This->node->type != XML_ELEMENT_NODE)
|
||||
return IXMLDOMNode_get_nodeValue(This->iface, typedValue);
|
||||
if(hres != S_OK)
|
||||
return IXMLDOMNode_get_nodeValue(This->iface, typedValue);
|
||||
|
||||
content = xmlNodeGetContent(This->node);
|
||||
hres = VARIANT_from_xmlChar(content, typedValue,
|
||||
hres==S_OK ? V_BSTR(&type) : NULL);
|
||||
xmlFree(content);
|
||||
VariantClear(&type);
|
||||
content = xmlNodeGetContent(This->node);
|
||||
hres = VARIANT_from_xmlChar(content, typedValue, hres==S_OK ? V_BSTR(&type) : NULL);
|
||||
VariantClear(&type);
|
||||
xmlFree(content);
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("need to handle node type %i\n", This->node->type);
|
||||
}
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
@ -884,6 +884,17 @@ static WCHAR szStrangeChars[] = {'&','x',' ',0x2103, 0};
|
||||
|
||||
#define double_eq(x, y) ok((x)-(y)<=1e-14*(x) && (x)-(y)>=-1e-14*(x), "expected %.16g, got %.16g\n", x, y)
|
||||
|
||||
#define _expect64(expr, str, base, TYPE, CONV) { \
|
||||
TYPE v1 = expr; \
|
||||
TYPE v2 = CONV(str, NULL, base); \
|
||||
ok(v1 == v2, #expr "returned 0x%08x%08x, expected 0x%08x%08x\n", \
|
||||
(ULONG)((ULONG64)v1 >> 32), (ULONG)((ULONG64)v2 & (ULONG64)0xffffffff), \
|
||||
(ULONG)((ULONG64)v1 >> 32), (ULONG)((ULONG64)v2 & (ULONG64)0xffffffff)); \
|
||||
}
|
||||
|
||||
#define expect_int64(expr, x, base) _expect64(expr, #x, base, LONG64, strtoll)
|
||||
#define expect_uint64(expr, x, base) _expect64(expr, #x, base, ULONG64, strtoull)
|
||||
|
||||
static void* _create_object(const GUID *clsid, const char *name, const IID *iid, int line)
|
||||
{
|
||||
void *obj = NULL;
|
||||
@ -7690,7 +7701,7 @@ static void test_get_dataType(void)
|
||||
IXMLDOMNode* node;
|
||||
IXMLDOMParseError* err;
|
||||
VARIANT_BOOL b;
|
||||
VARIANT v;
|
||||
VARIANT v, vtmp;
|
||||
LONG l;
|
||||
BSTR bstr;
|
||||
|
||||
@ -7724,13 +7735,23 @@ static void test_get_dataType(void)
|
||||
|
||||
/* check data types without the schema */
|
||||
node = NULL;
|
||||
memset(&vtmp, -1, sizeof(VARIANT));
|
||||
V_VT(&vtmp) = VT_NULL;
|
||||
V_BSTR(&vtmp) = NULL;
|
||||
memset(&v, -1, sizeof(VARIANT));
|
||||
V_VT(&v) = VT_EMPTY;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testBase64']/Value/base64Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
ole_expect(IXMLDOMNode_get_dataType(node, &v), S_FALSE);
|
||||
ok(V_VT(&v) == VT_NULL, "got variant type %i\n", V_VT(&v));
|
||||
/* when returning VT_NULL, the pointer is set to NULL */
|
||||
ok(memcmp(&v, &vtmp, sizeof(VARIANT)) == 0, "got %p\n", V_BSTR(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7741,6 +7762,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7751,6 +7775,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7761,6 +7788,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7771,6 +7801,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7781,6 +7814,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7791,6 +7827,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7801,6 +7840,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7811,6 +7853,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7821,6 +7866,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7831,6 +7879,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7841,6 +7892,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7851,6 +7905,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7861,6 +7918,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7871,6 +7931,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7881,6 +7944,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7891,6 +7957,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7901,6 +7970,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7911,6 +7983,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7921,6 +7996,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7931,6 +8009,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7941,6 +8022,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7951,6 +8035,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7961,6 +8048,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7971,6 +8061,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -7981,6 +8074,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
@ -8001,6 +8097,9 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
/* now load the schema */
|
||||
@ -8035,144 +8134,203 @@ static void test_get_dataType(void)
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testBase64']/Value/base64Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("bin.base64")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == (VT_ARRAY|VT_UI1), "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testHex']/Value/hexData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("bin.hex")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == (VT_ARRAY|VT_UI1), "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testBool']/Value/boolData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("boolean")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BOOL, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BOOL)
|
||||
ok(V_BOOL(&v) == VARIANT_TRUE, "got %04x\n", V_BOOL(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testChar']/Value/charData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("char")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_I4, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_I4)
|
||||
ok(V_I4(&v) == 'u', "got %08x\n", V_I4(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testDate']/Value/dateData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("date")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_DATE, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testDateTime']/Value/dateTimeData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("dateTime")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_DATE, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testDateTimeTz']/Value/dateTimeTzData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("dateTime.tz")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_DATE, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testFixed']/Value/fixedData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("fixed.14.4")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_CY, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testFloat']/Value/floatData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("float")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_R8, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_R8)
|
||||
ok(V_R8(&v) == (double)3.14159, "got %f\n", V_R8(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testI1']/Value/i1Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("i1")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_I1, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_I1)
|
||||
ok(V_I1(&v) == 42, "got %i\n", V_I1(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testI2']/Value/i2Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("i2")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_I2, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_I2)
|
||||
ok(V_I2(&v) == 420, "got %i\n", V_I2(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testI4']/Value/i4Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("i4")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_I4, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_I4)
|
||||
ok(V_I4(&v) == -420000000, "got %i\n", V_I4(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testI8']/Value/i8Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("i8")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
/* TODO: which platforms return VT_I8? */
|
||||
todo_wine ok(V_VT(&v) == VT_NULL, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_I8)
|
||||
expect_int64(V_I8(&v), -4200000000, 10);
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testInt']/Value/intData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("int")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_I4, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_I4)
|
||||
ok(V_I4(&v) == 42, "got %i\n", V_I4(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
/* nmtoken does not return a bstr */
|
||||
/* nmtoken does not return a bstr for get_dataType() */
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testNmtoken']/Value/nmtokData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
@ -8181,9 +8339,12 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
/* nmtokens does not return a bstr */
|
||||
/* nmtokens does not return a bstr for get_dataType() */
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testNmtokens']/Value/nmtoksData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
@ -8192,39 +8353,55 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testNumber']/Value/numData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("number")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testR4']/Value/r4Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("r4")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_R4, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_R4)
|
||||
ok(V_R4(&v) == (float)3.14159265, "got %f\n", V_R4(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testR8']/Value/r8Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("r8")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_R8, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_R8)
|
||||
todo_wine ok(V_R8(&v) == (double)3.14159265358979323846, "got %.20f\n", V_R8(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
/* dt:string is the default, does not return a bstr */
|
||||
/* dt:string is the default, does not return a bstr for get_dataType() */
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testString']/Value/stringData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
@ -8233,86 +8410,122 @@ static void test_get_dataType(void)
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testTime']/Value/timeData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("time")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_DATE, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testTimeTz']/Value/timeTzData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("time.tz")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_DATE, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testU1']/Value/u1Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("ui1")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_UI1, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_UI1)
|
||||
ok(V_UI1(&v) == 0xFF, "got %02x\n", V_UI1(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testU2']/Value/u2Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("ui2")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_UI2, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_UI2)
|
||||
ok(V_UI2(&v) == 0xFFFF, "got %04x\n", V_UI2(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testU4']/Value/u4Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("ui4")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_UI4, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_UI4)
|
||||
ok(V_UI4(&v) == 0xFFFFFFFF, "got %08x\n", V_UI4(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testU8']/Value/u8Data"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("ui8")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
/* TODO: which platforms return VT_UI8? */
|
||||
todo_wine ok(V_VT(&v) == VT_NULL, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_UI8)
|
||||
expect_uint64(V_UI8(&v), 0xFFFFFFFFFFFFFFFF, 16);
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testURI']/Value/uriData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("uri")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
node = NULL;
|
||||
ole_check(IXMLDOMDocument2_selectSingleNode(doc, _bstr_("//Property[Name!text()='testUUID']/Value/uuidData"), &node));
|
||||
ok(node != NULL, "expected node\n");
|
||||
todo_wine ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
todo_wine ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
ole_check(IXMLDOMNode_get_dataType(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
if (V_VT(&v) == VT_BSTR)
|
||||
ok(lstrcmpW(V_BSTR(&v), _bstr_("uuid")) == 0, "got %s\n", wine_dbgstr_w(V_BSTR(&v)));
|
||||
VariantClear(&v);
|
||||
ole_check(IXMLDOMNode_get_nodeTypedValue(node, &v));
|
||||
ok(V_VT(&v) == VT_BSTR, "got variant type %i\n", V_VT(&v));
|
||||
VariantClear(&v);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
||||
ok(IXMLDOMDocument2_Release(schema) == 0, "schema not released\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user