@@ -17,6 +17,25 @@ import {
17
17
18
18
import { vitest , describe , expect , it } from 'vitest'
19
19
20
+ const x = ok < number , string > ( 123 ) . fork (
21
+ ( x ) => ok ( x + 321 ) ,
22
+ ( y ) => ok ( 'y + 444' ) ,
23
+ )
24
+
25
+ ok < number , string > ( 123 )
26
+ . asyncFork (
27
+ ( x ) => okAsync ( x + 321 ) ,
28
+ ( y ) => okAsync ( 'y + 444' ) ,
29
+ )
30
+ . map ( ( x ) => x - 321 )
31
+
32
+ okAsync < number , string > ( 123 )
33
+ . fork (
34
+ ( x ) => okAsync ( x + 321 ) ,
35
+ ( y ) => okAsync ( 'y + 444' ) ,
36
+ )
37
+ . map ( ( x ) => x - 321 )
38
+
20
39
describe ( 'Result.Ok' , ( ) => {
21
40
it ( 'Creates an Ok value' , ( ) => {
22
41
const okVal = ok ( 12 )
@@ -288,6 +307,19 @@ describe('Result.Ok', () => {
288
307
expect ( errMapper ) . not . toHaveBeenCalled ( )
289
308
} )
290
309
310
+ it ( 'Forks on an Ok' , ( ) => {
311
+ const okMapper = vitest . fn ( ( _val ) => ok ( 'weeeeee' ) )
312
+ const errMapper = vitest . fn ( ( _val ) => err ( 'wooooo' ) )
313
+
314
+ const forked = ok ( 12 ) . fork ( okMapper , errMapper )
315
+
316
+ expect ( forked . isOk ( ) ) . toBe ( true )
317
+ expect ( forked ) . toBeInstanceOf ( Ok )
318
+ expect ( forked . _unsafeUnwrap ( ) ) . toBe ( 'weeeeee' )
319
+ expect ( okMapper ) . toHaveBeenCalledTimes ( 1 )
320
+ expect ( errMapper ) . not . toHaveBeenCalled ( )
321
+ } )
322
+
291
323
it ( 'Unwraps without issue' , ( ) => {
292
324
const okVal = ok ( 12 )
293
325
@@ -450,6 +482,19 @@ describe('Result.Err', () => {
450
482
expect ( errMapper ) . toHaveBeenCalledTimes ( 1 )
451
483
} )
452
484
485
+ it ( 'Forks on an Err' , ( ) => {
486
+ const okMapper = vitest . fn ( ( _val ) => ok ( 'weeeeee' ) )
487
+ const errMapper = vitest . fn ( ( _val ) => err ( 'wooooo' ) )
488
+
489
+ const forked = err ( 12 ) . fork ( okMapper , errMapper )
490
+
491
+ expect ( forked . isErr ( ) ) . toBe ( true )
492
+ expect ( forked ) . toBeInstanceOf ( Err )
493
+ expect ( forked . _unsafeUnwrapErr ( ) ) . toBe ( 'wooooo' )
494
+ expect ( okMapper ) . not . toHaveBeenCalled ( )
495
+ expect ( errMapper ) . toHaveBeenCalledTimes ( 1 )
496
+ } )
497
+
453
498
it ( 'Throws when you unwrap an Err' , ( ) => {
454
499
const errVal = err ( 'woopsies' )
455
500
@@ -1171,6 +1216,32 @@ describe('ResultAsync', () => {
1171
1216
} )
1172
1217
} )
1173
1218
1219
+ describe ( 'fork' , ( ) => {
1220
+ it ( 'Forks on an Ok' , async ( ) => {
1221
+ const okMapper = vitest . fn ( ( _val ) => ok ( 'weeeeee' ) )
1222
+ const errMapper = vitest . fn ( ( _val ) => err ( 'wooooo' ) )
1223
+
1224
+ const forked = await okAsync ( 12 ) . fork ( okMapper , errMapper )
1225
+
1226
+ expect ( forked . isOk ( ) ) . toBe ( true )
1227
+ expect ( forked . _unsafeUnwrap ( ) ) . toBe ( 'weeeeee' )
1228
+ expect ( okMapper ) . toHaveBeenCalledTimes ( 1 )
1229
+ expect ( errMapper ) . not . toHaveBeenCalled ( )
1230
+ } )
1231
+
1232
+ it ( 'Forks on an Error' , async ( ) => {
1233
+ const okMapper = vitest . fn ( ( _val ) => ok ( 'weeeeee' ) )
1234
+ const errMapper = vitest . fn ( ( _val ) => err ( 'wooooo' ) )
1235
+
1236
+ const forked = await errAsync ( 'bad' ) . fork ( okMapper , errMapper )
1237
+
1238
+ expect ( forked . isErr ( ) ) . toBe ( true )
1239
+ expect ( forked . _unsafeUnwrapErr ( ) ) . toBe ( 'wooooo' )
1240
+ expect ( okMapper ) . not . toHaveBeenCalled ( )
1241
+ expect ( errMapper ) . toHaveBeenCalledTimes ( 1 )
1242
+ } )
1243
+ } )
1244
+
1174
1245
describe ( 'unwrapOr' , ( ) => {
1175
1246
it ( 'returns a promise to the result value on an Ok' , async ( ) => {
1176
1247
const unwrapped = await okAsync ( 12 ) . unwrapOr ( 10 )
0 commit comments