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

Unified Diff: pkg/mock/lib/src/behavior.dart

Issue 233243007: pkg/mock: restructure library layout (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 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 | « pkg/mock/lib/src/action.dart ('k') | pkg/mock/lib/src/call_matcher.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/mock/lib/src/behavior.dart
diff --git a/pkg/mock/lib/src/behavior.dart b/pkg/mock/lib/src/behavior.dart
new file mode 100644
index 0000000000000000000000000000000000000000..b43f699277250505ffcee07d7993a8a56ae01ba0
--- /dev/null
+++ b/pkg/mock/lib/src/behavior.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2014, 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 mock.behavior;
+
+import 'action.dart';
+import 'call_matcher.dart';
+import 'responder.dart';
+
+/**
+ * A [Behavior] represents how a [Mock] will respond to one particular
+ * type of method call.
+ */
+class Behavior {
+ CallMatcher matcher; // The method call matcher.
+ List<Responder> actions; // The values to return/throw or proxies to call.
+ bool logging = true;
+
+ Behavior (this.matcher) {
+ actions = new List<Responder>();
+ }
+
+ /**
+ * Adds a [Responder] that returns a [value] for [count] calls
+ * (1 by default).
+ */
+ Behavior thenReturn(value, [count = 1]) {
+ actions.add(new Responder(value, count, Action.RETURN));
+ return this; // For chaining calls.
+ }
+
+ /** Adds a [Responder] that repeatedly returns a [value]. */
+ Behavior alwaysReturn(value) {
+ return thenReturn(value, 0);
+ }
+
+ /**
+ * Adds a [Responder] that throws [value] [count]
+ * times (1 by default).
+ */
+ Behavior thenThrow(value, [count = 1]) {
+ actions.add(new Responder(value, count, Action.THROW));
+ return this; // For chaining calls.
+ }
+
+ /** Adds a [Responder] that throws [value] endlessly. */
+ Behavior alwaysThrow(value) {
+ return thenThrow(value, 0);
+ }
+
+ /**
+ * [thenCall] creates a proxy Responder, that is called [count]
+ * times (1 by default; 0 is used for unlimited calls, and is
+ * exposed as [alwaysCall]). [value] is the function that will
+ * be called with the same arguments that were passed to the
+ * mock. Proxies can be used to wrap real objects or to define
+ * more complex return/throw behavior. You could even (if you
+ * wanted) use proxies to emulate the behavior of thenReturn;
+ * e.g.:
+ *
+ * m.when(callsTo('foo')).thenReturn(0)
+ *
+ * is equivalent to:
+ *
+ * m.when(callsTo('foo')).thenCall(() => 0)
+ */
+ Behavior thenCall(value, [count = 1]) {
+ actions.add(new Responder(value, count, Action.PROXY));
+ return this; // For chaining calls.
+ }
+
+ /** Creates a repeating proxy call. */
+ Behavior alwaysCall(value) {
+ return thenCall(value, 0);
+ }
+
+ /** Returns true if a method call matches the [Behavior]. */
+ bool matches(String method, List args) => matcher.matches(method, args);
+
+ /** Returns the [matcher]'s representation. */
+ String toString() => matcher.toString();
+}
« no previous file with comments | « pkg/mock/lib/src/action.dart ('k') | pkg/mock/lib/src/call_matcher.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698