msxml3: Implement schema_cache_get_length().
This commit is contained in:
parent
ab136a4fc2
commit
f8bdf8b5af
|
@ -347,7 +347,7 @@ static HRESULT WINAPI schema_cache_Invoke(IXMLDOMSchemaCollection *iface,
|
||||||
|
|
||||||
static HRESULT WINAPI schema_cache_add(IXMLDOMSchemaCollection *iface, BSTR uri, VARIANT var)
|
static HRESULT WINAPI schema_cache_add(IXMLDOMSchemaCollection *iface, BSTR uri, VARIANT var)
|
||||||
{
|
{
|
||||||
schema_cache *This = impl_from_IXMLDOMSchemaCollection( iface );
|
schema_cache *This = impl_from_IXMLDOMSchemaCollection(iface);
|
||||||
xmlChar* name = xmlChar_from_wchar(uri);
|
xmlChar* name = xmlChar_from_wchar(uri);
|
||||||
TRACE("(%p)->(%s, var(vt %x))\n", This, debugstr_w(uri), V_VT(&var));
|
TRACE("(%p)->(%s, var(vt %x))\n", This, debugstr_w(uri), V_VT(&var));
|
||||||
|
|
||||||
|
@ -454,8 +454,13 @@ static HRESULT WINAPI schema_cache_remove(IXMLDOMSchemaCollection *iface, BSTR u
|
||||||
|
|
||||||
static HRESULT WINAPI schema_cache_get_length(IXMLDOMSchemaCollection *iface, LONG *length)
|
static HRESULT WINAPI schema_cache_get_length(IXMLDOMSchemaCollection *iface, LONG *length)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
schema_cache *This = impl_from_IXMLDOMSchemaCollection(iface);
|
||||||
return E_NOTIMPL;
|
TRACE("(%p)->(%p)\n", This, length);
|
||||||
|
|
||||||
|
if (!length)
|
||||||
|
return E_POINTER;
|
||||||
|
*length = xmlHashSize(This->cache);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI schema_cache_get_namespaceURI(IXMLDOMSchemaCollection *iface, LONG index, BSTR *len)
|
static HRESULT WINAPI schema_cache_get_namespaceURI(IXMLDOMSchemaCollection *iface, LONG index, BSTR *len)
|
||||||
|
@ -497,8 +502,8 @@ static const struct IXMLDOMSchemaCollectionVtbl schema_vtbl =
|
||||||
|
|
||||||
HRESULT SchemaCache_create(IUnknown *pUnkOuter, LPVOID *ppObj)
|
HRESULT SchemaCache_create(IUnknown *pUnkOuter, LPVOID *ppObj)
|
||||||
{
|
{
|
||||||
schema_cache *schema = heap_alloc( sizeof (*schema) );
|
schema_cache *schema = heap_alloc(sizeof(*schema));
|
||||||
if( !schema )
|
if (!schema)
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
schema->lpVtbl = &schema_vtbl;
|
schema->lpVtbl = &schema_vtbl;
|
||||||
|
|
|
@ -423,6 +423,94 @@ static void test_collection_refs(void)
|
||||||
free_bstrs();
|
free_bstrs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_length(void)
|
||||||
|
{
|
||||||
|
IXMLDOMDocument2 *schema1, *schema2, *schema3;
|
||||||
|
IXMLDOMSchemaCollection *cache;
|
||||||
|
VARIANT_BOOL b;
|
||||||
|
VARIANT v;
|
||||||
|
LONG length;
|
||||||
|
|
||||||
|
schema1 = create_document(&IID_IXMLDOMDocument2);
|
||||||
|
schema2 = create_document(&IID_IXMLDOMDocument2);
|
||||||
|
schema3 = create_document(&IID_IXMLDOMDocument2);
|
||||||
|
|
||||||
|
cache = create_cache(&IID_IXMLDOMSchemaCollection);
|
||||||
|
|
||||||
|
if (!schema1 || !schema2 || !schema3 || !cache)
|
||||||
|
{
|
||||||
|
if (schema1) IXMLDOMDocument2_Release(schema1);
|
||||||
|
if (schema2) IXMLDOMDocument2_Release(schema2);
|
||||||
|
if (schema3) IXMLDOMDocument2_Release(schema3);
|
||||||
|
|
||||||
|
if (cache) IXMLDOMSchemaCollection_Release(cache);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
VariantInit(&v);
|
||||||
|
|
||||||
|
ole_check(IXMLDOMDocument2_loadXML(schema1, _bstr_(xdr_schema1_xml), &b));
|
||||||
|
ok(b == VARIANT_TRUE, "failed to load XML\n");
|
||||||
|
|
||||||
|
ole_check(IXMLDOMDocument2_loadXML(schema2, _bstr_(xdr_schema2_xml), &b));
|
||||||
|
ok(b == VARIANT_TRUE, "failed to load XML\n");
|
||||||
|
|
||||||
|
ole_check(IXMLDOMDocument2_loadXML(schema3, _bstr_(xdr_schema3_xml), &b));
|
||||||
|
ok(b == VARIANT_TRUE, "failed to load XML\n");
|
||||||
|
|
||||||
|
ole_expect(IXMLDOMSchemaCollection_get_length(cache, NULL), E_POINTER);
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 0, "expected length 0, got %i\n", length);
|
||||||
|
|
||||||
|
ole_check(IXMLDOMSchemaCollection_add(cache, _bstr_(xdr_schema1_uri), _variantdoc_(schema1)));
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 1, "expected length 1, got %i\n", length);
|
||||||
|
|
||||||
|
ole_check(IXMLDOMSchemaCollection_add(cache, _bstr_(xdr_schema2_uri), _variantdoc_(schema2)));
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 2, "expected length 2, got %i\n", length);
|
||||||
|
|
||||||
|
ole_check(IXMLDOMSchemaCollection_add(cache, _bstr_(xdr_schema3_uri), _variantdoc_(schema3)));
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 3, "expected length 3, got %i\n", length);
|
||||||
|
|
||||||
|
/* adding with VT_NULL is the same as removing */
|
||||||
|
V_VT(&v) = VT_NULL;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_add(cache, _bstr_(xdr_schema1_uri), v));
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 2, "expected length 2, got %i\n", length);
|
||||||
|
|
||||||
|
ole_check(IXMLDOMSchemaCollection_add(cache, _bstr_(xdr_schema2_uri), v));
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 1, "expected length 1, got %i\n", length);
|
||||||
|
|
||||||
|
ole_check(IXMLDOMSchemaCollection_add(cache, _bstr_(xdr_schema3_uri), v));
|
||||||
|
|
||||||
|
length = -1;
|
||||||
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &length));
|
||||||
|
ok(length == 0, "expected length 0, got %i\n", length);
|
||||||
|
|
||||||
|
IXMLDOMDocument2_Release(schema1);
|
||||||
|
IXMLDOMDocument2_Release(schema2);
|
||||||
|
IXMLDOMDocument2_Release(schema3);
|
||||||
|
IXMLDOMSchemaCollection_Release(cache);
|
||||||
|
|
||||||
|
free_bstrs();
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(schema)
|
START_TEST(schema)
|
||||||
{
|
{
|
||||||
HRESULT r;
|
HRESULT r;
|
||||||
|
@ -432,6 +520,7 @@ START_TEST(schema)
|
||||||
|
|
||||||
test_schema_refs();
|
test_schema_refs();
|
||||||
test_collection_refs();
|
test_collection_refs();
|
||||||
|
test_length();
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue