// 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('returns the system frequency', () { expect(fixed(1990, 11, 8).stopwatch().frequency, equals(Stopwatch().frequency)); }); group('before it starts', () { late Stopwatch stopwatch; setUp(() { stopwatch = clock.stopwatch(); }); test('is not running', () => expect(stopwatch.isRunning, isFalse)); test('stop() does nothing', () { stopwatch.stop(); expect(stopwatch.isRunning, isFalse); expect(stopwatch.elapsed, equals(Duration.zero)); }); group('reports no elapsed', () { test('duration', () => expect(stopwatch.elapsed, equals(Duration.zero))); test('ticks', () => expect(stopwatch.elapsedTicks, isZero)); test('microseconds', () => expect(stopwatch.elapsedMicroseconds, isZero)); test('milliseconds', () => expect(stopwatch.elapsedMilliseconds, isZero)); }); }); group('when 12345μs have elapsed', () { late DateTime time; late Clock clock; late Stopwatch stopwatch; setUp(() { time = date(1990, 11, 8); clock = Clock(() => time); stopwatch = clock.stopwatch()..start(); time = clock.microsFromNow(12345); }); group('and the stopwatch is active', () { test('is running', () { expect(stopwatch.isRunning, isTrue); }); test('reports more elapsed time', () { time = clock.microsFromNow(54321); expect(stopwatch.elapsedMicroseconds, equals(66666)); }); test('start does nothing', () { stopwatch.start(); expect(stopwatch.isRunning, isTrue); expect(stopwatch.elapsedMicroseconds, equals(12345)); }); group('reset()', () { setUp(() { stopwatch.reset(); }); test('sets the elapsed time to zero', () { expect(stopwatch.elapsed, equals(Duration.zero)); }); test('reports more elapsed time', () { time = clock.microsFromNow(54321); expect(stopwatch.elapsedMicroseconds, equals(54321)); }); }); group('reports elapsed', () { test('duration', () { expect( stopwatch.elapsed, equals(const Duration(microseconds: 12345))); }); test('ticks', () { expect(stopwatch.elapsedTicks, equals((Stopwatch().frequency * 12345) ~/ 1000000)); }); test('microseconds', () { expect(stopwatch.elapsedMicroseconds, equals(12345)); }); test('milliseconds', () { expect(stopwatch.elapsedMilliseconds, equals(12)); }); }); }); group('and the stopwatch is inactive, reports that as', () { setUp(() { stopwatch.stop(); }); test('is not running', () { expect(stopwatch.isRunning, isFalse); }); test("doesn't report more elapsed time", () { time = clock.microsFromNow(54321); expect(stopwatch.elapsedMicroseconds, equals(12345)); }); test('start starts reporting more elapsed time', () { stopwatch.start(); expect(stopwatch.isRunning, isTrue); time = clock.microsFromNow(54321); expect(stopwatch.elapsedMicroseconds, equals(66666)); }); group('reset()', () { setUp(() { stopwatch.reset(); }); test('sets the elapsed time to zero', () { expect(stopwatch.elapsed, equals(Duration.zero)); }); test("doesn't report more elapsed time", () { time = clock.microsFromNow(54321); expect(stopwatch.elapsed, equals(Duration.zero)); }); }); group('reports elapsed', () { test('duration', () { expect( stopwatch.elapsed, equals(const Duration(microseconds: 12345))); }); test('ticks', () { expect(stopwatch.elapsedTicks, equals((Stopwatch().frequency * 12345) ~/ 1000000)); }); test('microseconds', () { expect(stopwatch.elapsedMicroseconds, equals(12345)); }); test('milliseconds', () { expect(stopwatch.elapsedMilliseconds, equals(12)); }); }); }); }, onPlatform: { 'js': const Skip('Web does not have enough precision'), }); }