Jacek Caban : jscript: Added more uninitialization tests.
Alexandre Julliard
julliard at winehq.org
Tue Feb 22 10:36:10 CST 2011
Module: wine
Branch: master
Commit: 01a6286b5fc4b36bce412209270d539ea8113ba1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=01a6286b5fc4b36bce412209270d539ea8113ba1
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Feb 21 17:49:32 2011 +0100
jscript: Added more uninitialization tests.
---
dlls/jscript/tests/jscript.c | 154 ++++++++++++++++++++++++++++++++----------
1 files changed, 119 insertions(+), 35 deletions(-)
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index ce25781..6d48799 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -60,6 +60,7 @@ static const CLSID CLSID_JScript =
}while(0)
DEFINE_EXPECT(GetLCID);
+DEFINE_EXPECT(OnStateChange_UNINITIALIZED);
DEFINE_EXPECT(OnStateChange_STARTED);
DEFINE_EXPECT(OnStateChange_CONNECTED);
DEFINE_EXPECT(OnStateChange_DISCONNECTED);
@@ -145,6 +146,9 @@ static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *ifac
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
{
switch(ssScriptState) {
+ case SCRIPTSTATE_UNINITIALIZED:
+ CHECK_EXPECT(OnStateChange_UNINITIALIZED);
+ return S_OK;
case SCRIPTSTATE_STARTED:
CHECK_EXPECT(OnStateChange_STARTED);
return S_OK;
@@ -373,34 +377,33 @@ static void test_invoke_versioning(IActiveScript *script)
ok(hres == S_OK, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
}
+static IActiveScript *create_jscript(void)
+{
+ IActiveScript *ret;
+ HRESULT hres;
+
+ hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+ &IID_IActiveScript, (void**)&ret);
+ ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
+
+ return ret;
+}
+
static void test_jscript(void)
{
IActiveScriptParse *parse;
IActiveScript *script;
IDispatchEx *dispex;
- IUnknown *unk;
ULONG ref;
HRESULT hres;
- hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
- &IID_IUnknown, (void**)&unk);
- ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
- if(FAILED(hres))
- return;
-
- hres = IUnknown_QueryInterface(unk, &IID_IActiveScript, (void**)&script);
- ok(hres == S_OK, "Could not get IActiveScript: %08x\n", hres);
+ script = create_jscript();
- hres = IUnknown_QueryInterface(unk, &IID_IActiveScriptParse, (void**)&parse);
+ hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
- if (FAILED(hres))
- {
- IActiveScript_Release(script);
- return;
- }
test_state(script, SCRIPTSTATE_UNINITIALIZED);
- test_safety(unk);
+ test_safety((IUnknown*)script);
test_invoke_versioning(script);
hres = IActiveScriptParse64_InitNew(parse);
@@ -448,9 +451,8 @@ static void test_jscript(void)
IDispatchEx_Release(dispex);
IUnknown_Release(parse);
- IActiveScript_Release(script);
- ref = IUnknown_Release(unk);
+ ref = IActiveScript_Release(script);
ok(!ref, "ref = %d\n", ref);
}
@@ -458,26 +460,13 @@ static void test_jscript2(void)
{
IActiveScriptParse *parse;
IActiveScript *script;
- IUnknown *unk;
ULONG ref;
HRESULT hres;
- hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
- &IID_IUnknown, (void**)&unk);
- ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
- if(FAILED(hres))
- return;
-
- hres = IUnknown_QueryInterface(unk, &IID_IActiveScript, (void**)&script);
- ok(hres == S_OK, "Could not get IActiveScript: %08x\n", hres);
+ script = create_jscript();
- hres = IUnknown_QueryInterface(unk, &IID_IActiveScriptParse, (void**)&parse);
+ hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
- if (FAILED(hres))
- {
- IActiveScript_Release(script);
- return;
- }
test_state(script, SCRIPTSTATE_UNINITIALIZED);
@@ -516,9 +505,103 @@ static void test_jscript2(void)
test_no_script_dispatch(script);
IUnknown_Release(parse);
- IActiveScript_Release(script);
- ref = IUnknown_Release(unk);
+ ref = IActiveScript_Release(script);
+ ok(!ref, "ref = %d\n", ref);
+}
+
+static void test_jscript_uninitializing(void)
+{
+ IActiveScriptParse *parse;
+ IActiveScript *script;
+ IDispatchEx *dispex;
+ ULONG ref;
+ HRESULT hres;
+
+ static const WCHAR script_textW[] =
+ {'f','u','n','c','t','i','o','n',' ','f','(',')',' ','{','}',0};
+
+ script = create_jscript();
+
+ hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
+ ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
+
+ test_state(script, SCRIPTSTATE_UNINITIALIZED);
+
+ hres = IActiveScriptParse64_InitNew(parse);
+ ok(hres == S_OK, "InitNew failed: %08x\n", hres);
+
+ SET_EXPECT(GetLCID);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
+ ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
+ CHECK_CALLED(GetLCID);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+
+ test_state(script, SCRIPTSTATE_INITIALIZED);
+
+ hres = IActiveScriptParse64_ParseScriptText(parse, script_textW, NULL, NULL, NULL, 0, 1, 0x42, NULL, NULL);
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
+ ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres);
+
+ SET_EXPECT(OnStateChange_UNINITIALIZED);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_UNINITIALIZED);
+
+ test_state(script, SCRIPTSTATE_UNINITIALIZED);
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
+
+ SET_EXPECT(GetLCID);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
+ ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
+ CHECK_CALLED(GetLCID);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+
+ SET_EXPECT(OnStateChange_CONNECTED);
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_CONNECTED);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+
+ test_state(script, SCRIPTSTATE_CONNECTED);
+
+ dispex = get_script_dispatch(script);
+ ok(dispex != NULL, "dispex == NULL\n");
+ IDispatchEx_Release(dispex);
+
+ SET_EXPECT(OnStateChange_DISCONNECTED);
+ SET_EXPECT(OnStateChange_INITIALIZED);
+ SET_EXPECT(OnStateChange_UNINITIALIZED);
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
+ CHECK_CALLED(OnStateChange_DISCONNECTED);
+ CHECK_CALLED(OnStateChange_INITIALIZED);
+ CHECK_CALLED(OnStateChange_UNINITIALIZED);
+
+ test_state(script, SCRIPTSTATE_UNINITIALIZED);
+
+ hres = IActiveScript_Close(script);
+ ok(hres == S_OK, "Close failed: %08x\n", hres);
+
+ test_state(script, SCRIPTSTATE_CLOSED);
+
+ hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
+ ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x, expected E_UNEXPECTED\n", hres);
+
+ test_state(script, SCRIPTSTATE_CLOSED);
+
+ IUnknown_Release(parse);
+
+ ref = IActiveScript_Release(script);
ok(!ref, "ref = %d\n", ref);
}
@@ -542,6 +625,7 @@ START_TEST(jscript)
if(check_jscript()) {
test_jscript();
test_jscript2();
+ test_jscript_uninitializing();
}else {
win_skip("Broken engine, probably too old\n");
}
More information about the wine-cvs
mailing list