From 2986f94c141a6acd7e2f2135ff8ae3a2992322a8 Mon Sep 17 00:00:00 2001 From: "cira@chromium.org" Date: Thu, 10 Oct 2013 17:54:33 +0000 Subject: [PATCH] Fixing timezone issues with date-time/parse-* tests. BUG=2919 TEST=All tests passing when local timezone was set to EST. R=mnita@google.com, titzer@chromium.org Review URL: https://codereview.chromium.org/25855005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17148 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/i18n.js | 6 ++-- test/intl/date-format/parse-MMMdy.js | 15 ++++++---- test/intl/date-format/parse-mdy.js | 32 ++++++++++---------- test/intl/date-format/parse-mdyhms.js | 22 +++++++++----- .../date-format/{utils.js => timezone-name.js} | 35 ++++++++++++++++------ test/intl/testcfg.py | 1 - 6 files changed, 69 insertions(+), 42 deletions(-) rename test/intl/date-format/{utils.js => timezone-name.js} (66%) diff --git a/src/i18n.js b/src/i18n.js index a80fd4d..aac440e 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -1367,7 +1367,7 @@ function toLDMLString(options) { ldmlString += appendToLDMLString(option, {'2-digit': 'ss', 'numeric': 's'}); option = getOption('timeZoneName', 'string', ['short', 'long']); - ldmlString += appendToLDMLString(option, {short: 'v', long: 'vv'}); + ldmlString += appendToLDMLString(option, {short: 'z', long: 'zzzz'}); return ldmlString; } @@ -1440,9 +1440,9 @@ function fromLDMLString(ldmlString) { options = appendToDateTimeObject( options, 'second', match, {s: 'numeric', ss: '2-digit'}); - match = ldmlString.match(/v{1,2}/g); + match = ldmlString.match(/z|zzzz/g); options = appendToDateTimeObject( - options, 'timeZoneName', match, {v: 'short', vv: 'long'}); + options, 'timeZoneName', match, {z: 'short', zzzz: 'long'}); return options; } diff --git a/test/intl/date-format/parse-MMMdy.js b/test/intl/date-format/parse-MMMdy.js index 7136527..73ee586 100644 --- a/test/intl/date-format/parse-MMMdy.js +++ b/test/intl/date-format/parse-MMMdy.js @@ -30,19 +30,22 @@ var dtf = new Intl.DateTimeFormat(['en'], {year: 'numeric', month: 'short', - day: 'numeric'}); + day: 'numeric', + timeZone: 'America/Los_Angeles'}); // Make sure we have pattern we expect (may change in the future). assertEquals('MMM d, y', dtf.resolved.pattern); -assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('May 4, 1974')))); +var date = dtf.v8Parse('Feb 4, 1974'); +assertEquals(1974, date.getFullYear()); +assertEquals(1, date.getMonth()); +assertEquals(4, date.getDate()); // Missing , in the pattern. -assertEquals(undefined, dtf.v8Parse('May 4 1974')); +assertEquals(undefined, dtf.v8Parse('Feb 4 1974')); // Extra "th" after 4 in the pattern. -assertEquals(undefined, dtf.v8Parse('May 4th, 1974')); +assertEquals(undefined, dtf.v8Parse('Feb 4th, 1974')); // Wrong pattern. -assertEquals(undefined, dtf.v8Parse('5/4/1974')); +assertEquals(undefined, dtf.v8Parse('2/4/1974')); diff --git a/test/intl/date-format/parse-mdy.js b/test/intl/date-format/parse-mdy.js index e767a0b..788a7bb 100644 --- a/test/intl/date-format/parse-mdy.js +++ b/test/intl/date-format/parse-mdy.js @@ -27,23 +27,25 @@ // Testing v8Parse method for date only. -var dtf = new Intl.DateTimeFormat(['en']); +function checkDate(date) { + assertEquals(1974, date.getFullYear()); + assertEquals(1, date.getMonth()); + assertEquals(4, date.getDate()); +} + +var dtf = new Intl.DateTimeFormat(['en'], {timeZone: 'America/Los_Angeles'}); // Make sure we have pattern we expect (may change in the future). assertEquals('M/d/y', dtf.resolved.pattern); -assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('5/4/74')))); -assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('05/04/74')))); -assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('5/04/74')))); -assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('5/4/1974')))); - -// Month is numeric, so it fails on "May". -assertEquals(undefined, dtf.v8Parse('May 4th 1974')); +checkDate(dtf.v8Parse('2/4/74')); +checkDate(dtf.v8Parse('02/04/74')); +checkDate(dtf.v8Parse('2/04/74')); +checkDate(dtf.v8Parse('02/4/74')); +checkDate(dtf.v8Parse('2/4/1974')); +checkDate(dtf.v8Parse('02/4/1974')); +checkDate(dtf.v8Parse('2/04/1974')); +checkDate(dtf.v8Parse('02/04/1974')); -// Time is ignored from the input, since the pattern doesn't have it. -assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('5/4/74 12:30:12')))); +// Month is numeric, so it fails on "Feb". +assertEquals(undefined, dtf.v8Parse('Feb 4th 1974')); diff --git a/test/intl/date-format/parse-mdyhms.js b/test/intl/date-format/parse-mdyhms.js index 74f7467..73efb62 100644 --- a/test/intl/date-format/parse-mdyhms.js +++ b/test/intl/date-format/parse-mdyhms.js @@ -30,22 +30,28 @@ var dtf = new Intl.DateTimeFormat(['en'], {year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', - minute: 'numeric', second: 'numeric'}); + minute: 'numeric', second: 'numeric', + timeZone: 'UTC'}); // Make sure we have pattern we expect (may change in the future). assertEquals('M/d/y h:mm:ss a', dtf.resolved.pattern); -assertEquals('Sat May 04 1974 12:30:12 GMT-0007 (PDT)', - usePDT(String(dtf.v8Parse('5/4/74 12:30:12 pm')))); +var date = dtf.v8Parse('2/4/74 12:30:42 pm'); +assertEquals(1974, date.getUTCFullYear()); +assertEquals(1, date.getUTCMonth()); +assertEquals(4, date.getUTCDate()); +assertEquals(12, date.getUTCHours()); +assertEquals(30, date.getUTCMinutes()); +assertEquals(42, date.getUTCSeconds()); // AM/PM were not specified. -assertEquals(undefined, dtf.v8Parse('5/4/74 12:30:12')); +assertEquals(undefined, dtf.v8Parse('2/4/74 12:30:12')); // Time was not specified. -assertEquals(undefined, dtf.v8Parse('5/4/74')); +assertEquals(undefined, dtf.v8Parse('2/4/74')); -// Month is numeric, so it fails on "May". -assertEquals(undefined, dtf.v8Parse('May 4th 1974')); +// Month is numeric, so it fails on "Feb". +assertEquals(undefined, dtf.v8Parse('Feb 4th 1974')); // Wrong date delimiter. -assertEquals(undefined, dtf.v8Parse('5-4-74 12:30:12 am')); +assertEquals(undefined, dtf.v8Parse('2-4-74 12:30:12 am')); diff --git a/test/intl/date-format/utils.js b/test/intl/date-format/timezone-name.js similarity index 66% rename from test/intl/date-format/utils.js rename to test/intl/date-format/timezone-name.js index 535de15..2ed5c1a 100644 --- a/test/intl/date-format/utils.js +++ b/test/intl/date-format/timezone-name.js @@ -25,12 +25,29 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Utility methods for date testing. - -/** - * Returns date with timezone info forced into PDT. - */ -function usePDT(dateString) { - var removedTZ = dateString.replace(/(\+|-)\d{4}/, '-0007'); - return removedTZ.replace(/\(.*?\)/, '(PDT)'); -} +// Tests time zone names. + +// Winter date (PST). +var winter = new Date(2013, 1, 12, 14, 42, 53, 0); + +// Summer date (PDT). +var summer = new Date(2013, 7, 12, 14, 42, 53, 0); + +// Common flags for both formatters. +var flags = { + year: 'numeric', month: 'long', day: 'numeric', + hour : '2-digit', minute : '2-digit', second : '2-digit', + timeZone: 'America/Los_Angeles' +}; + +flags.timeZoneName = "short"; +var dfs = new Intl.DateTimeFormat('en-US', flags); + +assertTrue(dfs.format(winter).indexOf('PST') !== -1); +assertTrue(dfs.format(summer).indexOf('PDT') !== -1); + +flags.timeZoneName = "long"; +var dfl = new Intl.DateTimeFormat('en-US', flags); + +assertTrue(dfl.format(winter).indexOf('Pacific Standard Time') !== -1); +assertTrue(dfl.format(summer).indexOf('Pacific Daylight Time') !== -1); diff --git a/test/intl/testcfg.py b/test/intl/testcfg.py index 09d29d0..9fc087e 100644 --- a/test/intl/testcfg.py +++ b/test/intl/testcfg.py @@ -57,7 +57,6 @@ class IntlTestSuite(testsuite.TestSuite): files = [] files.append(os.path.join(self.root, "assert.js")) files.append(os.path.join(self.root, "utils.js")) - files.append(os.path.join(self.root, "date-format", "utils.js")) files.append(os.path.join(self.root, testcase.path + self.suffix())) flags += files -- 2.7.4