Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(546)

Unified Diff: lib/src/expect_async.dart

Issue 955543002: Move a bunch of src/ files into subdirectories. (Closed) Base URL: git@github.com:dart-lang/unittest@master
Patch Set: Fix library tags Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/expect.dart ('k') | lib/src/frontend/expect.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/expect_async.dart
diff --git a/lib/src/expect_async.dart b/lib/src/expect_async.dart
deleted file mode 100644
index 0179f851fa079b387e4a80865ffb70d9a8983d57..0000000000000000000000000000000000000000
--- a/lib/src/expect_async.dart
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright (c) 2015, 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.
-
-library unittest.expect_async;
-
-import 'expect.dart';
-import 'invoker.dart';
-import 'state.dart';
-
-/// An object used to detect unpassed arguments.
-const _PLACEHOLDER = const Object();
-
-// Functions used to check how many arguments a callback takes.
-typedef _Func0();
-typedef _Func1(a);
-typedef _Func2(a, b);
-typedef _Func3(a, b, c);
-typedef _Func4(a, b, c, d);
-typedef _Func5(a, b, c, d, e);
-typedef _Func6(a, b, c, d, e, f);
-
-typedef bool _IsDoneCallback();
-
-/// A wrapper for a function that ensures that it's called the appropriate
-/// number of times.
-///
-/// The containing test won't be considered to have completed successfully until
-/// this function has been called the appropriate number of times.
-///
-/// The wrapper function is accessible via [func]. It supports up to six
-/// optional and/or required positional arguments, but no named arguments.
-class _ExpectedFunction {
- /// The wrapped callback.
- final Function _callback;
-
- /// The minimum number of calls that are expected to be made to the function.
- ///
- /// If fewer calls than this are made, the test will fail.
- final int _minExpectedCalls;
-
- /// The maximum number of calls that are expected to be made to the function.
- ///
- /// If more calls than this are made, the test will fail.
- final int _maxExpectedCalls;
-
- /// A callback that should return whether the function is not expected to have
- /// any more calls.
- ///
- /// This will be called after every time the function is run. The test case
- /// won't be allowed to terminate until it returns `true`.
- ///
- /// This may be `null`. If so, the function is considered to be done after
- /// it's been run once.
- final _IsDoneCallback _isDone;
-
- /// A descriptive name for the function.
- final String _id;
-
- /// An optional description of why the function is expected to be called.
- ///
- /// If not passed, this will be an empty string.
- final String _reason;
-
- /// The number of times the function has been called.
- int _actualCalls = 0;
-
- /// The test invoker in which this function was wrapped.
- final Invoker _invoker;
-
- /// Whether this function has been called the requisite number of times.
- bool _complete;
-
- /// Wraps [callback] in a function that asserts that it's called at least
- /// [minExpected] times and no more than [maxExpected] times.
- ///
- /// If passed, [id] is used as a descriptive name fo the function and [reason]
- /// as a reason it's expected to be called. If [isDone] is passed, the test
- /// won't be allowed to complete until it returns `true`.
- _ExpectedFunction(Function callback, int minExpected, int maxExpected,
- {String id, String reason, bool isDone()})
- : this._callback = callback,
- _minExpectedCalls = minExpected,
- _maxExpectedCalls = (maxExpected == 0 && minExpected > 0)
- ? minExpected
- : maxExpected,
- this._isDone = isDone,
- this._reason = reason == null ? '' : '\n$reason',
- this._invoker = Invoker.current,
- this._id = _makeCallbackId(id, callback) {
- if (_invoker == null) {
- throw new StateError("[expectAsync] was called outside of a test.");
- } else if (maxExpected > 0 && minExpected > maxExpected) {
- throw new ArgumentError("max ($maxExpected) may not be less than count "
- "($minExpected).");
- }
-
- if (isDone != null || minExpected > 0) {
- _invoker.addOutstandingCallback();
- _complete = false;
- } else {
- _complete = true;
- }
- }
-
- /// Tries to find a reasonable name for [callback].
- ///
- /// If [id] is passed, uses that. Otherwise, tries to determine a name from
- /// calling `toString`. If no name can be found, returns the empty string.
- static String _makeCallbackId(String id, Function callback) {
- if (id != null) return "$id ";
-
- // If the callback is not an anonymous closure, try to get the
- // name.
- var toString = callback.toString();
- var prefix = "Function '";
- var start = toString.indexOf(prefix);
- if (start == -1) return '';
-
- start += prefix.length;
- var end = toString.indexOf("'", start);
- if (end == -1) return '';
- return "${toString.substring(start, end)} ";
- }
-
- /// Returns a function that has the same number of positional arguments as the
- /// wrapped function (up to a total of 6).
- Function get func {
- if (_callback is _Func6) return _max6;
- if (_callback is _Func5) return _max5;
- if (_callback is _Func4) return _max4;
- if (_callback is _Func3) return _max3;
- if (_callback is _Func2) return _max2;
- if (_callback is _Func1) return _max1;
- if (_callback is _Func0) return _max0;
-
- _invoker.removeOutstandingCallback();
- throw new ArgumentError(
- 'The wrapped function has more than 6 required arguments');
- }
-
- // This indirection is critical. It ensures the returned function has an
- // argument count of zero.
- _max0() => _max6();
-
- _max1([a0 = _PLACEHOLDER]) => _max6(a0);
-
- _max2([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER]) => _max6(a0, a1);
-
- _max3([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER]) =>
- _max6(a0, a1, a2);
-
- _max4([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER,
- a3 = _PLACEHOLDER]) => _max6(a0, a1, a2, a3);
-
- _max5([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER,
- a3 = _PLACEHOLDER, a4 = _PLACEHOLDER]) => _max6(a0, a1, a2, a3, a4);
-
- _max6([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER,
- a3 = _PLACEHOLDER, a4 = _PLACEHOLDER, a5 = _PLACEHOLDER]) =>
- _run([a0, a1, a2, a3, a4, a5].where((a) => a != _PLACEHOLDER));
-
- /// Runs the wrapped function with [args] and returns its return value.
- _run(Iterable args) {
- // Note that in the old unittest, this returned `null` if it encountered an
- // error, where now it just re-throws that error because Zone machinery will
- // pass it to the invoker anyway.
- try {
- _actualCalls++;
- if (_invoker.liveTest.isComplete &&
- _invoker.liveTest.state.result == Result.success) {
- throw 'Callback ${_id}called ($_actualCalls) after test case '
- '${_invoker.liveTest.test.name} had already completed.$_reason';
- } else if (_maxExpectedCalls >= 0 && _actualCalls > _maxExpectedCalls) {
- throw new TestFailure('Callback ${_id}called more times than expected '
- '($_maxExpectedCalls).$_reason');
- }
-
- return Function.apply(_callback, args.toList());
- } catch (error, stackTrace) {
- _invoker.handleError(error, stackTrace);
- return null;
- } finally {
- _afterRun();
- }
- }
-
- /// After each time the function is run, check to see if it's complete.
- void _afterRun() {
- if (_complete) return;
- if (_minExpectedCalls > 0 && _actualCalls < _minExpectedCalls) return;
- if (_isDone != null && !_isDone()) return;
-
- // Mark this callback as complete and remove it from the test case's
- // oustanding callback count; if that hits zero the test is done.
- _complete = true;
- _invoker.removeOutstandingCallback();
- }
-}
-
-/// Indicate that [callback] is expected to be called [count] number of times
-/// (by default 1).
-///
-/// The unittest framework will wait for the callback to run the [count] times
-/// before it considers the current test to be complete. [callback] may take up
-/// to six optional or required positional arguments; named arguments are not
-/// supported.
-///
-/// [max] can be used to specify an upper bound on the number of calls; if this
-/// is exceeded the test will fail. If [max] is `0` (the default), the callback
-/// is expected to be called exactly [count] times. If [max] is `-1`, the
-/// callback is allowed to be called any number of times greater than [count].
-///
-/// Both [id] and [reason] are optional and provide extra information about the
-/// callback when debugging. [id] should be the name of the callback, while
-/// [reason] should be the reason the callback is expected to be called.
-Function expectAsync(Function callback,
- {int count: 1, int max: 0, String id, String reason}) =>
- new _ExpectedFunction(callback, count, max, id: id, reason: reason).func;
-
-/// Indicate that [callback] is expected to be called until [isDone] returns
-/// true.
-///
-/// [isDone] is called after each time the function is run. Only when it returns
-/// true will the callback be considered complete. [callback] may take up to six
-/// optional or required positional arguments; named arguments are not
-/// supported.
-///
-/// Both [id] and [reason] are optional and provide extra information about the
-/// callback when debugging. [id] should be the name of the callback, while
-/// [reason] should be the reason the callback is expected to be called.
-Function expectAsyncUntil(Function callback, bool isDone(),
- {String id, String reason}) => new _ExpectedFunction(callback, 0, -1,
- id: id, reason: reason, isDone: isDone).func;
« no previous file with comments | « lib/src/expect.dart ('k') | lib/src/frontend/expect.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698