@@ -686,16 +686,16 @@ describe("GM_value", () => {
686686 expect ( ret ) . toEqual ( { ret1 : { a : 123 , b : 456 , c : "789" } , ret2 : { b : 456 } } ) ;
687687 } ) ;
688688
689- it ( "GM_addValueChangeListener" , async ( ) => {
689+ it ( "GM_addValueChangeListener - remote: false " , async ( ) => {
690690 const script = Object . assign ( { uuid : uuidv4 ( ) } , scriptRes ) as ScriptLoadInfo ;
691691 script . metadata . grant = [ "GM_getValue" , "GM_setValue" , "GM_addValueChangeListener" ] ;
692692 script . metadata . storageName = [ "testStorage" ] ;
693693 script . code = `
694694 return new Promise(resolve=>{
695- GM_addValueChangeListener("a ", (name, oldValue, newValue, remote)=>{
695+ GM_addValueChangeListener("param1 ", (name, oldValue, newValue, remote)=>{
696696 resolve({name, oldValue, newValue, remote});
697697 });
698- GM_setValue("a ", 123);
698+ GM_setValue("param1 ", 123);
699699 });
700700 ` ;
701701 const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
@@ -705,31 +705,54 @@ describe("GM_value", () => {
705705 // @ts -ignore
706706 const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
707707 exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
708- let retPromise = exec . exec ( ) ;
708+ const retPromise = exec . exec ( ) ;
709709 expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 1 ) ;
710710 // 模拟值变化
711711 exec . valueUpdate ( {
712- id : "123 " ,
713- entries : encodeMessage ( [ [ "a " , 123 , undefined ] ] ) ,
712+ id : "id-1 " ,
713+ entries : encodeMessage ( [ [ "param1 " , 123 , undefined ] ] ) ,
714714 uuid : script . uuid ,
715715 storageName : script . uuid ,
716716 sender : { runFlag : exec . sandboxContext ! . runFlag , tabId : - 2 } ,
717+ valueUpdated : true ,
717718 } ) ;
718719 const ret = await retPromise ;
719- expect ( ret ) . toEqual ( { name : "a" , oldValue : undefined , newValue : 123 , remote : false } ) ;
720+ expect ( ret ) . toEqual ( { name : "param1" , oldValue : undefined , newValue : 123 , remote : false } ) ;
721+ } ) ;
722+
723+ it ( "GM_addValueChangeListener - remote: true" , async ( ) => {
724+ const script = Object . assign ( { uuid : uuidv4 ( ) } , scriptRes ) as ScriptLoadInfo ;
725+ script . metadata . grant = [ "GM_getValue" , "GM_setValue" , "GM_addValueChangeListener" ] ;
726+ script . metadata . storageName = [ "testStorage" ] ;
727+ script . code = `
728+ return new Promise(resolve=>{
729+ GM_addValueChangeListener("param2", (name, oldValue, newValue, remote)=>{
730+ resolve({name, oldValue, newValue, remote});
731+ });
732+ GM_setValue("param2", 456);
733+ });
734+ ` ;
735+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
736+ const mockMessage = {
737+ sendMessage : mockSendMessage ,
738+ } as unknown as Message ;
739+ // @ts -ignore
740+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
741+ exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
720742 // remote = true
721- retPromise = exec . exec ( ) ;
722- expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 2 ) ;
743+ const retPromise = exec . exec ( ) ;
744+ expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 1 ) ;
723745 // 模拟值变化
724746 exec . valueUpdate ( {
725- id : "123 " ,
726- entries : encodeMessage ( [ [ "a " , 123 , undefined ] ] ) ,
747+ id : "id-2 " ,
748+ entries : encodeMessage ( [ [ "param2 " , 456 , undefined ] ] ) ,
727749 uuid : script . uuid ,
728750 storageName : "testStorage" ,
729751 sender : { runFlag : "user" , tabId : - 2 } ,
752+ valueUpdated : true ,
730753 } ) ;
731754 const ret2 = await retPromise ;
732- expect ( ret2 ) . toEqual ( { name : "a " , oldValue : undefined , newValue : 123 , remote : true } ) ;
755+ expect ( ret2 ) . toEqual ( { name : "param2 " , oldValue : undefined , newValue : 456 , remote : true } ) ;
733756 } ) ;
734757 it ( "异步GM.setValue,等待回调" , async ( ) => {
735758 const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
@@ -750,14 +773,18 @@ describe("GM_value", () => {
750773 expect ( mockSendMessage ) . toHaveBeenCalledTimes ( 1 ) ;
751774 // 获取调用参数
752775 const actualCall = mockSendMessage . mock . calls [ 0 ] [ 0 ] ;
753- console . log ( "actualCall" , actualCall . data . params [ 0 ] ) ;
776+ const id = actualCall . data . params [ 0 ] ;
777+
778+ expect ( id ) . toBeTypeOf ( "string" ) ;
779+ expect ( id . length ) . greaterThan ( 0 ) ;
754780 // 触发valueUpdate
755781 exec . valueUpdate ( {
756- id : actualCall . data . params [ 0 ] ,
782+ id : id ,
757783 entries : encodeMessage ( [ [ "a" , 123 , undefined ] ] ) ,
758784 uuid : script . uuid ,
759785 storageName : script . uuid ,
760786 sender : { runFlag : exec . sandboxContext ! . runFlag , tabId : - 2 } ,
787+ valueUpdated : true ,
761788 } ) ;
762789
763790 const ret = await retPromise ;
0 commit comments