@@ -387,5 +387,105 @@ describe('.replace()', () => {
387
387
} ) ;
388
388
} ) ;
389
389
390
+ describe ( '.remove()' , ( ) => {
391
+ describe ( '"obj" node' , ( ) => {
392
+ test ( 'can remove value in "obj" node' , ( ) => {
393
+ const doc = createTypedModel ( ) ;
394
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'asdf' ) ;
395
+ const success = doc . api . remove ( '/obj/str' ) ;
396
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( undefined ) ;
397
+ expect ( success ) . toBe ( true ) ;
398
+ } ) ;
399
+
400
+ test ( 'returns false if key does not exist' , ( ) => {
401
+ const doc = createTypedModel ( ) ;
402
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'asdf' ) ;
403
+ const success = doc . api . remove ( '/obj/nonexistent' ) ;
404
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'asdf' ) ;
405
+ expect ( success ) . toBe ( false ) ;
406
+ } ) ;
407
+ } ) ;
408
+
409
+ describe ( '"arr" node' , ( ) => {
410
+ test ( 'can remove value in "arr" node' , ( ) => {
411
+ const doc = createTypedModel ( ) ;
412
+ expect ( doc . api . read ( '/arr/1' ) ) . toBe ( 0 ) ;
413
+ const success = doc . api . remove ( '/arr/1' ) ;
414
+ expect ( doc . api . read ( '/arr/1' ) ) . toBe ( undefined ) ;
415
+ expect ( success ) . toBe ( true ) ;
416
+ } ) ;
417
+
418
+ test ( 'returns false if index does not exist' , ( ) => {
419
+ const doc = createTypedModel ( ) ;
420
+ expect ( doc . api . read ( '/arr/1' ) ) . toBe ( 0 ) ;
421
+ const success = doc . api . remove ( '/arr/9999' ) ;
422
+ expect ( doc . api . read ( '/arr/1' ) ) . toBe ( 0 ) ;
423
+ expect ( success ) . toBe ( false ) ;
424
+ } ) ;
425
+
426
+ test ( 'can remove two elements at once' , ( ) => {
427
+ const doc = Model . create ( s . arr ( [ s . con ( 1 ) , s . con ( 2 ) , s . con ( 3 ) , s . con ( 4 ) , s . con ( 5 ) ] ) ) ;
428
+ expect ( doc . api . read ( ) ) . toEqual ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
429
+ const success = doc . api . remove ( '/1' , 2 ) ;
430
+ expect ( doc . api . read ( ) ) . toEqual ( [ 1 , 4 , 5 ] ) ;
431
+ expect ( success ) . toBe ( true ) ;
432
+ } ) ;
433
+ } ) ;
434
+
435
+ describe ( '"str" node' , ( ) => {
436
+ test ( 'can remove text from "str" node' , ( ) => {
437
+ const doc = createTypedModel ( ) ;
438
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'asdf' ) ;
439
+ const success = doc . api . remove ( '/obj/str/1' , 2 ) ;
440
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'af' ) ;
441
+ expect ( success ) . toBe ( true ) ;
442
+ } ) ;
443
+
444
+ test ( 'can remove text from "str" node - 2' , ( ) => {
445
+ const doc = createTypedModel ( ) ;
446
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'asdf' ) ;
447
+ const success = doc . api . remove ( [ 'obj' , 'str' , 0 ] ) ;
448
+ expect ( doc . api . read ( '/obj/str' ) ) . toBe ( 'sdf' ) ;
449
+ expect ( success ) . toBe ( true ) ;
450
+ } ) ;
451
+ } ) ;
452
+
453
+ describe ( '"bin" node' , ( ) => {
454
+ test ( 'can remove bytes from "bin" node' , ( ) => {
455
+ const doc = createTypedModel ( ) ;
456
+ expect ( doc . api . read ( '/bin' ) ) . toEqual ( new Uint8Array ( [ 1 , 2 , 3 ] ) ) ;
457
+ const success = doc . api . remove ( '/bin/1' , 2 ) ;
458
+ expect ( doc . api . read ( '/bin' ) ) . toEqual ( new Uint8Array ( [ 1 ] ) ) ;
459
+ expect ( success ) . toBe ( true ) ;
460
+ } ) ;
461
+
462
+ test ( 'can remove bytes from "bin" node - 2' , ( ) => {
463
+ const doc = createTypedModel ( ) ;
464
+ expect ( doc . api . read ( '/bin' ) ) . toEqual ( new Uint8Array ( [ 1 , 2 , 3 ] ) ) ;
465
+ const success = doc . api . remove ( [ 'bin' , 0 ] ) ;
466
+ expect ( doc . api . read ( '/bin' ) ) . toEqual ( new Uint8Array ( [ 2 , 3 ] ) ) ;
467
+ expect ( success ) . toBe ( true ) ;
468
+ } ) ;
469
+ } ) ;
470
+
471
+ describe ( '"vec" node' , ( ) => {
472
+ test ( 'can remove value from "vec" node' , ( ) => {
473
+ const doc = createTypedModel ( ) ;
474
+ expect ( doc . api . read ( '/vec/0' ) ) . toBe ( 'asdf' ) ;
475
+ const success = doc . api . remove ( '/vec/0' ) ;
476
+ expect ( doc . api . read ( '/vec/0' ) ) . toBe ( undefined ) ;
477
+ expect ( success ) . toBe ( true ) ;
478
+ } ) ;
479
+
480
+ test ( 'returns false if index does not exist' , ( ) => {
481
+ const doc = createTypedModel ( ) ;
482
+ expect ( doc . api . read ( '/vec/0' ) ) . toBe ( 'asdf' ) ;
483
+ const success = doc . api . remove ( '/vec/9999' ) ;
484
+ expect ( doc . api . read ( '/vec/0' ) ) . toBe ( 'asdf' ) ;
485
+ expect ( success ) . toBe ( false ) ;
486
+ } ) ;
487
+ } ) ;
488
+ } ) ;
489
+
390
490
test . todo ( '.merge()' ) ;
391
491
test . todo ( '.shallowMerge()' ) ;
0 commit comments