@@ -461,6 +461,158 @@ describe.concurrent("GM_value", () => {
461461 expect ( ret ) . toEqual ( { ret1 : 123 , ret2 : 456 } ) ;
462462 } ) ;
463463
464+ it . concurrent ( "value引用问题 #1141" , async ( ) => {
465+ const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
466+ script . metadata . grant = [ "GM_getValue" , "GM_setValue" , "GM_getValues" ] ;
467+ script . code = `
468+ const value1 = {
469+ arr: [1],
470+ obj: {
471+ a: "1"
472+ },
473+ str: "123",
474+ }
475+ GM_setValue("abc", value1);
476+
477+ const allValues1 = GM_getValues();
478+
479+ allValues1.abc.arr.push(8);
480+ allValues1.n1 = 5;
481+ allValues1.n2 = {c: 8};
482+ delete allValues1.abc.obj.a;
483+ allValues1.abc.str = "0";
484+
485+ const value2 = GM_getValue("abc");
486+
487+ value2.arr.push(2);
488+ value2.obj.b = 2;
489+ value2.str = "456";
490+
491+ value1.arr.push(3);
492+ value1.obj.b = 3;
493+ value1.str = "789";
494+
495+ const value3 = GM_getValue("abc");
496+
497+ const values1 = GM_getValues(["abc", "n3"]);
498+
499+ const values2 = GM_getValues({"abc":{}, "n4":{}, "n5":"hi"});
500+
501+ values2.abc.arr.push(2);
502+ values2.abc.obj.b = 2;
503+ values2.abc.str = "456";
504+
505+ const allValues2 = GM_getValues();
506+
507+
508+ const value4 = GM_getValue("abc");
509+ const value5 = GM_getValue("abc");
510+ value5.arr[0] = 9;
511+ GM_setValue("abc", value5);
512+
513+ const value6 = GM_getValue("abc");
514+
515+ return { value1, value2, value3, values1,values2, allValues1, allValues2, value4, value5, value6 };
516+ ` ;
517+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
518+ const mockMessage = {
519+ sendMessage : mockSendMessage ,
520+ } as unknown as Message ;
521+ // @ts -ignore
522+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
523+ exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
524+ const ret = await exec . exec ( ) ;
525+
526+ expect ( mockSendMessage ) . toHaveBeenCalled ( ) ;
527+ expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 2 ) ;
528+
529+ expect ( ret ) . toEqual ( {
530+ value1 : {
531+ arr : [ 1 , 3 ] ,
532+ obj : {
533+ a : "1" ,
534+ b : 3 ,
535+ } ,
536+ str : "789" ,
537+ } ,
538+ value2 : {
539+ arr : [ 1 , 2 ] ,
540+ obj : {
541+ a : "1" ,
542+ b : 2 ,
543+ } ,
544+ str : "456" ,
545+ } ,
546+ value3 : {
547+ arr : [ 1 ] ,
548+ obj : {
549+ a : "1" ,
550+ } ,
551+ str : "123" ,
552+ } ,
553+ values1 : {
554+ abc : {
555+ arr : [ 1 ] ,
556+ obj : {
557+ a : "1" ,
558+ } ,
559+ str : "123" ,
560+ } ,
561+ } ,
562+ values2 : {
563+ abc : {
564+ arr : [ 1 , 2 ] ,
565+ obj : {
566+ a : "1" ,
567+ b : 2 ,
568+ } ,
569+ str : "456" ,
570+ } ,
571+ n4 : { } ,
572+ n5 : "hi" ,
573+ } ,
574+ allValues1 : {
575+ abc : {
576+ arr : [ 1 , 8 ] ,
577+ obj : { } ,
578+ str : "0" ,
579+ } ,
580+ n1 : 5 ,
581+ n2 : { c : 8 } ,
582+ } ,
583+ allValues2 : {
584+ abc : {
585+ arr : [ 1 ] ,
586+ obj : {
587+ a : "1" ,
588+ } ,
589+ str : "123" ,
590+ } ,
591+ } ,
592+ value4 : {
593+ arr : [ 1 ] ,
594+ obj : {
595+ a : "1" ,
596+ } ,
597+ str : "123" ,
598+ } ,
599+ value5 : {
600+ arr : [ 9 ] ,
601+ obj : {
602+ a : "1" ,
603+ } ,
604+ str : "123" ,
605+ } ,
606+ value6 : {
607+ arr : [ 9 ] ,
608+ obj : {
609+ a : "1" ,
610+ } ,
611+ str : "123" ,
612+ } ,
613+ } ) ;
614+ } ) ;
615+
464616 it . concurrent ( "GM_setValues" , async ( ) => {
465617 const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
466618 script . metadata . grant = [ "GM_getValues" , "GM_setValues" ] ;
@@ -499,7 +651,7 @@ describe.concurrent("GM_value", () => {
499651 api : "GM_setValues" ,
500652 params : [
501653 // event id
502- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
654+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
503655 // the object payload
504656 keyValuePairs1 ,
505657 ] ,
@@ -523,7 +675,7 @@ describe.concurrent("GM_value", () => {
523675 api : "GM_setValues" ,
524676 params : [
525677 // event id
526- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
678+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
527679 // the object payload
528680 keyValuePairs2 ,
529681 ] ,
@@ -573,7 +725,7 @@ describe.concurrent("GM_value", () => {
573725 api : "GM_setValues" ,
574726 params : [
575727 // event id
576- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
728+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
577729 // the object payload
578730 keyValuePairs1 ,
579731 ] ,
@@ -592,7 +744,7 @@ describe.concurrent("GM_value", () => {
592744 api : "GM_setValue" ,
593745 params : [
594746 // event id
595- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
747+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
596748 // the string payload
597749 "b" ,
598750 ] ,
@@ -643,7 +795,7 @@ describe.concurrent("GM_value", () => {
643795 api : "GM_setValues" ,
644796 params : [
645797 // event id
646- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
798+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
647799 // the object payload
648800 keyValuePairs1 ,
649801 ] ,
@@ -667,7 +819,7 @@ describe.concurrent("GM_value", () => {
667819 api : "GM_setValues" ,
668820 params : [
669821 // event id
670- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
822+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
671823 // the string payload
672824 keyValuePairs2 ,
673825 ] ,
0 commit comments