mshtml: Added more attribute and IDispatchEx tests.

This commit is contained in:
Jacek Caban 2014-11-28 16:19:42 +01:00 committed by Alexandre Julliard
parent 53e9acbf28
commit 2c2f576163
2 changed files with 126 additions and 3 deletions

View File

@ -5,6 +5,10 @@ function ok(b,m) {
return external.ok(b, m);
}
function broken(expr) {
return external.broken(expr);
}
function test_removeAttribute(e) {
ok(e.removeAttribute('nonexisting') === false, "removeAttribute('nonexisting') didn't return false");
@ -98,11 +102,13 @@ function test_clone_node() {
ok(cloned.style.filter === "alpha(opacity=50)", "cloned.style.filter = " + cloned.style.filter);
}
function test_setAttribute() {
var input;
function test_attrs() {
var input, s, x, f, b;
document.body.innerHTML = '<input id="inputid"></input>';
input = document.getElementById("inputid");
s = input.style;
f = input.fireEvent;
ok(input.checked === false, "input.checked = " + input.checked);
input.setAttribute("checked", "test");
@ -113,6 +119,104 @@ function test_setAttribute() {
input.setAttribute("checked", "");
ok(input.checked === false, "input.checked = " + input.checked);
input.setAttribute("Checked", 1, 0);
ok(input.checked === true, "input.checked = " + input.checked);
ok(!("Checked" in input), "Checked added to input");
input.setAttribute("checked", 0, 0);
input.setAttribute("Checked", 1, 1);
ok(input.checked === false, "input.checked = " + input.checked);
ok("Checked" in input, "checked not added to input");
ok(input.Checked === 1, "input.Checked = " + input.Checked);
input.removeAttribute("Checked", 1);
ok(!("Checked" in input), "Checked is still in input");
ok(input.checked === false, "input.checked = " + input.checked);
input.setAttribute("checked", 1, 0);
input.setAttribute("Checked", 0);
ok(input.checked === true, "input.checked = " + input.checked);
ok("Checked" in input, "checked not added to input");
ok(input.Checked === 0, "input.Checked = " + input.Checked);
input.setAttribute("Checked", 2, 2);
ok(input.Checked === 0, "input.Checked = " + input.Checked);
input.setAttribute("Checked", 3, 3);
ok(input.Checked === 3, "input.Checked = " + input.Checked);
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText === "", "s.cssText = " + s.cssText);
input.setAttribute("style", "display: none");
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText === "", "s.cssText = " + s.cssText);
ok(s.display === "", "s.display = " + s.display);
s.display = "none";
ok(s.cssText != "", "s.cssText = " + s.cssText);
ok(s.display === "none", "s.display = " + s.display);
input.setAttribute("style", "");
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText != "", "s.cssText = " + s.cssText);
ok(s.display === "none", "s.display = " + s.display);
input.setAttribute("style", null);
x = input.getAttribute("style");
ok(input.style === s, "input.style = " + input.style);
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText != "", "s.cssText = " + s.cssText);
ok(s.display === "none", "s.display = " + s.display);
x = input.getAttribute("fireEvent");
ok(x === input.fireEvent, "input.getAttribute('fireEvent') = " + x);
input.setAttribute("fireEvent", 3);
ok(input.fireEvent === 3, "input.fireEvent = " + input.fireEvent);
x = input.getAttribute("fireEvent");
ok(x === 3, "input.getAttribute('fireEvent') = " + x);
b = input.removeAttribute("style");
ok(b === true, "removeAttribute('style') failed");
ok(input.style === s, "input.style = " + input.style);
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.display === "", "s.display = " + s.display);
ok(s.cssText === "", "s.cssText = " + s.cssText);
b = input.removeAttribute("style");
ok(b === true, "removeAttribute('style') failed");
b = false;
try {
input.setAttribute("tagName", "xxx");
}catch(e) {
b = true;
}
ok(b, "Expected exception on setAttribute(tagName)");
b = false;
try {
input.setAttribute("parentElement", "xxx");
}catch(e) {
b = true;
}
ok(b, "Expected exception on setAttribute(parentElement)");
b = input.removeAttribute("fireEvent");
ok(b === true, "removeAttribute(fireEvent) failed");
ok(input.fireEvent === f, "input.fireEvent = " + input.fireEvent);
x = input.getAttribute("fireEvent");
ok(x === f, "input.getAttribute('fireEvent') = " + x);
b = input.removeAttribute("fireEvent");
ok(b === false || broken(b === true), "removeAttribute(fireEvent) returned " + b);
input.fireEvent = 3;
x = input.getAttribute("fireEvent");
ok(x === 3, "input.getAttribute('fireEvent') = " + x);
ok(input.fireEvent === 3, "input.fireEvent' = " + input.fireEvent);
}
function test_attribute_collection() {
@ -239,7 +343,7 @@ function runTests() {
test_document_name_as_index();
test_remove_style_attribute();
test_getter_call();
test_setAttribute();
test_attrs();
test_attribute_collection();
test_arg_conv();
test_override_functions();

View File

@ -146,6 +146,7 @@ DEFINE_EXPECT(ChangeType);
#define DISPID_EXTERNAL_TRACE 0x300001
#define DISPID_EXTERNAL_REPORTSUCCESS 0x300002
#define DISPID_EXTERNAL_TODO_WINE_OK 0x300003
#define DISPID_EXTERNAL_BROKEN 0x300004
static const GUID CLSID_TestScript =
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x07,0x46}};
@ -594,6 +595,10 @@ static HRESULT WINAPI externalDisp_GetDispID(IDispatchEx *iface, BSTR bstrName,
*pid = DISPID_EXTERNAL_TODO_WINE_OK;
return S_OK;
}
if(!strcmp_wa(bstrName, "broken")) {
*pid = DISPID_EXTERNAL_BROKEN;
return S_OK;
}
ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
return DISP_E_UNKNOWNNAME;
@ -673,6 +678,20 @@ static HRESULT WINAPI externalDisp_InvokeEx(IDispatchEx *iface, DISPID id, LCID
return S_OK;
case DISPID_EXTERNAL_BROKEN:
ok(wFlags == INVOKE_FUNC || wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags);
ok(pdp != NULL, "pdp == NULL\n");
ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
ok(pei != NULL, "pei == NULL\n");
ok(V_VT(pdp->rgvarg) == VT_BOOL, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
V_VT(pvarRes) = VT_BOOL;
V_BOOL(pvarRes) = broken(V_BOOL(pdp->rgvarg)) ? VARIANT_TRUE : VARIANT_FALSE;
return S_OK;
default:
ok(0, "unexpected call\n");
return E_NOTIMPL;