Jacek Caban : jscript: Added SetProperty(SCRIPTPROP_INVOKEVERSIONING) implementation.
Alexandre Julliard
julliard at winehq.org
Tue Oct 20 10:33:34 CDT 2009
Module: wine
Branch: master
Commit: 3b2d5ecdf5865f94322b01c033deeba211894732
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3b2d5ecdf5865f94322b01c033deeba211894732
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Oct 19 20:39:24 2009 +0200
jscript: Added SetProperty(SCRIPTPROP_INVOKEVERSIONING) implementation.
---
dlls/jscript/jscript.c | 25 +++++++++++++++++++++-
dlls/jscript/jscript.h | 1 +
dlls/jscript/tests/jscript.c | 44 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 68 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index eb41835..f93962c 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -51,6 +51,7 @@ typedef struct {
script_ctx_t *ctx;
LONG thread_id;
LCID lcid;
+ DWORD version;
IActiveScriptSite *site;
@@ -659,6 +660,7 @@ static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
ctx->ref = 1;
ctx->state = SCRIPTSTATE_UNINITIALIZED;
ctx->safeopt = This->safeopt;
+ ctx->version = This->version;
jsheap_init(&ctx->tmp_heap);
ctx = InterlockedCompareExchangePointer((void**)&This->ctx, ctx, NULL);
@@ -822,8 +824,27 @@ static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface,
VARIANT *pvarIndex, VARIANT *pvarValue)
{
JScript *This = ACTSCPPROP_THIS(iface);
- FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%x %s %s)\n", This, dwProperty, debugstr_variant(pvarIndex), debugstr_variant(pvarValue));
+
+ if(pvarIndex)
+ FIXME("unsupported pvarIndex\n");
+
+ switch(dwProperty) {
+ case SCRIPTPROP_INVOKEVERSIONING:
+ if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0 || V_I4(pvarValue) > 15) {
+ WARN("invalid value %s\n", debugstr_variant(pvarValue));
+ return E_INVALIDARG;
+ }
+
+ This->version = V_I4(pvarValue);
+ break;
+ default:
+ FIXME("Unimplemented property %x\n", dwProperty);
+ return E_NOTIMPL;
+ }
+
+ return S_OK;
}
#undef ACTSCPPROP_THIS
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index af1c1c3..2d7d5d9 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -262,6 +262,7 @@ struct _script_ctx_t {
IActiveScriptSite *site;
IInternetHostSecurityManager *secmgr;
DWORD safeopt;
+ DWORD version;
LCID lcid;
jsheap_t tmp_heap;
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index e53fc2d..ed94a89 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -295,6 +295,49 @@ static void test_safety(IUnknown *unk)
IObjectSafety_Release(safety);
}
+static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *val)
+{
+ IActiveScriptProperty *script_prop;
+ HRESULT hres;
+
+ hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
+ (void**)&script_prop);
+ ok(hres == S_OK, "Could not get IActiveScriptProperty iface: %08x\n", hres);
+
+ hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
+ IActiveScriptProperty_Release(script_prop);
+ return hres;
+}
+
+static void test_invoke_versioning(IActiveScript *script)
+{
+ VARIANT v;
+ HRESULT hres;
+
+ V_VT(&v) = VT_NULL;
+ hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
+ if(hres == E_NOTIMPL) {
+ win_skip("SCRIPTPROP_INVOKESTRING not supported\n");
+ return;
+ }
+ ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
+
+ V_VT(&v) = VT_I2;
+ V_I2(&v) = 0;
+ hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
+ ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
+
+ V_VT(&v) = VT_I4;
+ V_I4(&v) = 16;
+ hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
+ ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
+
+ V_VT(&v) = VT_I4;
+ V_I4(&v) = 2;
+ hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
+ ok(hres == S_OK, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
+}
+
static void test_jscript(void)
{
IActiveScriptParse *parse;
@@ -322,6 +365,7 @@ static void test_jscript(void)
test_state(script, SCRIPTSTATE_UNINITIALIZED);
test_safety(unk);
+ test_invoke_versioning(script);
hres = IActiveScriptParse64_InitNew(parse);
ok(hres == S_OK, "InitNew failed: %08x\n", hres);
More information about the wine-cvs
mailing list