vbscript: Implement FormatNumber().

This commit is contained in:
Nikolay Sivov 2022-11-16 17:25:01 +03:00 committed by Alexandre Julliard
parent b0915dfb57
commit fffdb2b2b9
2 changed files with 65 additions and 3 deletions

View file

@ -2945,10 +2945,36 @@ static HRESULT Global_ScriptEngineBuildVersion(BuiltinDisp *This, VARIANT *arg,
return return_int(res, VBSCRIPT_BUILD_VERSION);
}
static HRESULT Global_FormatNumber(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
static HRESULT Global_FormatNumber(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res)
{
FIXME("\n");
return E_NOTIMPL;
union
{
struct
{
int num_dig, inc_lead, use_parens, group;
} s;
int val[4];
} int_args = { .s.num_dig = -1, .s.inc_lead = -2, .s.use_parens = -2, .s.group = -2 };
HRESULT hres;
BSTR str;
int i;
TRACE("\n");
assert(1 <= args_cnt && args_cnt <= 5);
for (i = 1; i < args_cnt; ++i)
{
if (V_VT(args+i) == VT_ERROR) continue;
if (V_VT(args+i) == VT_NULL) return MAKE_VBSERROR(VBSE_ILLEGAL_NULL_USE);
if (FAILED(hres = to_int(args+i, &int_args.val[i-1]))) return hres;
}
hres = VarFormatNumber(args, int_args.s.num_dig, int_args.s.inc_lead, int_args.s.use_parens,
int_args.s.group, 0, &str);
if (FAILED(hres)) return hres;
return return_bstr(res, str);
}
static HRESULT Global_FormatCurrency(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res)

View file

@ -2436,4 +2436,40 @@ end sub
call testFormatDateTime()
call testFormatDateTimeError()
sub testFormatNumberError()
on error resume next
dim x
call Err.clear()
x = FormatNumber(null)
call ok(Err.number = 13, "Err.number = " & Err.number)
call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
call Err.clear()
x = FormatNumber(.10,null)
call ok(Err.number = 94, "Err.number = " & Err.number)
call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
call Err.clear()
x = FormatNumber(.10,0,null)
call ok(Err.number = 94, "Err.number = " & Err.number)
call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
call Err.clear()
x = FormatNumber(.10,0,0,null)
call ok(Err.number = 94, "Err.number = " & Err.number)
call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
call Err.clear()
x = FormatNumber(.10,0,0,0,null)
call ok(Err.number = 94, "Err.number = " & Err.number)
call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
end sub
sub testFormatNumber()
dim x
x = FormatNumber(0)
x = FormatNumber(.12,,,-1)
call ok(getVT(x) = "VT_BSTR*", "getVT = " & getVT(x))
end sub
call testFormatNumber()
call testFormatNumberError()
Call reportSuccess()