@@ -1641,55 +1641,76 @@ void main() {
1641
1641
group ('MessageTimestampStyle' , () {
1642
1642
void doTests (
1643
1643
MessageTimestampStyle style,
1644
- List <(String timestampStr, String ? expected)> cases, {
1644
+ List <(
1645
+ String timestampStr,
1646
+ String ? expectedTwelveHour,
1647
+ String ? expectedTwentyFourHour,
1648
+ )> cases, {
1645
1649
DateTime ? now,
1646
1650
}) {
1647
1651
now ?? = DateTime .parse ("2023-01-10 12:00" );
1648
- for (final (timestampStr, expected) in cases) {
1649
- test ('${style .name }: $timestampStr returns $expected ' , () {
1650
- addTearDown (testBinding.reset);
1651
- final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
1652
-
1653
- withClock (Clock .fixed (now! ), () {
1654
- final timestamp = DateTime .parse (timestampStr)
1655
- .millisecondsSinceEpoch ~ / 1000 ;
1656
- final result = style.format (
1657
- timestamp,
1658
- now: testBinding.utcNow ().toLocal (),
1659
- twentyFourHourTimeMode: TwentyFourHourTimeMode .localeDefault,
1660
- zulipLocalizations: zulipLocalizations);
1661
- check (result).equals (expected);
1652
+ for (final (timestampStr, expectedTwelveHour, expectedTwentyFourHour) in cases) {
1653
+ for (final mode in TwentyFourHourTimeMode .values) {
1654
+ final expected = switch (mode) {
1655
+ TwentyFourHourTimeMode .twelveHour => expectedTwelveHour,
1656
+ TwentyFourHourTimeMode .twentyFourHour => expectedTwentyFourHour,
1657
+ // This expectation will hold as long as we're always using the
1658
+ // default locale, en_US, which uses the twelve-hour format.
1659
+ // TODO(#1727) test with other locales
1660
+ TwentyFourHourTimeMode .localeDefault => expectedTwelveHour,
1661
+ };
1662
+
1663
+ test ('${style .name } in ${mode .name }: $timestampStr returns $expected ' , () {
1664
+ addTearDown (testBinding.reset);
1665
+ final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
1666
+
1667
+ withClock (Clock .fixed (now! ), () {
1668
+ final timestamp = DateTime .parse (timestampStr)
1669
+ .millisecondsSinceEpoch ~ / 1000 ;
1670
+ final result = style.format (
1671
+ timestamp,
1672
+ now: testBinding.utcNow ().toLocal (),
1673
+ twentyFourHourTimeMode: mode,
1674
+ zulipLocalizations: zulipLocalizations);
1675
+ check (result).equals (expected);
1676
+ });
1662
1677
});
1663
- });
1678
+ }
1664
1679
}
1665
1680
}
1666
1681
1667
1682
for (final style in MessageTimestampStyle .values) {
1668
1683
switch (style) {
1669
1684
case MessageTimestampStyle .none:
1670
- doTests (style, [('2023-01-10 12:00' , null )]);
1685
+ doTests (style, [('2023-01-10 12:00' , null , null )]);
1671
1686
case MessageTimestampStyle .dateOnlyRelative:
1672
1687
final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
1673
1688
doTests (style,
1674
1689
now: DateTime .parse ("2023-01-10 12:00" ),
1675
1690
[
1676
- ("2023-01-10 12:00" , zulipLocalizations.today),
1677
- ("2023-01-10 00:00" , zulipLocalizations.today),
1678
- ("2023-01-10 23:59" , zulipLocalizations.today),
1679
- ("2023-01-09 23:59" , zulipLocalizations.yesterday),
1680
- ("2023-01-09 00:00" , zulipLocalizations.yesterday),
1681
- ("2023-01-08 00:00" , "Jan 8" ),
1682
- ("2022-12-31 00:00" , "Dec 31, 2022" ),
1691
+ ("2023-01-10 12:00" , zulipLocalizations.today, zulipLocalizations.today ),
1692
+ ("2023-01-10 00:00" , zulipLocalizations.today, zulipLocalizations.today ),
1693
+ ("2023-01-10 23:59" , zulipLocalizations.today, zulipLocalizations.today ),
1694
+ ("2023-01-09 23:59" , zulipLocalizations.yesterday, zulipLocalizations.yesterday ),
1695
+ ("2023-01-09 00:00" , zulipLocalizations.yesterday, zulipLocalizations.yesterday ),
1696
+ ("2023-01-08 00:00" , "Jan 8" , "Jan 8" ),
1697
+ ("2022-12-31 00:00" , "Dec 31, 2022" , "Dec 31, 2022" ),
1683
1698
// Future times
1684
- ("2023-01-10 19:00" , zulipLocalizations.today),
1685
- ("2023-01-11 00:00" , "Jan 11, 2023" ),
1699
+ ("2023-01-10 19:00" , zulipLocalizations.today, zulipLocalizations.today ),
1700
+ ("2023-01-11 00:00" , "Jan 11, 2023" , "Jan 11, 2023" ),
1686
1701
]);
1687
1702
case MessageTimestampStyle .timeOnly:
1688
- doTests (style, [('2023-01-10 12:00' , '12:00 PM' )]);
1703
+ doTests (style, [('2023-01-10 12:00' , '12:00 PM' , '12:00' )]);
1689
1704
case MessageTimestampStyle .lightbox:
1690
- doTests (style, [('2023-01-10 12:00' , 'Jan 10, 2023 12:00:00' )]);
1705
+ doTests (style,
1706
+ [('2023-01-10 12:00' ,
1707
+ 'Jan 10, 2023 12:00:00 PM' ,
1708
+ 'Jan 10, 2023 12:00:00' )]);
1691
1709
case MessageTimestampStyle .full:
1692
- doTests (style, [('2023-01-10 12:00' , 'Jan 10, 2023 12:00 PM' )]);
1710
+ doTests (style,
1711
+ [('2023-01-10 12:00' ,
1712
+ 'Jan 10, 2023 12:00 PM' ,
1713
+ 'Jan 10, 2023 12:00' )]);
1693
1714
}
1694
1715
}
1695
1716
});
0 commit comments