Module: wine Branch: master Commit: 74257d59405898730eac3dffbdd9f7c4ec3b2935 URL: http://source.winehq.org/git/wine.git/?a=commit;h=74257d59405898730eac3dffbd...
Author: Markus Heidelberg markus.heidelberg@web.de Date: Sat May 21 12:41:40 2016 +0200
jscript: Date.parse: make "UTC"/"GMT" optional before the timezone offset.
Signed-off-by: Markus Heidelberg markus.heidelberg@web.de Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/jscript/date.c | 38 ++++++++++++++++++++++---------------- dlls/jscript/tests/api.js | 4 ++++ 2 files changed, 26 insertions(+), 16 deletions(-)
diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c index 6d98fcd..a80690c 100644 --- a/dlls/jscript/date.c +++ b/dlls/jscript/date.c @@ -2174,6 +2174,28 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) { year = tmp; } } + else if(parse[i]=='+' || parse[i]=='-') { + /* Timezone offset */ + BOOL positive = TRUE; + + if(set_offset && set_hour_adjust) break; + set_offset = TRUE; + set_hour_adjust = FALSE; + + if(parse[i] == '-') positive = FALSE; + + i++; + while(isspaceW(parse[i])) i++; + if(parse[i]<'0' || parse[i]>'9') break; + offset = atoiW(&parse[i]); + while(parse[i]>='0' && parse[i]<='9') i++; + + if(offset<24) offset *= 60; + else offset = (offset/100)*60 + offset%100; + + if(positive) offset = -offset; + + } else { if(parse[i]<'A' || parse[i]>'Z') break; else if(parse[i]=='B' && (parse[i+1]=='C' || @@ -2230,27 +2252,11 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) { else if((parse[i]=='U' && parse[i+1]=='T' && parse[i+2]=='C') || (parse[i]=='G' && parse[i+1]=='M' && parse[i+2]=='T')) { /* Timezone */ - BOOL positive = TRUE; - if(set_offset) break; set_offset = TRUE; set_hour_adjust = FALSE;
i += 3; - while(isspaceW(parse[i])) i++; - if(parse[i] == '-') positive = FALSE; - else if(parse[i] != '+') continue; - - i++; - while(isspaceW(parse[i])) i++; - if(parse[i]<'0' || parse[i]>'9') break; - offset = atoiW(&parse[i]); - while(parse[i]>='0' && parse[i]<='9') i++; - - if(offset<24) offset *= 60; - else offset = (offset/100)*60 + offset%100; - - if(positive) offset = -offset; } else { /* Month or garbage */ diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index dacacc4..e5e6350 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -2108,6 +2108,10 @@ ok(Date.parse("71 11:32AM Dec 12 UTC BC ") === -64346358480000, "Date.parse("71 ok(Date.parse("23/71/2000 11::32::UTC") === 1010662320000, "Date.parse("23/71/2000 11::32::UTC") = " + Date.parse("23/71/2000 11::32::UTC")); ok(Date.parse("1970/01/01") === Date.parse("01/01/1970"), "Date.parse("1970/01/01") = " + Date.parse("1970/01/01")); ok(Date.parse("71/12/14") === Date.parse("12/14/1971"), "Date.parse("71/12/14") = " + Date.parse("71/12/14")); +ok(Date.parse("Tue, 22 Mar 2016 09:57:55 -0300") === Date.parse("Tue, 22 Mar 2016 09:57:55 GMT-0300"), + "Date.parse("Tue, 22 Mar 2016 09:57:55 -0300") = " + Date.parse("Tue, 22 Mar 2016 09:57:55 -0300")); +ok(Date.parse("Tue, 22 Mar 2016 09:57:55 +0400") === Date.parse("Tue, 22 Mar 2016 09:57:55 UTC+0400"), + "Date.parse("Tue, 22 Mar 2016 09:57:55 +0400") = " + Date.parse("Tue, 22 Mar 2016 09:57:55 +0400"));
ok(typeof(Math.PI) === "number", "typeof(Math.PI) = " + typeof(Math.PI)); ok(Math.floor(Math.PI*100) === 314, "Math.PI = " + Math.PI);