@@ -434,6 +434,232 @@ describe("GM_value", () => {
434434
435435 expect ( ret ) . toEqual ( { ret1 : 123 , ret2 : 456 } ) ;
436436 } ) ;
437+
438+ it ( "GM_setValues" , async ( ) => {
439+ const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
440+ script . metadata . grant = [ "GM_getValues" , "GM_setValues" ] ;
441+ script . code = `
442+ GM_setValues({"a":123,"b":456,"c":"789"});
443+ let ret1 = GM_getValues(["a","b","c"]);
444+ // 设置再删除
445+ GM_setValues({"a": undefined, "c": undefined});
446+ let ret2 = GM_getValues(["a","b","c"]);
447+ return {ret1, ret2};
448+ ` ;
449+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
450+ const mockMessage = {
451+ sendMessage : mockSendMessage ,
452+ } as unknown as Message ;
453+ // @ts -ignore
454+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
455+ exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
456+ const ret = await exec . exec ( ) ;
457+
458+ expect ( mockSendMessage ) . toHaveBeenCalled ( ) ;
459+ expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 2 ) ;
460+
461+ // 第一次调用:设置值为 123
462+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
463+ 1 ,
464+ expect . objectContaining ( {
465+ action : "content/runtime/gmApi" ,
466+ data : {
467+ api : "GM_setValues" ,
468+ params : [
469+ // event id
470+ expect . stringMatching ( / ^ .+ : : \d $ / ) ,
471+ // the object payload
472+ expect . objectContaining ( {
473+ k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
474+ m : expect . objectContaining ( {
475+ a : 123 ,
476+ b : 456 ,
477+ c : "789" ,
478+ } ) ,
479+ } ) ,
480+ ] ,
481+ runFlag : expect . any ( String ) ,
482+ uuid : undefined ,
483+ } ,
484+ } )
485+ ) ;
486+
487+ // 第二次调用:删除值(设置为 undefined)
488+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
489+ 2 ,
490+ expect . objectContaining ( {
491+ action : "content/runtime/gmApi" ,
492+ data : {
493+ api : "GM_setValues" ,
494+ params : [
495+ // event id
496+ expect . stringMatching ( / ^ .+ : : \d $ / ) ,
497+ // the object payload
498+ expect . objectContaining ( {
499+ k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
500+ m : expect . objectContaining ( {
501+ a : expect . stringMatching ( / ^ # # [ \d . ] + # # u n d e f i n e d $ / ) ,
502+ c : expect . stringMatching ( / ^ # # [ \d . ] + # # u n d e f i n e d $ / ) ,
503+ } ) ,
504+ } ) ,
505+ ] ,
506+ runFlag : expect . any ( String ) ,
507+ uuid : undefined ,
508+ } ,
509+ } )
510+ ) ;
511+
512+ expect ( ret ) . toEqual ( { ret1 : { a : 123 , b : 456 , c : "789" } , ret2 : { b : 456 } } ) ;
513+ } ) ;
514+
515+ it ( "GM_deleteValue" , async ( ) => {
516+ const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
517+ script . metadata . grant = [ "GM_getValues" , "GM_setValues" , "GM_deleteValue" ] ;
518+ script . code = `
519+ GM_setValues({"a":123,"b":456,"c":"789"});
520+ let ret1 = GM_getValues(["a","b","c"]);
521+ // 设置再删除
522+ GM_deleteValue("b");
523+ let ret2 = GM_getValues(["a","b","c"]);
524+ return {ret1, ret2};
525+ ` ;
526+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
527+ const mockMessage = {
528+ sendMessage : mockSendMessage ,
529+ } as unknown as Message ;
530+ // @ts -ignore
531+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
532+ exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
533+ const ret = await exec . exec ( ) ;
534+
535+ expect ( mockSendMessage ) . toHaveBeenCalled ( ) ;
536+ expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 2 ) ;
537+
538+ // 第一次调用:设置值为 123
539+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
540+ 1 ,
541+ expect . objectContaining ( {
542+ action : "content/runtime/gmApi" ,
543+ data : {
544+ api : "GM_setValues" ,
545+ params : [
546+ // event id
547+ expect . stringMatching ( / ^ .+ : : \d $ / ) ,
548+ // the object payload
549+ expect . objectContaining ( {
550+ k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
551+ m : expect . objectContaining ( {
552+ a : 123 ,
553+ b : 456 ,
554+ c : "789" ,
555+ } ) ,
556+ } ) ,
557+ ] ,
558+ runFlag : expect . any ( String ) ,
559+ uuid : undefined ,
560+ } ,
561+ } )
562+ ) ;
563+
564+ // 第二次调用:删除值(设置为 undefined)
565+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
566+ 2 ,
567+ expect . objectContaining ( {
568+ action : "content/runtime/gmApi" ,
569+ data : {
570+ api : "GM_setValue" ,
571+ params : [
572+ // event id
573+ expect . stringMatching ( / ^ .+ : : \d $ / ) ,
574+ // the string payload
575+ "b" ,
576+ ] ,
577+ runFlag : expect . any ( String ) ,
578+ uuid : undefined ,
579+ } ,
580+ } )
581+ ) ;
582+
583+ expect ( ret ) . toEqual ( { ret1 : { a : 123 , b : 456 , c : "789" } , ret2 : { a : 123 , c : "789" } } ) ;
584+ } ) ;
585+
586+ it ( "GM_deleteValues" , async ( ) => {
587+ const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
588+ script . metadata . grant = [ "GM_getValues" , "GM_setValues" , "GM_deleteValues" ] ;
589+ script . code = `
590+ GM_setValues({"a":123,"b":456,"c":"789"});
591+ let ret1 = GM_getValues(["a","b","c"]);
592+ // 设置再删除
593+ GM_deleteValues(["a","c"]);
594+ let ret2 = GM_getValues(["a","b","c"]);
595+ return {ret1, ret2};
596+ ` ;
597+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
598+ const mockMessage = {
599+ sendMessage : mockSendMessage ,
600+ } as unknown as Message ;
601+ // @ts -ignore
602+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
603+ exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
604+ const ret = await exec . exec ( ) ;
605+
606+ expect ( mockSendMessage ) . toHaveBeenCalled ( ) ;
607+ expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 2 ) ;
608+
609+ // 第一次调用:设置值为 123
610+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
611+ 1 ,
612+ expect . objectContaining ( {
613+ action : "content/runtime/gmApi" ,
614+ data : {
615+ api : "GM_setValues" ,
616+ params : [
617+ // event id
618+ expect . stringMatching ( / ^ .+ : : \d $ / ) ,
619+ // the object payload
620+ expect . objectContaining ( {
621+ k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
622+ m : expect . objectContaining ( {
623+ a : 123 ,
624+ b : 456 ,
625+ c : "789" ,
626+ } ) ,
627+ } ) ,
628+ ] ,
629+ runFlag : expect . any ( String ) ,
630+ uuid : undefined ,
631+ } ,
632+ } )
633+ ) ;
634+
635+ // 第二次调用:删除值(设置为 undefined)
636+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
637+ 2 ,
638+ expect . objectContaining ( {
639+ action : "content/runtime/gmApi" ,
640+ data : {
641+ api : "GM_setValues" ,
642+ params : [
643+ // event id
644+ expect . stringMatching ( / ^ .+ : : \d $ / ) ,
645+ // the string payload
646+ expect . objectContaining ( {
647+ k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
648+ m : expect . objectContaining ( {
649+ a : expect . stringMatching ( / ^ # # [ \d . ] + # # u n d e f i n e d $ / ) ,
650+ c : expect . stringMatching ( / ^ # # [ \d . ] + # # u n d e f i n e d $ / ) ,
651+ } ) ,
652+ } ) ,
653+ ] ,
654+ runFlag : expect . any ( String ) ,
655+ uuid : undefined ,
656+ } ,
657+ } )
658+ ) ;
659+
660+ expect ( ret ) . toEqual ( { ret1 : { a : 123 , b : 456 , c : "789" } , ret2 : { b : 456 } } ) ;
661+ } ) ;
662+
437663 it ( "GM_addValueChangeListener" , async ( ) => {
438664 const script = Object . assign ( { uuid : uuidv4 ( ) } , scriptRes ) as ScriptLoadInfo ;
439665 script . metadata . grant = [ "GM_getValue" , "GM_setValue" , "GM_addValueChangeListener" ] ;
0 commit comments