@@ -1986,6 +1986,78 @@ describe('q', function() {
1986
1986
} ) ;
1987
1987
} ) ;
1988
1988
1989
+ describe ( 'race (array)' , function ( ) {
1990
+ it ( 'should do nothing if given an empty array' , function ( ) {
1991
+ q . race ( [ ] ) . then ( success ( ) , error ( ) ) ;
1992
+ expect ( mockNextTick . queue . length ) . toBe ( 0 ) ;
1993
+ expect ( logStr ( ) ) . toBe ( '' ) ;
1994
+ } ) ;
1995
+
1996
+ it ( 'should resolve as soon as the first promise is settled by resolution' , function ( ) {
1997
+ var deferred1 = defer ( ) ,
1998
+ deferred2 = defer ( ) ;
1999
+
2000
+ q . race ( [ promise , deferred1 . promise , deferred2 . promise ] ) . then ( success ( ) , error ( ) ) ;
2001
+ expect ( logStr ( ) ) . toBe ( '' ) ;
2002
+ syncResolve ( deferred1 , 'hi' ) ;
2003
+ expect ( logStr ( ) ) . toBe ( 'success(hi)->hi' ) ;
2004
+ syncResolve ( deferred2 , 'cau' ) ;
2005
+ expect ( logStr ( ) ) . toBe ( 'success(hi)->hi' ) ;
2006
+ syncReject ( deferred , 'hola' ) ;
2007
+ expect ( logStr ( ) ) . toBe ( 'success(hi)->hi' ) ;
2008
+ } ) ;
2009
+
2010
+ it ( 'should reject as soon as the first promise is settled by rejection' , function ( ) {
2011
+ var deferred1 = defer ( ) ,
2012
+ deferred2 = defer ( ) ;
2013
+
2014
+ q . race ( [ promise , deferred1 . promise , deferred2 . promise ] ) . then ( success ( ) , error ( ) ) ;
2015
+ expect ( logStr ( ) ) . toBe ( '' ) ;
2016
+ syncReject ( deferred1 , 'hi' ) ;
2017
+ expect ( logStr ( ) ) . toBe ( 'error(hi)->reject(hi)' ) ;
2018
+ syncResolve ( deferred2 , 'cau' ) ;
2019
+ expect ( logStr ( ) ) . toBe ( 'error(hi)->reject(hi)' ) ;
2020
+ syncReject ( deferred , 'hola' ) ;
2021
+ expect ( logStr ( ) ) . toBe ( 'error(hi)->reject(hi)' ) ;
2022
+ } ) ;
2023
+ } ) ;
2024
+
2025
+ describe ( 'race (hash)' , function ( ) {
2026
+ it ( 'should do nothing if given an empty array' , function ( ) {
2027
+ q . race ( { } ) . then ( success ( ) , error ( ) ) ;
2028
+ expect ( mockNextTick . queue . length ) . toBe ( 0 ) ;
2029
+ expect ( logStr ( ) ) . toBe ( '' ) ;
2030
+ } ) ;
2031
+
2032
+ it ( 'should resolve as soon as the first promise is settled by resolution' , function ( ) {
2033
+ var deferred1 = defer ( ) ,
2034
+ deferred2 = defer ( ) ;
2035
+
2036
+ q . race ( { a : promise , b : deferred1 . promise , c : deferred2 . promise } ) . then ( success ( ) , error ( ) ) ;
2037
+ expect ( logStr ( ) ) . toBe ( '' ) ;
2038
+ syncResolve ( deferred1 , 'hi' ) ;
2039
+ expect ( logStr ( ) ) . toBe ( 'success(hi)->hi' ) ;
2040
+ syncResolve ( deferred2 , 'cau' ) ;
2041
+ expect ( logStr ( ) ) . toBe ( 'success(hi)->hi' ) ;
2042
+ syncReject ( deferred , 'hola' ) ;
2043
+ expect ( logStr ( ) ) . toBe ( 'success(hi)->hi' ) ;
2044
+ } ) ;
2045
+
2046
+ it ( 'should reject as soon as the first promise is settled by rejection' , function ( ) {
2047
+ var deferred1 = defer ( ) ,
2048
+ deferred2 = defer ( ) ;
2049
+
2050
+ q . race ( { a : promise , b : deferred1 . promise , c : deferred2 . promise } ) . then ( success ( ) , error ( ) ) ;
2051
+ expect ( logStr ( ) ) . toBe ( '' ) ;
2052
+ syncReject ( deferred1 , 'hi' ) ;
2053
+ expect ( logStr ( ) ) . toBe ( 'error(hi)->reject(hi)' ) ;
2054
+ syncResolve ( deferred2 , 'cau' ) ;
2055
+ expect ( logStr ( ) ) . toBe ( 'error(hi)->reject(hi)' ) ;
2056
+ syncReject ( deferred , 'hola' ) ;
2057
+ expect ( logStr ( ) ) . toBe ( 'error(hi)->reject(hi)' ) ;
2058
+ } ) ;
2059
+ } ) ;
2060
+
1989
2061
describe ( 'exception logging' , function ( ) {
1990
2062
var mockExceptionLogger = {
1991
2063
log : [ ] ,
0 commit comments