// Copyright 2018 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the 'License'); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an 'AS IS' BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import 'package:clock/clock.dart'; import 'package:test/test.dart'; import 'utils.dart'; void main() { test('the default clock returns the system time', () { expect(DateTime.now().difference(clock.now()).inMilliseconds.abs(), lessThan(100)); }); group('withClock()', () { group('overrides the clock', () { test('synchronously', () { var time = date(1990, 11, 8); withClock(Clock(() => time), () { expect(clock.now(), equals(time)); time = date(2016, 6, 26); expect(clock.now(), equals(time)); }); }); test('asynchronously', () { var time = date(1990, 11, 8); withClock(Clock.fixed(time), () { expect(Future(() async { expect(clock.now(), equals(time)); }), completes); }); }); test('within another withClock() call', () { var outerTime = date(1990, 11, 8); withClock(Clock.fixed(outerTime), () { expect(clock.now(), equals(outerTime)); var innerTime = date(2016, 11, 8); withClock(Clock.fixed(innerTime), () { expect(clock.now(), equals(innerTime)); expect(Future(() async { expect(clock.now(), equals(innerTime)); }), completes); }); expect(clock.now(), equals(outerTime)); }); }); }); test("with isFinal: true doesn't allow nested calls", () { var outerTime = date(1990, 11, 8); withClock(Clock.fixed(outerTime), () { expect(clock.now(), equals(outerTime)); expect(() => withClock(fixed(2016, 11, 8), neverCalledVoid), throwsStateError); expect(clock.now(), equals(outerTime)); // ignore: deprecated_member_use_from_same_package }, isFinal: true); }); }); } /// A wrapper for [neverCalled] that works around sdk#33015. void Function() get neverCalledVoid { var function = neverCalled; return () => function(); }