srawlins / timezone

Time zone database and time zone aware DateTime object for Dart.
BSD 2-Clause "Simplified" License
101 stars 52 forks source link

Use the clock package to help us create tests #169

Open hbock-42 opened 1 year ago

hbock-42 commented 1 year ago

I find it might be interesting to use the 'clock' package from the Dart team to help us test our application. They have a very interesting feature where you wrap your code inside a withClock, and you can set the time returned by Clock.now -> so if you use clock.now() instead of DateTime.now inside TZDatime, it is easy to write tests.

withClock(Clock.fixed(DateTime.parse('2000-04-24 13:00:00.000000')), () {
        final DateTime nowClock = clock.now();
        final nowParis = TZDateTime.now(getLocation('Europe/Paris'));
        print('TZLocatedNowWithClockOverride:${TZDateTime.from(nowClock, getLocation('Europe/Paris'))}');
        print('paris:$nowParis');
}

If you are in Paris, it currently, returns:

nowclock:2000-04-24 13:00:00.000
TZLocatedNowWithClockOverride:2000-04-24 13:00:00.000+0200
paris:2023-04-24 13:14:47.899249+0200

After the change, it would return:

nowclock:2000-04-24 13:00:00.000
TZLocatedNowWithClockOverride:2000-04-24 13:00:00.000+0200
paris:2000-04-24 13:00:00.000+0200