@@ -7,6 +7,7 @@ var test = require('tape');
77var Runner = require ( '../lib/runner' ) ;
88var fork = require ( '../lib/fork' ) ;
99var ava = require ( '../lib/test' ) ;
10+ var Observable = require ( './fixture/observable' ) ;
1011
1112function execCli ( args , cb ) {
1213 if ( ! Array . isArray ( args ) ) {
@@ -97,6 +98,25 @@ test('plan assertions with support for promises', function (t) {
9798 } ) ;
9899} ) ;
99100
101+ test ( 'plan assertions with support for observables' , function ( t ) {
102+ ava ( function ( a ) {
103+ a . plan ( 2 ) ;
104+
105+ var observable = Observable . of ( ) ;
106+
107+ setTimeout ( function ( ) {
108+ a . pass ( ) ;
109+ a . pass ( ) ;
110+ } , 200 ) ;
111+
112+ return observable ;
113+ } ) . run ( ) . then ( function ( a ) {
114+ t . is ( a . planCount , 2 ) ;
115+ t . is ( a . assertCount , 2 ) ;
116+ t . end ( ) ;
117+ } ) ;
118+ } ) ;
119+
100120test ( 'run more assertions than planned' , function ( t ) {
101121 ava ( function ( a ) {
102122 a . plan ( 2 ) ;
@@ -276,6 +296,94 @@ test('handle throws with false-positive promise', function (t) {
276296 } ) ;
277297} ) ;
278298
299+ test ( 'handle throws with thrown observable' , function ( t ) {
300+ ava ( function ( a ) {
301+ a . plan ( 1 ) ;
302+
303+ var observable = new Observable ( function ( observer ) {
304+ observer . error ( new Error ( ) ) ;
305+ } ) ;
306+ a . throws ( observable ) ;
307+ } ) . run ( ) . then ( function ( a ) {
308+ t . false ( a . assertError ) ;
309+ t . end ( ) ;
310+ } ) ;
311+ } ) ;
312+
313+ test ( 'handle throws with long running thrown observable' , function ( t ) {
314+ ava ( function ( a ) {
315+ a . plan ( 1 ) ;
316+
317+ var observable = new Observable ( function ( observer ) {
318+ setTimeout ( function ( ) {
319+ observer . error ( new Error ( 'abc' ) ) ;
320+ } , 2000 ) ;
321+ } ) ;
322+
323+ a . throws ( observable , / a b c / ) ;
324+ } ) . run ( ) . then ( function ( a ) {
325+ t . false ( a . assertError ) ;
326+ t . end ( ) ;
327+ } ) ;
328+ } ) ;
329+
330+ test ( 'handle throws with completed observable' , function ( t ) {
331+ ava ( function ( a ) {
332+ a . plan ( 1 ) ;
333+
334+ var observable = Observable . of ( ) ;
335+ a . throws ( observable ) ;
336+ } ) . run ( ) . catch ( function ( err ) {
337+ t . true ( err ) ;
338+ t . is ( err . name , 'AssertionError' ) ;
339+ t . end ( ) ;
340+ } ) ;
341+ } ) ;
342+
343+ test ( 'handle throws with regex' , function ( t ) {
344+ ava ( function ( a ) {
345+ a . plan ( 1 ) ;
346+
347+ var observable = new Observable ( function ( observer ) {
348+ observer . error ( new Error ( 'abc' ) ) ;
349+ } ) ;
350+ a . throws ( observable , / a b c / ) ;
351+ } ) . run ( ) . then ( function ( a ) {
352+ t . false ( a . assertionError ) ;
353+ t . end ( ) ;
354+ } ) ;
355+ } ) ;
356+
357+ test ( 'handle throws with string' , function ( t ) {
358+ ava ( function ( a ) {
359+ a . plan ( 1 ) ;
360+
361+ var observable = new Observable ( function ( observer ) {
362+ observer . error ( new Error ( 'abc' ) ) ;
363+ } ) ;
364+ a . throws ( observable , 'abc' ) ;
365+ } ) . run ( ) . then ( function ( a ) {
366+ t . false ( a . assertionError ) ;
367+ t . end ( ) ;
368+ } ) ;
369+ } ) ;
370+
371+ test ( 'handle throws with false-positive observable' , function ( t ) {
372+ ava ( function ( a ) {
373+ a . plan ( 1 ) ;
374+
375+ var observable = new Observable ( function ( observer ) {
376+ observer . next ( new Error ( ) ) ;
377+ observer . complete ( ) ;
378+ } ) ;
379+ a . throws ( observable ) ;
380+ } ) . run ( ) . catch ( function ( err ) {
381+ t . true ( err ) ;
382+ t . is ( err . name , 'AssertionError' ) ;
383+ t . end ( ) ;
384+ } ) ;
385+ } ) ;
386+
279387test ( 'handle doesNotThrow with error' , function ( t ) {
280388 ava ( function ( a ) {
281389 a . doesNotThrow ( function ( ) {
@@ -328,6 +436,33 @@ test('handle doesNotThrow with rejected promise', function (t) {
328436 } ) ;
329437} ) ;
330438
439+ test ( 'handle doesNotThrow with completed observable' , function ( t ) {
440+ ava ( function ( a ) {
441+ a . plan ( 1 ) ;
442+
443+ var observable = Observable . of ( ) ;
444+ a . doesNotThrow ( observable ) ;
445+ } ) . run ( ) . then ( function ( a ) {
446+ t . false ( a . assertError ) ;
447+ t . end ( ) ;
448+ } ) ;
449+ } ) ;
450+
451+ test ( 'handle doesNotThrow with thrown observable' , function ( t ) {
452+ ava ( function ( a ) {
453+ a . plan ( 1 ) ;
454+
455+ var observable = new Observable ( function ( observer ) {
456+ observer . error ( new Error ( ) ) ;
457+ } ) ;
458+ a . doesNotThrow ( observable ) ;
459+ } ) . run ( ) . catch ( function ( err ) {
460+ t . true ( err ) ;
461+ t . is ( err . name , 'AssertionError' ) ;
462+ t . end ( ) ;
463+ } ) ;
464+ } ) ;
465+
331466test ( 'run functions after last planned assertion' , function ( t ) {
332467 var i = 0 ;
333468
0 commit comments