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

Unified Diff: test/pool_test.dart

Issue 1393193004: Add Pool.close(). (Closed) Base URL: git@github.com:dart-lang/pool@master
Patch Set: Code review changes Created 5 years, 2 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 | « pubspec.yaml ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/pool_test.dart
diff --git a/test/pool_test.dart b/test/pool_test.dart
index 5dfef2a24707df2f8f4c6d2ca50ad860b7455b14..65fd00ee25f0ed9a498681d61077198f2d67283f 100644
--- a/test/pool_test.dart
+++ b/test/pool_test.dart
@@ -271,6 +271,139 @@ void main() {
pool.request();
});
});
+
+ group("close()", () {
+ test("disallows request() and withResource()", () {
+ var pool = new Pool(1)..close();
+ expect(pool.request, throwsStateError);
+ expect(() => pool.withResource(() {}), throwsStateError);
+ });
+
+ test("pending requests are fulfilled", () async {
+ var pool = new Pool(1);
+ var resource1 = await pool.request();
+ expect(pool.request().then((resource2) {
+ resource2.release();
+ }), completes);
+ expect(pool.close(), completes);
+ resource1.release();
+ });
+
+ test("pending requests are fulfilled with allowRelease", () async {
+ var pool = new Pool(1);
+ var resource1 = await pool.request();
+
+ var completer = new Completer();
+ expect(pool.request().then((resource2) {
+ expect(completer.isCompleted, isTrue);
+ resource2.release();
+ }), completes);
+ expect(pool.close(), completes);
+
+ resource1.allowRelease(() => completer.future);
+ await new Future.delayed(Duration.ZERO);
+
+ completer.complete();
+ });
+
+ test("doesn't complete until all resources are released", () async {
+ var pool = new Pool(2);
+ var resource1 = await pool.request();
+ var resource2 = await pool.request();
+ var resource3Future = pool.request();
+
+ var resource1Released = false;
+ var resource2Released = false;
+ var resource3Released = false;
+ expect(pool.close().then((_) {
+ expect(resource1Released, isTrue);
+ expect(resource2Released, isTrue);
+ expect(resource3Released, isTrue);
+ }), completes);
+
+ resource1Released = true;
+ resource1.release();
+ await new Future.delayed(Duration.ZERO);
+
+ resource2Released = true;
+ resource2.release();
+ await new Future.delayed(Duration.ZERO);
+
+ var resource3 = await resource3Future;
+ resource3Released = true;
+ resource3.release();
+ });
+
+ test("active onReleases complete as usual", () async {
+ var pool = new Pool(1);
+ var resource = await pool.request();
+
+ // Set up an onRelease callback whose completion is controlled by
+ // [completer].
+ var completer = new Completer();
+ resource.allowRelease(() => completer.future);
+ expect(pool.request().then((_) {
+ expect(completer.isCompleted, isTrue);
+ }), completes);
+
+ await new Future.delayed(Duration.ZERO);
+ pool.close();
+
+ await new Future.delayed(Duration.ZERO);
+ completer.complete();
+ });
+
+ test("inactive onReleases fire", () async {
+ var pool = new Pool(2);
+ var resource1 = await pool.request();
+ var resource2 = await pool.request();
+
+ var completer1 = new Completer();
+ resource1.allowRelease(() => completer1.future);
+ var completer2 = new Completer();
+ resource2.allowRelease(() => completer2.future);
+
+ expect(pool.close().then((_) {
+ expect(completer1.isCompleted, isTrue);
+ expect(completer2.isCompleted, isTrue);
+ }), completes);
+
+ await new Future.delayed(Duration.ZERO);
+ completer1.complete();
+
+ await new Future.delayed(Duration.ZERO);
+ completer2.complete();
+ });
+
+ test("new allowReleases fire immediately", () async {
+ var pool = new Pool(1);
+ var resource = await pool.request();
+
+ var completer = new Completer();
+ expect(pool.close().then((_) {
+ expect(completer.isCompleted, isTrue);
+ }), completes);
+
+ await new Future.delayed(Duration.ZERO);
+ resource.allowRelease(() => completer.future);
+
+ await new Future.delayed(Duration.ZERO);
+ completer.complete();
+ });
+
+ test("an onRelease error is piped to the return value", () async {
+ var pool = new Pool(1);
+ var resource = await pool.request();
+
+ var completer = new Completer();
+ resource.allowRelease(() => completer.future);
+
+ expect(pool.close(), throwsA("oh no!"));
+
+ await new Future.delayed(Duration.ZERO);
+ completer.completeError("oh no!");
+ });
+ });
}
/// Returns a function that will cause the test to fail if it's called.
« no previous file with comments | « pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698