diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 23677f42ccf..65ca1d3fa58 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -2108,9 +2108,12 @@ static void _test_elem_collection(unsigned line, IUnknown *unk,
const elem_type_t *elem_types, LONG exlen)
{
IHTMLElementCollection *col;
+ IEnumVARIANT *enum_var;
+ IUnknown *enum_unk;
+ ULONG fetched;
LONG len;
DWORD i;
- VARIANT name, index;
+ VARIANT name, index, v, vs[5];
IDispatch *disp, *disp2;
HRESULT hres;
@@ -2128,6 +2131,13 @@ static void _test_elem_collection(unsigned line, IUnknown *unk,
V_VT(&index) = VT_EMPTY;
+ hres = IHTMLElementCollection_get__newEnum(col, &enum_unk);
+ ok_(__FILE__,line)(hres == S_OK, "_newEnum failed: %08x\n", hres);
+
+ hres = IUnknown_QueryInterface(enum_unk, &IID_IEnumVARIANT, (void**)&enum_var);
+ IUnknown_Release(enum_unk);
+ ok_(__FILE__,line)(hres == S_OK, "Could not get IEnumVARIANT iface: %08x\n", hres);
+
for(i=0; i 2 ? len-2 : 0);
+ ok_(__FILE__,line)(hres == S_OK, "Skip failed: %08x\n", hres);
+
+ memset(vs, 0, sizeof(vs));
+ fetched = 0;
+ hres = IEnumVARIANT_Next(enum_var, sizeof(vs)/sizeof(*vs), vs, &fetched);
+ ok_(__FILE__,line)(hres == S_FALSE, "Next failed: %08x\n", hres);
+ ok_(__FILE__,line)(fetched == (len > 2 ? 2 : len), "fetched = %d\n", fetched);
+ if(len) {
+ ok_(__FILE__,line)(V_VT(vs) == VT_DISPATCH && V_DISPATCH(vs), "V_VT(vs[0]) = %d\n", V_VT(vs));
+ IDispatch_Release(V_DISPATCH(vs));
+ }
+ if(len > 1) {
+ ok_(__FILE__,line)(V_VT(vs+1) == VT_DISPATCH && V_DISPATCH(vs+1), "V_VT(vs[1]) = %d\n", V_VT(vs+1));
+ IDispatch_Release(V_DISPATCH(vs+1));
+ }
+
+ hres = IEnumVARIANT_Reset(enum_var);
+ ok_(__FILE__,line)(hres == S_OK, "Reset failed: %08x\n", hres);
+
+ hres = IEnumVARIANT_Skip(enum_var, len+1);
+ ok_(__FILE__,line)(hres == S_FALSE, "Skip failed: %08x\n", hres);
+
+ IEnumVARIANT_Release(enum_var);
+
V_VT(&name) = VT_I4;
V_I4(&name) = len;
disp = (void*)0xdeadbeef;