Commit 2986f94c authored by cira@chromium.org's avatar cira@chromium.org

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
parent 4b6d0e33
...@@ -1367,7 +1367,7 @@ function toLDMLString(options) { ...@@ -1367,7 +1367,7 @@ function toLDMLString(options) {
ldmlString += appendToLDMLString(option, {'2-digit': 'ss', 'numeric': 's'}); ldmlString += appendToLDMLString(option, {'2-digit': 'ss', 'numeric': 's'});
option = getOption('timeZoneName', 'string', ['short', 'long']); option = getOption('timeZoneName', 'string', ['short', 'long']);
ldmlString += appendToLDMLString(option, {short: 'v', long: 'vv'}); ldmlString += appendToLDMLString(option, {short: 'z', long: 'zzzz'});
return ldmlString; return ldmlString;
} }
...@@ -1440,9 +1440,9 @@ function fromLDMLString(ldmlString) { ...@@ -1440,9 +1440,9 @@ function fromLDMLString(ldmlString) {
options = appendToDateTimeObject( options = appendToDateTimeObject(
options, 'second', match, {s: 'numeric', ss: '2-digit'}); options, 'second', match, {s: 'numeric', ss: '2-digit'});
match = ldmlString.match(/v{1,2}/g); match = ldmlString.match(/z|zzzz/g);
options = appendToDateTimeObject( options = appendToDateTimeObject(
options, 'timeZoneName', match, {v: 'short', vv: 'long'}); options, 'timeZoneName', match, {z: 'short', zzzz: 'long'});
return options; return options;
} }
......
...@@ -30,19 +30,22 @@ ...@@ -30,19 +30,22 @@
var dtf = new Intl.DateTimeFormat(['en'], var dtf = new Intl.DateTimeFormat(['en'],
{year: 'numeric', month: 'short', {year: 'numeric', month: 'short',
day: 'numeric'}); day: 'numeric',
timeZone: 'America/Los_Angeles'});
// Make sure we have pattern we expect (may change in the future). // Make sure we have pattern we expect (may change in the future).
assertEquals('MMM d, y', dtf.resolved.pattern); assertEquals('MMM d, y', dtf.resolved.pattern);
assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', var date = dtf.v8Parse('Feb 4, 1974');
usePDT(String(dtf.v8Parse('May 4, 1974')))); assertEquals(1974, date.getFullYear());
assertEquals(1, date.getMonth());
assertEquals(4, date.getDate());
// Missing , in the pattern. // 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. // Extra "th" after 4 in the pattern.
assertEquals(undefined, dtf.v8Parse('May 4th, 1974')); assertEquals(undefined, dtf.v8Parse('Feb 4th, 1974'));
// Wrong pattern. // Wrong pattern.
assertEquals(undefined, dtf.v8Parse('5/4/1974')); assertEquals(undefined, dtf.v8Parse('2/4/1974'));
...@@ -27,23 +27,25 @@ ...@@ -27,23 +27,25 @@
// Testing v8Parse method for date only. // 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). // Make sure we have pattern we expect (may change in the future).
assertEquals('M/d/y', dtf.resolved.pattern); assertEquals('M/d/y', dtf.resolved.pattern);
assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', checkDate(dtf.v8Parse('2/4/74'));
usePDT(String(dtf.v8Parse('5/4/74')))); checkDate(dtf.v8Parse('02/04/74'));
assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', checkDate(dtf.v8Parse('2/04/74'));
usePDT(String(dtf.v8Parse('05/04/74')))); checkDate(dtf.v8Parse('02/4/74'));
assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', checkDate(dtf.v8Parse('2/4/1974'));
usePDT(String(dtf.v8Parse('5/04/74')))); checkDate(dtf.v8Parse('02/4/1974'));
assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', checkDate(dtf.v8Parse('2/04/1974'));
usePDT(String(dtf.v8Parse('5/4/1974')))); checkDate(dtf.v8Parse('02/04/1974'));
// Month is numeric, so it fails on "May".
assertEquals(undefined, dtf.v8Parse('May 4th 1974'));
// Time is ignored from the input, since the pattern doesn't have it. // Month is numeric, so it fails on "Feb".
assertEquals('Sat May 04 1974 00:00:00 GMT-0007 (PDT)', assertEquals(undefined, dtf.v8Parse('Feb 4th 1974'));
usePDT(String(dtf.v8Parse('5/4/74 12:30:12'))));
...@@ -30,22 +30,28 @@ ...@@ -30,22 +30,28 @@
var dtf = new Intl.DateTimeFormat(['en'], var dtf = new Intl.DateTimeFormat(['en'],
{year: 'numeric', month: 'numeric', {year: 'numeric', month: 'numeric',
day: 'numeric', hour: '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). // Make sure we have pattern we expect (may change in the future).
assertEquals('M/d/y h:mm:ss a', dtf.resolved.pattern); assertEquals('M/d/y h:mm:ss a', dtf.resolved.pattern);
assertEquals('Sat May 04 1974 12:30:12 GMT-0007 (PDT)', var date = dtf.v8Parse('2/4/74 12:30:42 pm');
usePDT(String(dtf.v8Parse('5/4/74 12:30:12 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. // 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. // 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". // Month is numeric, so it fails on "Feb".
assertEquals(undefined, dtf.v8Parse('May 4th 1974')); assertEquals(undefined, dtf.v8Parse('Feb 4th 1974'));
// Wrong date delimiter. // 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'));
...@@ -25,12 +25,29 @@ ...@@ -25,12 +25,29 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Utility methods for date testing. // Tests time zone names.
/** // Winter date (PST).
* Returns date with timezone info forced into PDT. var winter = new Date(2013, 1, 12, 14, 42, 53, 0);
*/
function usePDT(dateString) { // Summer date (PDT).
var removedTZ = dateString.replace(/(\+|-)\d{4}/, '-0007'); var summer = new Date(2013, 7, 12, 14, 42, 53, 0);
return removedTZ.replace(/\(.*?\)/, '(PDT)');
} // 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);
...@@ -57,7 +57,6 @@ class IntlTestSuite(testsuite.TestSuite): ...@@ -57,7 +57,6 @@ class IntlTestSuite(testsuite.TestSuite):
files = [] files = []
files.append(os.path.join(self.root, "assert.js")) 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, "utils.js"))
files.append(os.path.join(self.root, "date-format", "utils.js"))
files.append(os.path.join(self.root, testcase.path + self.suffix())) files.append(os.path.join(self.root, testcase.path + self.suffix()))
flags += files flags += files
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment