vbscript: Implement DateSerial().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2022-05-15 16:56:51 +03:00 committed by Alexandre Julliard
parent 279a6b1e48
commit bae687ec6b
2 changed files with 58 additions and 3 deletions

View File

@ -2044,10 +2044,35 @@ static HRESULT Global_TimeValue(BuiltinDisp *This, VARIANT *arg, unsigned args_c
return E_NOTIMPL;
}
static HRESULT Global_DateSerial(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
static HRESULT Global_DateSerial(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res)
{
FIXME("\n");
return E_NOTIMPL;
int year, month, day;
UDATE ud = {{ 0 }};
HRESULT hres;
double date;
TRACE("\n");
assert(args_cnt == 3);
hres = to_int(args, &year);
if (SUCCEEDED(hres))
hres = to_int(args + 1, &month);
if (SUCCEEDED(hres))
hres = to_int(args + 2, &day);
if (SUCCEEDED(hres))
{
ud.st.wYear = year;
ud.st.wMonth = month;
ud.st.wDay = day;
hres = VarDateFromUdateEx(&ud, 0, 0, &date);
}
if (SUCCEEDED(hres))
hres = return_date(res, date);
return hres;
}
static HRESULT Global_TimeSerial(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)

View File

@ -1958,4 +1958,34 @@ sub testErrRaise()
end sub
call testErrRaise()
sub testDateSerial(yy, mm, dd, yyexp, mmexp, ddexp)
dim x
x = DateSerial(yy, mm, dd)
call ok(Year(x) = yyexp, "year = " & Year(x) & " expected " & yyexp)
call ok(Month(x) = mmexp, "month = " & Month(x) & " expected " & mmexp)
call ok(Day(x) = ddexp, "day = " & Day(x) & " expected " & ddexp)
call ok(Hour(x) = 0, "hour = " & Hour(x))
call ok(Minute(x) = 0, "minute = " & Minute(x))
call ok(Second(x) = 0, "second = " & Second(x))
call ok(getVT(x) = "VT_DATE*", "getVT = " & getVT(x))
end sub
sub testDateSerialError()
on error resume next
call Err.clear()
call DateSerial(10000, 1, 1)
call ok(Err.number = 5, "Err.number = " & Err.number)
call Err.clear()
call DateSerial(-10000, 1, 1)
call ok(Err.number = 5, "Err.number = " & Err.number)
end sub
call testDateSerial(100, 2, 1, 100, 2, 1)
call testDateSerial(0, 2, 1, 2000, 2, 1)
call testDateSerial(50, 2, 1, 1950, 2, 1)
call testDateSerial(99, 2, 1, 1999, 2, 1)
call testDateSerial(2000, 14, 2, 2001, 2, 2)
call testDateSerial(9999, 12, 1, 9999, 12, 1)
call testDateSerialError()
Call reportSuccess()