diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index c6d789e37f7..391f3706cce 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -1069,8 +1069,34 @@ static HRESULT String_sup(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS static HRESULT String_toLowerCase(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + StringInstance *string; + const WCHAR* str; + DWORD length; + BSTR bstr; + + TRACE("\n"); + + if(is_class(dispex, JSCLASS_STRING)) { + string = (StringInstance*)dispex; + + length = string->length; + str = string->str; + }else { + FIXME("not string this not supported\n"); + return E_NOTIMPL; + } + + if(retv) { + bstr = SysAllocStringLen(str, length); + if (!bstr) + return E_OUTOFMEMORY; + + strlwrW(bstr); + + V_VT(retv) = VT_BSTR; + V_BSTR(retv) = bstr; + } + return S_OK; } static HRESULT String_toUpperCase(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 6378bdd86ec..fc913eb1089 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -247,6 +247,17 @@ ok(tmp === 1, "indexOf = " + tmp); tmp = "abcd".indexOf(); ok(tmp == -1, "indexOf = " + tmp); +tmp = "".toLowerCase(); +ok(tmp === "", "''.toLowerCase() = " + tmp); +tmp = "test".toLowerCase(); +ok(tmp === "test", "''.toLowerCase() = " + tmp); +tmp = "test".toLowerCase(3); +ok(tmp === "test", "''.toLowerCase(3) = " + tmp); +tmp = "tEsT".toLowerCase(); +ok(tmp === "test", "''.toLowerCase() = " + tmp); +tmp = "tEsT".toLowerCase(3); +ok(tmp === "test", "''.toLowerCase(3) = " + tmp); + var arr = new Array(); ok(typeof(arr) === "object", "arr () is not object"); ok((arr.length === 0), "arr.length is not 0");