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

Unified Diff: packages/when/test/test_when.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: 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 | « packages/when/pubspec.yaml ('k') | packages/which/.gitignore » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/when/test/test_when.dart
diff --git a/packages/when/test/test_when.dart b/packages/when/test/test_when.dart
new file mode 100755
index 0000000000000000000000000000000000000000..25c50861643ddb755a5f6823ff89b0fdc0f6d0ff
--- /dev/null
+++ b/packages/when/test/test_when.dart
@@ -0,0 +1,184 @@
+
+library when.test;
+
+import 'dart:async';
+
+import 'package:unittest/unittest.dart';
+import 'package:when/when.dart';
+
+main() {
+ group('when', () {
+
+ test('on non-Future callback result should call onSuccess with result, then onComplete, and return onSuccess result', () {
+ var onSuccessCalled = false;
+ var onErrorCalled = false;
+ var onCompleteCalled = false;
+ var ret = when(
+ () => 5,
+ onSuccess: (x) {
+ expect(x, 5);
+ onSuccessCalled = true;
+ return 10;
+ },
+ onError: (e) => onErrorCalled = true,
+ onComplete: () {
+ expect(onSuccessCalled, isTrue);
+ onCompleteCalled = true;
+ });
+ expect(onErrorCalled, isFalse);
+ expect(onCompleteCalled, isTrue);
+ expect(ret, 10);
+ });
+
+ test('on callback failure should call onError with error, then onComplete', () {
+ var onSuccessCalled = false;
+ var onErrorCalled = false;
+ var onCompleteCalled = false;
+ var ret = when(
+ () => throw 'e',
+ onSuccess: (_) => onSuccessCalled = true,
+ onError: (e) {
+ expect(e, 'e');
+ onErrorCalled = true;
+ },
+ onComplete: () {
+ expect(onErrorCalled, isTrue);
+ onCompleteCalled = true;
+ });
+ expect(onSuccessCalled, isFalse);
+ expect(onCompleteCalled, isTrue);
+ expect(ret, isNull);
+ });
+
+ test('should pass stack trace to onError if binary', () {
+ var onErrorCalled = false;
+ when(
+ () => throw 'e',
+ onError: (e, s) {
+ onErrorCalled = true;
+ expect(s, isNotNull);
+ });
+ expect(onErrorCalled, isTrue);
+ });
+
+ test('should throw callback error if no onError provided', () {
+ try {
+ when(
+ () => throw 'e');
+ fail('callback error was swallowed');
+ } catch (e) {
+ expect(e, 'e');
+ }
+ });
+
+ test('should just return callback result if onSuccess not provided', () {
+ expect(when(() => 5), 5);
+ });
+
+ test('should not swallow onComplete error', () {
+ try {
+ when(
+ () {},
+ onComplete: () => throw 'e');
+ fail('onComplete error was swallowed');
+ } catch (e) {
+ expect(e, 'e');
+ }
+ });
+
+ group('on Future callback result', () {
+
+ test('which succeeds should call onSuccess with result, then onComplete, and complete with onSuccess result', () {
+ var onSuccessCalled = false;
+ var onErrorCalled = false;
+ var onCompleteCalled = false;
+ var result = when(
+ () => new Future.value(5),
+ onSuccess: (x) {
+ expect(x, 5);
+ onSuccessCalled = true;
+ return 10;
+ },
+ onError: (e) => onErrorCalled = true,
+ onComplete: () {
+ expect(onSuccessCalled, isTrue);
+ onCompleteCalled = true;
+ });
+ expect(onSuccessCalled, isFalse);
+ expect(onCompleteCalled, isFalse);
+ expect(result, new isInstanceOf<Future>());
+ return result.then((ret) {
+ expect(onErrorCalled, isFalse);
+ expect(onCompleteCalled, isTrue);
+ expect(ret, 10);
+ });
+ });
+
+ test('which fails should call onError with error, then onComplete', () {
+ var onSuccessCalled = false;
+ var onErrorCalled = false;
+ var onCompleteCalled = false;
+ var result = when(
+ () => new Future.error('e'),
+ onSuccess: (_) => onSuccessCalled = true,
+ onError: (e) {
+ expect(e, 'e');
+ onErrorCalled = true;
+ },
+ onComplete: () {
+ onErrorCalled = true;
+ onCompleteCalled = true;
+ });
+ expect(onErrorCalled, isFalse);
+ expect(onCompleteCalled, isFalse);
+ expect(result, new isInstanceOf<Future>());
+ return result.then((ret) {
+ expect(ret, isNull);
+ expect(onSuccessCalled, isFalse);
+ expect(onCompleteCalled, isTrue);
+ });
+ });
+
+ test('should pass stack trace to onError if binary', () {
+ var onErrorCalled = false;
+ return when(
+ () => new Future.error('e'),
+ onError: (e, s) {
+ onErrorCalled = true;
+ // TODO: Why is the stack trace null?
+ // expect(s, isNotNull);
+ }).then((_) {
+ expect(onErrorCalled, isTrue);
+ });
+ });
+
+ test('should throw callback error if no onError provided', () {
+ return when(
+ () => new Future.error('e')
+ ).then((_) {
+ fail('callback error was swallowed');
+ }, onError: (e) {
+ expect(e, 'e');
+ });
+ });
+
+ test('should just return callback result if onSuccess not provided', () {
+ return when(() => new Future.value(5)).then((result) {
+ expect(result, 5);
+ });
+ });
+
+ test('should not swallow onComplete error', () {
+ return when(
+ () => new Future.value(),
+ onComplete: () => throw 'e')
+ .then((ret) {
+ fail('onComplete error was swallowed');
+ }, onError: (e) {
+ expect(e, 'e');
+ });
+ });
+
+ });
+ });
+}
« no previous file with comments | « packages/when/pubspec.yaml ('k') | packages/which/.gitignore » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698