Skip to content

Commit 1be624e

Browse files
committed
单元测试 (GM_setValues, GM_deleteValue, GM_deleteValues)
1 parent 0f6c660 commit 1be624e

1 file changed

Lines changed: 226 additions & 0 deletions

File tree

src/app/service/content/gm_api.test.ts

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.]+##undefined$/),
502+
c: expect.stringMatching(/^##[\d.]+##undefined$/),
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.]+##undefined$/),
650+
c: expect.stringMatching(/^##[\d.]+##undefined$/),
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

Comments
 (0)