jscript: Add String.prototype.toLocaleUpperCase and toLocaleLowerCase implementation.
They are supposed to be locale-specific, but my testing shows that it's not the case in native. Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6c9c77fdf1
commit
07cebfc928
|
@ -1363,45 +1363,11 @@ static HRESULT String_sup(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsign
|
|||
return do_attributeless_tag_format(ctx, jsthis, r, L"SUP");
|
||||
}
|
||||
|
||||
static HRESULT String_toLowerCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||
jsval_t *r)
|
||||
{
|
||||
jsstr_t *str;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("\n");
|
||||
|
||||
hres = get_string_val(ctx, jsthis, &str);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
|
||||
if(r) {
|
||||
unsigned len = jsstr_length(str);
|
||||
jsstr_t *ret;
|
||||
WCHAR *buf;
|
||||
|
||||
ret = jsstr_alloc_buf(len, &buf);
|
||||
if(!ret) {
|
||||
jsstr_release(str);
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
jsstr_flush(str, buf);
|
||||
for (; len--; buf++) *buf = towlower(*buf);
|
||||
|
||||
*r = jsval_string(ret);
|
||||
}
|
||||
jsstr_release(str);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT String_toUpperCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||
jsval_t *r)
|
||||
static HRESULT to_upper_case(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r)
|
||||
{
|
||||
jsstr_t *str;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("\n");
|
||||
|
||||
hres = get_string_val(ctx, jsthis, &str);
|
||||
if(FAILED(hres))
|
||||
|
@ -1427,18 +1393,62 @@ static HRESULT String_toUpperCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT to_lower_case(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r)
|
||||
{
|
||||
jsstr_t *str;
|
||||
HRESULT hres;
|
||||
|
||||
|
||||
hres = get_string_val(ctx, jsthis, &str);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
|
||||
if(r) {
|
||||
unsigned len = jsstr_length(str);
|
||||
jsstr_t *ret;
|
||||
WCHAR *buf;
|
||||
|
||||
ret = jsstr_alloc_buf(len, &buf);
|
||||
if(!ret) {
|
||||
jsstr_release(str);
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
jsstr_flush(str, buf);
|
||||
for (; len--; buf++) *buf = towlower(*buf);
|
||||
|
||||
*r = jsval_string(ret);
|
||||
}
|
||||
jsstr_release(str);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT String_toLowerCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||
jsval_t *r)
|
||||
{
|
||||
TRACE("\n");
|
||||
return to_lower_case(ctx, jsthis, r);
|
||||
}
|
||||
|
||||
static HRESULT String_toUpperCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||
jsval_t *r)
|
||||
{
|
||||
TRACE("\n");
|
||||
return to_upper_case(ctx, jsthis, r);
|
||||
}
|
||||
|
||||
static HRESULT String_toLocaleLowerCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||
jsval_t *r)
|
||||
{
|
||||
FIXME("\n");
|
||||
return E_NOTIMPL;
|
||||
TRACE("\n");
|
||||
return to_lower_case(ctx, jsthis, r);
|
||||
}
|
||||
|
||||
static HRESULT String_toLocaleUpperCase(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||
jsval_t *r)
|
||||
{
|
||||
FIXME("\n");
|
||||
return E_NOTIMPL;
|
||||
TRACE("\n");
|
||||
return to_upper_case(ctx, jsthis, r);
|
||||
}
|
||||
|
||||
static HRESULT String_trim(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc,
|
||||
|
|
|
@ -753,10 +753,14 @@ tmp = "test".toLowerCase(3);
|
|||
ok(tmp === "test", "''.toLowerCase(3) = " + tmp);
|
||||
tmp = "tEsT".toLowerCase();
|
||||
ok(tmp === "test", "''.toLowerCase() = " + tmp);
|
||||
tmp = "tEsT".toLocaleLowerCase();
|
||||
ok(tmp === "test", "''.toLocaleLowerCase() = " + tmp);
|
||||
tmp = "tEsT".toLowerCase(3);
|
||||
ok(tmp === "test", "''.toLowerCase(3) = " + tmp);
|
||||
tmp = ("tE" + String.fromCharCode(0) + "sT").toLowerCase();
|
||||
ok(tmp === "te" + String.fromCharCode(0) + "st", "''.toLowerCase() = " + tmp);
|
||||
ok(String.prototype.toLocaleLowerCase != String.prototype.toLowerCase,
|
||||
"String.prototype.toLocaleLowerCase == String.prototype.toLowerCase");
|
||||
|
||||
tmp = "".toUpperCase();
|
||||
ok(tmp === "", "''.toUpperCase() = " + tmp);
|
||||
|
@ -768,8 +772,12 @@ tmp = "tEsT".toUpperCase();
|
|||
ok(tmp === "TEST", "''.toUpperCase() = " + tmp);
|
||||
tmp = "tEsT".toUpperCase(3);
|
||||
ok(tmp === "TEST", "''.toUpperCase(3) = " + tmp);
|
||||
tmp = "tEsT".toLocaleUpperCase(3);
|
||||
ok(tmp === "TEST", "''.toLocaleUpperCase(3) = " + tmp);
|
||||
tmp = ("tE" + String.fromCharCode(0) + "sT").toUpperCase();
|
||||
ok(tmp === "TE" + String.fromCharCode(0) + "ST", "''.toUpperCase() = " + tmp);
|
||||
ok(String.prototype.toLocaleUpperCase != String.prototype.toUpperCase,
|
||||
"String.prototype.toLocaleUpperCase == String.prototype.toUpperCase");
|
||||
|
||||
tmp = "".anchor();
|
||||
ok(tmp === "<A NAME=\"undefined\"></A>", "''.anchor() = " + tmp);
|
||||
|
|
Loading…
Reference in New Issue