blob: daed8c3116dff3e2f86a5b8c815a08b0d2c8e4ba [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Tests for the strict option when parsing dates and times, which are
/// relatively locale-independent, depending only on the being a valid date
/// and consuming all the input data.
library date_time_strict_test;
import 'package:intl/intl.dart';
import 'package:test/test.dart';
void main() {
test('All input consumed', () {
var format = DateFormat.yMMMd();
var date = DateTime(2014, 9, 3);
var formatted = 'Sep 3, 2014';
expect(format.format(date), formatted);
var parsed = format.parseStrict(formatted);
expect(parsed, date);
void check(String s) {
expect(() => format.parseStrict(s), throwsFormatException);
expect(format.parse(s), date);
}
check('$formatted,');
check('${formatted}abc');
check('$formatted ');
});
test('Invalid dates', () {
var format = DateFormat.yMd();
void check(s) => expect(() => format.parseStrict(s), throwsFormatException);
check('0/3/2014');
check('13/3/2014');
check('9/0/2014');
check('9/31/2014');
check('09/31/2014');
check('10/32/2014');
check('2/29/2014');
check('1/32/2014');
expect(format.parseStrict('2/29/2016'), DateTime(2016, 2, 29));
});
test('Valid ordinal date is not rejected', () {
var dayOfYearFormat = DateFormat('MM/DD/yyyy');
expect(dayOfYearFormat.parseStrict('1/32/2014'), DateTime(2014, 2, 1));
});
test('Invalid times am/pm', () {
var format = DateFormat.jms();
void check(s) => expect(() => format.parseStrict(s), throwsFormatException);
check('-1:15:00 AM');
expect(format.parseStrict('0:15:00 AM'), DateTime(1970, 1, 1, 0, 15));
check('24:00:00 PM');
check('24:00:00 AM');
check('25:00:00 PM');
check('0:-1:00 AM');
check('0:60:00 AM');
expect(format.parseStrict('0:59:00 AM'), DateTime(1970, 1, 1, 0, 59));
check('0:0:-1 AM');
check('0:0:60 AM');
check('2:0:60 PM');
expect(format.parseStrict('2:0:59 PM'), DateTime(1970, 1, 1, 14, 0, 59));
});
test('Invalid times 24 hour', () {
var format = DateFormat.Hms();
check(s) => expect(() => format.parseStrict(s), throwsFormatException);
check('-1:15:00');
expect(format.parseStrict('0:15:00'), DateTime(1970, 1, 1, 0, 15));
check('24:00:00');
check('24:00:00');
check('25:00:00');
check('0:-1:00');
check('0:60:00');
expect(format.parseStrict('0:59:00'), DateTime(1970, 1, 1, 0, 59));
check('0:0:-1');
check('0:0:60');
check('14:0:60');
expect(format.parseStrict('14:0:59'), DateTime(1970, 1, 1, 14, 0, 59));
});
}