@@ -88,3 +88,78 @@ test.asPromise('parser: array filter', (t, resolve, reject) => {
8888
8989 readString ( JSON . stringify ( input ) ) . pipe ( stream ) ;
9090} ) ;
91+
92+ test . asPromise ( 'parser: array filter include undecided' , ( t , resolve , reject ) => {
93+ const f = assembler => {
94+ if ( assembler . depth == 2 && assembler . key === null ) {
95+ if ( assembler . current instanceof Array ) {
96+ return false ; // reject
97+ }
98+ switch ( assembler . current . a ) {
99+ case 'accept' :
100+ return true ; // accept
101+ case 'reject' :
102+ return false ; // reject
103+ }
104+ }
105+ // undecided
106+ } ;
107+
108+ const stream = streamArray . withParserAsStream ( { objectFilter : f , includeUndecided : true } ) ,
109+ input = [
110+ 0 ,
111+ 1 ,
112+ true ,
113+ false ,
114+ null ,
115+ { } ,
116+ [ ] ,
117+ { a : 'reject' , b : [ [ [ ] ] ] } ,
118+ [ 'c' ] ,
119+ { a : 'accept' } ,
120+ { a : 'neutral' } ,
121+ { x : true , a : 'reject' } ,
122+ { y : null , a : 'accept' } ,
123+ { z : 1234 , a : 'neutral' } ,
124+ { w : '12' , a : 'neutral' }
125+ ] ,
126+ result = [ ] ;
127+
128+ stream . on ( 'data' , object => result . push ( object . value ) ) ;
129+ stream . on ( 'error' , reject ) ;
130+ stream . on ( 'end' , ( ) => {
131+ result . forEach ( o => {
132+ if ( typeof o == 'object' && o ) {
133+ t . notOk ( o instanceof Array ) ;
134+ t . notEqual ( o . a , 'reject' ) ;
135+ } else {
136+ t . ok ( o === null || typeof o != 'object' ) ;
137+ }
138+ } ) ;
139+ resolve ( ) ;
140+ } ) ;
141+
142+ readString ( JSON . stringify ( input ) ) . pipe ( stream ) ;
143+ } ) ;
144+
145+ test . asPromise ( 'parser: array with replacer and reviver' , ( t , resolve , reject ) => {
146+ const reviver = ( k , v ) => {
147+ if ( / D a t e $ / . test ( k ) && typeof v == 'string' ) return new Date ( Date . parse ( v ) ) ;
148+ return v ;
149+ } ;
150+
151+ const source = [ { createdDate : new Date ( ) , updatedDate : new Date ( ) , user : 'bob' , life : 42 } ] ,
152+ json = JSON . stringify ( source ) ;
153+
154+ const stream = streamArray . withParserAsStream ( { reviver} ) ,
155+ result = [ ] ;
156+
157+ stream . on ( 'data' , object => result . push ( object . value ) ) ;
158+ stream . on ( 'error' , reject ) ;
159+ stream . on ( 'end' , ( ) => {
160+ t . deepEqual ( result , source ) ;
161+ resolve ( ) ;
162+ } ) ;
163+
164+ readString ( json ) . pipe ( stream ) ;
165+ } ) ;
0 commit comments