| // 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 loose option when parsing dates and times, which accept |
| /// mixed-case input and are able to skip missing delimiters. Such valid input |
| /// is only tested in basic US locale, it's hard to define for others. |
| /// Inputs which should fail because they're missing data (currently only the |
| /// year) are tested in more locales. |
| library date_time_loose_test; |
| |
| import 'package:intl/date_symbol_data_local.dart'; |
| import 'package:intl/intl.dart'; |
| import 'package:unittest/unittest.dart'; |
| |
| main() { |
| var format; |
| |
| var date = new DateTime(2014, 9, 3); |
| |
| check(String s) { |
| expect(() => format.parse(s), throwsFormatException); |
| expect(format.parseLoose(s), date); |
| } |
| |
| test("Loose parsing yMMMd", () { |
| // Note: We can't handle e.g. Sept, we don't have those abbreviations |
| // in our data. |
| // Also doesn't handle "sep3,2014", or "sep 3.2014" |
| format = new DateFormat.yMMMd("en_US"); |
| check("Sep 3 2014"); |
| check("sep 3 2014"); |
| check("sep 3 2014"); |
| check("sep 3 2014"); |
| check("sep 3 2014"); |
| check("sep3 2014"); |
| check("september 3, 2014"); |
| check("sEPTembER 3, 2014"); |
| check("seP 3, 2014"); |
| check("Sep 3,2014"); |
| }); |
| |
| test("Loose parsing yMMMd that parses strict", () { |
| expect(format.parseLoose("Sep 3, 2014"), date); |
| }); |
| |
| test("Loose parsing yMd", () { |
| format = new DateFormat.yMd("en_US"); |
| check("09 3 2014"); |
| check("09 00003 2014"); |
| check("09/ 03/2014"); |
| check("09 / 03 / 2014"); |
| }); |
| |
| test("Loose parsing yMd that parses strict", () { |
| expect(format.parseLoose("09/03/2014"), date); |
| expect(format.parseLoose("09/3/2014"), date); |
| }); |
| |
| test("Loose parsing should handle standalone month format", () { |
| // This checks that LL actually sets the month. |
| // The appended whitespace and extra d pattern are present to trigger the |
| // loose parsing code path. |
| expect(new DateFormat('LL/d', 'en_US').parseLoose("05/ 2").month, 5); |
| }); |
| |
| group("Loose parsing with year formats", () { |
| test("should fail when year is omitted (en_US)", () { |
| expect(() => new DateFormat('yyyy-MM-dd').parseLoose("1/11"), |
| throwsFormatException); |
| }); |
| |
| test("should fail when year is omitted (ja)", () { |
| initializeDateFormatting('ja', null); |
| expect(() => new DateFormat.yMMMd("ja").parseLoose('12月12日'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMd("ja").parseLoose('12月12日'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMEd("ja").parseLoose('12月12日'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMMMEd("ja").parseLoose('12月12日'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMMMMd("ja").parseLoose('12月12日'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMMMMEEEEd("ja").parseLoose('12月12日'), |
| throwsFormatException); |
| }); |
| |
| test("should fail when year is omitted (hu)", () { |
| initializeDateFormatting('hu', null); |
| expect(() => new DateFormat.yMMMd("hu").parseLoose('3. 17.'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMd("hu").parseLoose('3. 17.'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMEd("hu").parseLoose('3. 17.'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMMMEd("hu").parseLoose('3. 17.'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMMMMd("hu").parseLoose('3. 17.'), |
| throwsFormatException); |
| expect(() => new DateFormat.yMMMMEEEEd("hu").parseLoose('3. 17.'), |
| throwsFormatException); |
| }); |
| }); |
| } |