Module: wine Branch: master Commit: f8bdf8b5affc112f3802d2dfd0bc21d63ac163d0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f8bdf8b5affc112f3802d2dfd0...
Author: Adam Martinson amartinson@codeweavers.com Date: Wed Oct 20 16:35:34 2010 -0500
msxml3: Implement schema_cache_get_length().
---
dlls/msxml3/schema.c | 15 +++++-- dlls/msxml3/tests/schema.c | 89 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 5 deletions(-)
diff --git a/dlls/msxml3/schema.c b/dlls/msxml3/schema.c index 77a7270..9ef08a3 100644 --- a/dlls/msxml3/schema.c +++ b/dlls/msxml3/schema.c @@ -347,7 +347,7 @@ static HRESULT WINAPI schema_cache_Invoke(IXMLDOMSchemaCollection *iface,
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); 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) { - FIXME("stub\n"); - return E_NOTIMPL; + schema_cache *This = impl_from_IXMLDOMSchemaCollection(iface); + 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) @@ -497,8 +502,8 @@ static const struct IXMLDOMSchemaCollectionVtbl schema_vtbl =
HRESULT SchemaCache_create(IUnknown *pUnkOuter, LPVOID *ppObj) { - schema_cache *schema = heap_alloc( sizeof (*schema) ); - if( !schema ) + schema_cache *schema = heap_alloc(sizeof(*schema)); + if (!schema) return E_OUTOFMEMORY;
schema->lpVtbl = &schema_vtbl; diff --git a/dlls/msxml3/tests/schema.c b/dlls/msxml3/tests/schema.c index 0731d59..f889af4 100644 --- a/dlls/msxml3/tests/schema.c +++ b/dlls/msxml3/tests/schema.c @@ -423,6 +423,94 @@ static void test_collection_refs(void) 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) { HRESULT r; @@ -432,6 +520,7 @@ START_TEST(schema)
test_schema_refs(); test_collection_refs(); + test_length();
CoUninitialize(); }