| // Copyright (c) 2016, 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. | |
| import 'package:test/test.dart'; | |
| void main() { | |
| group('Timeout.parse', () { | |
| group('for "none"', () { | |
| test('successfully parses', () { | |
| expect(Timeout.parse('none'), equals(Timeout.none)); | |
| }); | |
| test('rejects invalid input', () { | |
| expect(() => Timeout.parse(' none'), throwsFormatException); | |
| expect(() => Timeout.parse('none '), throwsFormatException); | |
| expect(() => Timeout.parse('xnone'), throwsFormatException); | |
| expect(() => Timeout.parse('nonex'), throwsFormatException); | |
| expect(() => Timeout.parse('noxe'), throwsFormatException); | |
| }); | |
| }); | |
| group('for a relative timeout', () { | |
| test('successfully parses', () { | |
| expect(Timeout.parse('1x'), equals(const Timeout.factor(1))); | |
| expect(Timeout.parse('2.5x'), equals(const Timeout.factor(2.5))); | |
| expect(Timeout.parse('1.2e3x'), equals(const Timeout.factor(1.2e3))); | |
| }); | |
| test('rejects invalid input', () { | |
| expect(() => Timeout.parse('.x'), throwsFormatException); | |
| expect(() => Timeout.parse('x'), throwsFormatException); | |
| expect(() => Timeout.parse('ax'), throwsFormatException); | |
| expect(() => Timeout.parse('1x '), throwsFormatException); | |
| expect(() => Timeout.parse('1x5m'), throwsFormatException); | |
| }); | |
| }); | |
| group('for an absolute timeout', () { | |
| test('successfully parses all supported units', () { | |
| expect(Timeout.parse('2d'), equals(const Timeout(Duration(days: 2)))); | |
| expect(Timeout.parse('2h'), equals(const Timeout(Duration(hours: 2)))); | |
| expect( | |
| Timeout.parse('2m'), | |
| equals(const Timeout(Duration(minutes: 2))), | |
| ); | |
| expect( | |
| Timeout.parse('2s'), | |
| equals(const Timeout(Duration(seconds: 2))), | |
| ); | |
| expect( | |
| Timeout.parse('2ms'), | |
| equals(const Timeout(Duration(milliseconds: 2))), | |
| ); | |
| expect( | |
| Timeout.parse('2us'), | |
| equals(const Timeout(Duration(microseconds: 2))), | |
| ); | |
| }); | |
| test('supports non-integer units', () { | |
| expect( | |
| Timeout.parse('2.73d'), | |
| equals(Timeout(const Duration(days: 1) * 2.73)), | |
| ); | |
| }); | |
| test('supports multiple units', () { | |
| expect( | |
| Timeout.parse('1d 2h3m 4s5ms\t6us'), | |
| equals( | |
| const Timeout( | |
| Duration( | |
| days: 1, | |
| hours: 2, | |
| minutes: 3, | |
| seconds: 4, | |
| milliseconds: 5, | |
| microseconds: 6, | |
| ), | |
| ), | |
| ), | |
| ); | |
| }); | |
| test('rejects invalid input', () { | |
| expect(() => Timeout.parse('.d'), throwsFormatException); | |
| expect(() => Timeout.parse('d'), throwsFormatException); | |
| expect(() => Timeout.parse('ad'), throwsFormatException); | |
| expect(() => Timeout.parse('1z'), throwsFormatException); | |
| expect(() => Timeout.parse('1u'), throwsFormatException); | |
| expect(() => Timeout.parse('1d5x'), throwsFormatException); | |
| expect(() => Timeout.parse('1d*5m'), throwsFormatException); | |
| }); | |
| }); | |
| }); | |
| } |