Jacek Caban : jscript: Added Date.setYear implementation.
Alexandre Julliard
julliard at winehq.org
Mon Dec 20 17:49:51 CST 2010
Module: wine
Branch: master
Commit: f2319fcd85a18f22f49914c2059843bfda1199b9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f2319fcd85a18f22f49914c2059843bfda1199b9
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Dec 20 12:21:42 2010 +0100
jscript: Added Date.setYear implementation.
---
dlls/jscript/date.c | 38 ++++++++++++++++++++++++++++++++++++--
dlls/jscript/tests/api.js | 28 ++++++++++++++++++++++++++++
2 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c
index 3be8a36..e9542f8 100644
--- a/dlls/jscript/date.c
+++ b/dlls/jscript/date.c
@@ -2028,8 +2028,42 @@ static HRESULT Date_getYear(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP
static HRESULT Date_setYear(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
{
- FIXME("\n");
- return E_NOTIMPL;
+ DateInstance *date;
+ DOUBLE t, year;
+ VARIANT v;
+ HRESULT hres;
+
+ TRACE("\n");
+
+ if(!(date = date_this(jsthis)))
+ return throw_type_error(ctx, ei, IDS_NOT_DATE, NULL);
+
+ if(!arg_cnt(dp))
+ return throw_type_error(ctx, ei, IDS_ARG_NOT_OPT, NULL);
+
+ t = local_time(date->time, date);
+
+ hres = to_number(ctx, get_arg(dp, 0), ei, &v);
+ if(FAILED(hres))
+ return hres;
+
+ year = num_val(&v);
+ if(isnan(year)) {
+ date->time = year;
+ if(retv)
+ num_set_nan(retv);
+ return S_OK;
+ }
+
+ year = year >= 0.0 ? floor(year) : -floor(-year);
+ if(-1.0 < year && year < 100.0)
+ year += 1900.0;
+
+ date->time = time_clip(utc(make_date(make_day(year, month_from_time(t), date_from_time(t)), time_within_day(t)), date));
+
+ if(retv)
+ num_set_val(retv, date->time);
+ return S_OK;
}
static HRESULT Date_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPARAMS *dp,
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index f35d11a..081582e 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1597,6 +1597,7 @@ ok(date.getUTCHours() === 0, "date.getUTCHours() = " + date.getUTCHours());
ok(date.getUTCMinutes() === 0, "date.getUTCMinutes() = " + date.getUTCMinutes());
ok(date.getUTCSeconds() === 0, "date.getUTCSeconds() = " + date.getUTCSeconds());
ok(date.getUTCMilliseconds() === 0, "date.getUTCMilliseconds() = " + date.getUTCMilliseconds());
+
date.setTime(60*24*60*60*1000);
ok(date.getUTCFullYear() === 1970, "date.getUTCFullYear() = " + date.getUTCFullYear());
ok(date.getUTCMonth() === 2, "date.getUTCMonth() = " + date.getUTCMonth());
@@ -1606,6 +1607,7 @@ ok(date.getUTCHours() === 0, "date.getUTCHours() = " + date.getUTCHours());
ok(date.getUTCMinutes() === 0, "date.getUTCMinutes() = " + date.getUTCMinutes());
ok(date.getUTCSeconds() === 0, "date.getUTCSeconds() = " + date.getUTCSeconds());
ok(date.getUTCMilliseconds() === 0, "date.getUTCMilliseconds() = " + date.getUTCMilliseconds());
+
date.setTime(59*24*60*60*1000 + 4*365*24*60*60*1000 + 60*60*1000 + 2*60*1000 + 2*1000 + 640);
ok(date.getUTCFullYear() === 1974, "date.getUTCFullYear() = " + date.getUTCFullYear());
ok(date.getUTCMonth() === 1, "date.getUTCMonth() = " + date.getUTCMonth());
@@ -1616,6 +1618,22 @@ ok(date.getUTCHours() === 1, "date.getUTCHours() = " + date.getUTCHours());
ok(date.getUTCMinutes() === 2, "date.getUTCMinutes() = " + date.getUTCMinutes());
ok(date.getUTCSeconds() === 2, "date.getUTCSeconds() = " + date.getUTCSeconds());
ok(date.getUTCMilliseconds() === 640, "date.getUTCMilliseconds() = " + date.getUTCMilliseconds());
+
+tmp = date.setYear(96);
+ok(date.getYear() === 96, "date.getYear() = " + date.getYear());
+ok(date.getFullYear() === 1996, "date.getFullYear() = " + date.getYear());
+ok(date.getUTCMonth() === 1, "date.getUTCMonth() = " + date.getUTCMonth());
+ok(date.getUTCMonth(123) === 1, "date.getUTCMonth() = " + date.getUTCMonth());
+ok(date.getUTCMilliseconds() === 640, "date.getUTCMilliseconds() = " + date.getUTCMilliseconds());
+
+tmp = date.setYear(2010);
+ok(tmp === date.getTime(), "date.setYear(2010) = " + tmp);
+ok(date.getYear() === 2010, "date.getYear() = " + date.getYear());
+ok(date.getFullYear() === 2010, "date.getFullYear() = " + date.getYear());
+ok(date.getUTCMonth() === 1, "date.getUTCMonth() = " + date.getUTCMonth());
+ok(date.getUTCMonth(123) === 1, "date.getUTCMonth() = " + date.getUTCMonth());
+ok(date.getUTCMilliseconds() === 640, "date.getUTCMilliseconds() = " + date.getUTCMilliseconds());
+
date.setTime(Infinity);
ok(isNaN(date.getUTCFullYear()), "date.getUTCFullYear() is not NaN");
ok(isNaN(date.getUTCMonth()), "date.getUTCMonth() is not NaN");
@@ -1628,6 +1646,12 @@ ok(isNaN(date.getUTCMilliseconds()), "date.getUTCMilliseconds() is not NaN");
ok(isNaN(date.setMilliseconds(0)), "date.setMilliseconds() is not NaN");
date.setTime(0);
+tmp = date.setYear(NaN);
+ok(isNaN(tmp), "date.setYear(NaN) = " + tmp);
+ok(isNaN(date.getUTCFullYear()), "date.getUTCFullYear() is not NaN");
+ok(isNaN(date.getUTCMonth()), "date.getUTCMonth() is not NaN");
+
+date.setTime(0);
date.setUTCMilliseconds(-10, 2);
ok(date.getUTCMilliseconds() === 990, "date.getUTCMilliseconds() = " + date.getUTCMilliseconds());
date.setUTCMilliseconds(10);
@@ -1863,6 +1887,7 @@ exception_test(function() {arr.toString = Date.prototype.toString; arr.toString(
exception_test(function() {Array(-3);}, "RangeError", -2146823259);
exception_test(function() {arr.toString = Boolean.prototype.toString; arr.toString();}, "TypeError", -2146823278);
exception_test(function() {date.setTime();}, "TypeError", -2146827839);
+exception_test(function() {date.setYear();}, "TypeError", -2146827839);
exception_test(function() {arr.test();}, "TypeError", -2146827850);
exception_test(function() {arr.toString = Number.prototype.toString; arr.toString();}, "TypeError", -2146823287);
exception_test(function() {(new Number(3)).toString(1);}, "TypeError", -2146828283);
@@ -1939,6 +1964,7 @@ testDateThis("getUTCMilliseconds");
testDateThis("getUTCMinutes");
testDateThis("getUTCMonth");
testDateThis("getUTCSeconds");
+testDateThis("getYear");
testDateThis("setDate");
testDateThis("setFullYear");
testDateThis("setHours");
@@ -1954,6 +1980,7 @@ testDateThis("setUTCMilliseconds");
testDateThis("setUTCMinutes");
testDateThis("setUTCMonth");
testDateThis("setUTCSeconds");
+testDateThis("setYear");
testDateThis("toDateString");
testDateThis("toLocaleDateString");
testDateThis("toLocaleString");
@@ -2121,6 +2148,7 @@ testFunctions(Date.prototype, [
["getUTCMinutes", 0],
["getUTCMonth", 0],
["getUTCSeconds", 0],
+ ["getYear", 0],
["setDate", 1],
["setFullYear", 3],
["setHours", 4],
More information about the wine-cvs
mailing list