@@ -387,5 +387,105 @@ describe('.replace()', () => {
387387 } ) ;
388388} ) ;
389389
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+
390490test . todo ( '.merge()' ) ;
391491test . todo ( '.shallowMerge()' ) ;
0 commit comments