Nikolay Sivov : vbscript: Implement DateSerial().
Alexandre Julliard
julliard at winehq.org
Mon May 16 15:37:58 CDT 2022
Module: wine
Branch: master
Commit: bae687ec6bbcd5bee5ac753cb4a3fb7f15406233
URL: https://source.winehq.org/git/wine.git/?a=commit;h=bae687ec6bbcd5bee5ac753cb4a3fb7f15406233
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun May 15 16:56:51 2022 +0300
vbscript: Implement DateSerial().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/vbscript/global.c | 31 ++++++++++++++++++++++++++++---
dlls/vbscript/tests/api.vbs | 30 ++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c
index ab06db87624..18da8e4991f 100644
--- a/dlls/vbscript/global.c
+++ b/dlls/vbscript/global.c
@@ -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)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 20798a0aacd..3bc64d74193 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -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()
More information about the wine-cvs
mailing list