1- import { describe , expect , it , vi } from "vitest" ;
1+ import { describe , expect , it , vi , type Mock } from "vitest" ;
22import ExecScript from "./exec_script" ;
33import type { ScriptLoadInfo } from "../service_worker/types" ;
44import type { GMInfoEnv , ScriptFunc } from "./types" ;
@@ -107,6 +107,40 @@ describe.concurrent("window.*", () => {
107107} ) ;
108108
109109describe . concurrent ( "GM Api" , ( ) => {
110+ const valueDaoUpdatetimeFix = (
111+ mockSendMessage : Mock < ( ...args : any [ ] ) => any > ,
112+ exec : ExecScript ,
113+ script : ScriptLoadInfo
114+ ) => {
115+ const forceUpdateTimeRefreshIdx = mockSendMessage . mock . calls . findIndex ( ( entry ) => {
116+ const p1 = entry ?. [ 0 ] ?. data ?. params [ 1 ] ;
117+ return typeof p1 === "string" && p1 ?. match ( / _ _ f o r c e U p d a t e T i m e R e f r e s h : : 0 \. \d + _ _ / ) ;
118+ } ) ;
119+ if ( forceUpdateTimeRefreshIdx >= 0 ) {
120+ const actualCall = mockSendMessage . mock . calls [ forceUpdateTimeRefreshIdx ] [ 0 ] ;
121+ expect ( mockSendMessage ) . toHaveBeenNthCalledWith (
122+ forceUpdateTimeRefreshIdx + 1 ,
123+ expect . objectContaining ( {
124+ action : "content/runtime/gmApi" ,
125+ data : {
126+ api : "GM_setValue" ,
127+ params : [ expect . stringMatching ( / ^ .+ : : \d + $ / ) , expect . stringMatching ( / _ _ f o r c e U p d a t e T i m e R e f r e s h : : 0 \. \d + _ _ / ) ] ,
128+ runFlag : expect . any ( String ) ,
129+ uuid : undefined ,
130+ } ,
131+ } )
132+ ) ;
133+ exec . valueUpdate ( {
134+ id : actualCall . data . params [ 0 ] ,
135+ entries : encodeMessage ( [ [ actualCall . data . params [ 1 ] , undefined , undefined ] ] ) ,
136+ uuid : script . uuid ,
137+ storageName : script . uuid ,
138+ sender : { runFlag : exec . sandboxContext ! . runFlag , tabId : - 2 } ,
139+ valueUpdated : false ,
140+ updatetime : Date . now ( ) ,
141+ } ) ;
142+ }
143+ } ;
110144 it . concurrent ( "GM_getValue" , async ( ) => {
111145 const script = Object . assign ( { } , scriptRes ) as ScriptLoadInfo ;
112146 script . value = { test : "ok" } ;
@@ -123,10 +157,15 @@ describe.concurrent("GM Api", () => {
123157 script . value = { test : "ok" } ;
124158 script . metadata . grant = [ "GM.getValue" ] ;
125159 script . code = `return GM.getValue("test").then(v=>v+"!");` ;
126- // @ts -ignore
127- const exec = new ExecScript ( script , undefined , undefined , nilFn , envInfo ) ;
160+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
161+ const mockMessage = {
162+ sendMessage : mockSendMessage ,
163+ } as unknown as Message ;
164+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
128165 exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
129- const ret = await exec . exec ( ) ;
166+ const retPromise = exec . exec ( ) ;
167+ valueDaoUpdatetimeFix ( mockSendMessage , exec , script ) ;
168+ const ret = await retPromise ;
130169 expect ( ret ) . toEqual ( "ok!" ) ;
131170 } ) ;
132171
@@ -163,10 +202,15 @@ describe.concurrent("GM Api", () => {
163202 script . value = { test1 : "23" , test2 : "45" , test3 : "67" } ;
164203 script . metadata . grant = [ "GM.listValues" ] ;
165204 script . code = `return GM.listValues().then(v=>v.join("-"));` ;
166- // @ts -ignore
167- const exec = new ExecScript ( script , undefined , undefined , nilFn , envInfo ) ;
205+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
206+ const mockMessage = {
207+ sendMessage : mockSendMessage ,
208+ } as unknown as Message ;
209+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
168210 exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
169- const ret = await exec . exec ( ) ;
211+ const retPromise = exec . exec ( ) ;
212+ valueDaoUpdatetimeFix ( mockSendMessage , exec , script ) ;
213+ const ret = await retPromise ;
170214 expect ( ret ) . toEqual ( "test1-test2-test3" ) ;
171215 } ) ;
172216
@@ -179,10 +223,15 @@ describe.concurrent("GM Api", () => {
179223 script . value . test1 = "40" ;
180224 script . metadata . grant = [ "GM.listValues" ] ;
181225 script . code = `return GM.listValues().then(v=>v.join("-"));` ;
182- // @ts -ignore
183- const exec = new ExecScript ( script , undefined , undefined , nilFn , envInfo ) ;
226+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
227+ const mockMessage = {
228+ sendMessage : mockSendMessage ,
229+ } as unknown as Message ;
230+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
184231 exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
185- const ret = await exec . exec ( ) ;
232+ const retPromise = exec . exec ( ) ;
233+ valueDaoUpdatetimeFix ( mockSendMessage , exec , script ) ;
234+ const ret = await retPromise ;
186235 expect ( ret ) . toEqual ( "test5-test2-test3-test1" ) ; // TM也沒有sort
187236 } ) ;
188237
@@ -212,10 +261,15 @@ describe.concurrent("GM Api", () => {
212261 script . value = { test1 : "23" , test2 : 45 , test3 : "67" } ;
213262 script . metadata . grant = [ "GM.getValues" ] ;
214263 script . code = `return GM.getValues(["test2", "test3", "test1"]).then(v=>v);` ;
215- // @ts -ignore
216- const exec = new ExecScript ( script , undefined , undefined , nilFn , envInfo ) ;
264+ const mockSendMessage = vi . fn ( ) . mockResolvedValue ( { code : 0 } ) ;
265+ const mockMessage = {
266+ sendMessage : mockSendMessage ,
267+ } as unknown as Message ;
268+ const exec = new ExecScript ( script , "content" , mockMessage , nilFn , envInfo ) ;
217269 exec . scriptFunc = compileScript ( compileScriptCode ( script ) ) ;
218- const ret = await exec . exec ( ) ;
270+ const retPromise = exec . exec ( ) ;
271+ valueDaoUpdatetimeFix ( mockSendMessage , exec , script ) ;
272+ const ret = await retPromise ;
219273 expect ( ret . test1 ) . toEqual ( "23" ) ;
220274 expect ( ret . test2 ) . toEqual ( 45 ) ;
221275 expect ( ret . test3 ) . toEqual ( "67" ) ;
@@ -493,7 +547,7 @@ describe.concurrent("GM_value", () => {
493547 api : "GM_setValues" ,
494548 params : [
495549 // event id
496- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
550+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
497551 // the object payload
498552 expect . objectContaining ( {
499553 k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
@@ -519,7 +573,7 @@ describe.concurrent("GM_value", () => {
519573 api : "GM_setValues" ,
520574 params : [
521575 // event id
522- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
576+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
523577 // the object payload
524578 expect . objectContaining ( {
525579 k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
@@ -570,7 +624,7 @@ describe.concurrent("GM_value", () => {
570624 api : "GM_setValues" ,
571625 params : [
572626 // event id
573- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
627+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
574628 // the object payload
575629 expect . objectContaining ( {
576630 k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
@@ -596,7 +650,7 @@ describe.concurrent("GM_value", () => {
596650 api : "GM_setValue" ,
597651 params : [
598652 // event id
599- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
653+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
600654 // the string payload
601655 "b" ,
602656 ] ,
@@ -641,7 +695,7 @@ describe.concurrent("GM_value", () => {
641695 api : "GM_setValues" ,
642696 params : [
643697 // event id
644- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
698+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
645699 // the object payload
646700 expect . objectContaining ( {
647701 k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
@@ -667,7 +721,7 @@ describe.concurrent("GM_value", () => {
667721 api : "GM_setValues" ,
668722 params : [
669723 // event id
670- expect . stringMatching ( / ^ .+ : : \d $ / ) ,
724+ expect . stringMatching ( / ^ .+ : : \d + $ / ) ,
671725 // the string payload
672726 expect . objectContaining ( {
673727 k : expect . stringMatching ( / ^ # # [ \d . ] + # # $ / ) ,
@@ -715,6 +769,7 @@ describe.concurrent("GM_value", () => {
715769 storageName : script . uuid ,
716770 sender : { runFlag : exec . sandboxContext ! . runFlag , tabId : - 2 } ,
717771 valueUpdated : true ,
772+ updatetime : Date . now ( ) ,
718773 } ) ;
719774 const ret = await retPromise ;
720775 expect ( ret ) . toEqual ( { name : "param1" , oldValue : undefined , newValue : 123 , remote : false } ) ;
@@ -750,6 +805,7 @@ describe.concurrent("GM_value", () => {
750805 storageName : "testStorage" ,
751806 sender : { runFlag : "user" , tabId : - 2 } ,
752807 valueUpdated : true ,
808+ updatetime : Date . now ( ) ,
753809 } ) ;
754810 const ret2 = await retPromise ;
755811 expect ( ret2 ) . toEqual ( { name : "param2" , oldValue : undefined , newValue : 456 , remote : true } ) ;
@@ -785,6 +841,7 @@ describe.concurrent("GM_value", () => {
785841 storageName : script . uuid ,
786842 sender : { runFlag : exec . sandboxContext ! . runFlag , tabId : - 2 } ,
787843 valueUpdated : true ,
844+ updatetime : Date . now ( ) ,
788845 } ) ;
789846
790847 const ret = await retPromise ;
0 commit comments