Jacek Caban : mshtml: Added more attribute and IDispatchEx tests.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Nov 28 12:49:04 CST 2014
Module: wine
Branch: master
Commit: 2c2f576163595d7824886ef3cb95953e151cd3b1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c2f576163595d7824886ef3cb95953e151cd3b1
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Nov 28 16:19:42 2014 +0100
mshtml: Added more attribute and IDispatchEx tests.
---
dlls/mshtml/tests/jstest.html | 110 ++++++++++++++++++++++++++++++++++++++++--
dlls/mshtml/tests/script.c | 19 ++++++++
2 files changed, 126 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/tests/jstest.html b/dlls/mshtml/tests/jstest.html
index 792e28e..39cdae5 100644
--- a/dlls/mshtml/tests/jstest.html
+++ b/dlls/mshtml/tests/jstest.html
@@ -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();
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c
index 9681fd6..b92b66b 100644
--- a/dlls/mshtml/tests/script.c
+++ b/dlls/mshtml/tests/script.c
@@ -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;
More information about the wine-cvs
mailing list