script.test.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { ERR_META_SPACE_INSIDE, parseMeta } from '@/background/utils/script';
  2. const baseMeta = {
  3. include: [],
  4. exclude: [],
  5. match: [],
  6. excludeMatch: [],
  7. require: [],
  8. grant: [],
  9. resources: {},
  10. };
  11. test('parseMeta', () => {
  12. expect(parseMeta(`\
  13. // ==UserScript==
  14. // @name New Script
  15. // @namespace Violentmonkey Scripts
  16. // @description This is a script
  17. // @version 1.0
  18. // @match *://*/*
  19. // @grant none
  20. // ==/UserScript==
  21. `)).toEqual(Object.assign({}, baseMeta, {
  22. name: 'New Script',
  23. namespace: 'Violentmonkey Scripts',
  24. description: 'This is a script',
  25. version: '1.0',
  26. match: ['*://*/*'],
  27. grant: ['none'],
  28. }));
  29. expect(parseMeta(`\
  30. // ==UserScript==
  31. // @name New Script
  32. // @namespace Violentmonkey Scripts
  33. // @match *://*/*
  34. // @noframes
  35. // ==/UserScript==
  36. `)).toEqual(Object.assign({}, baseMeta, {
  37. name: 'New Script',
  38. namespace: 'Violentmonkey Scripts',
  39. match: ['*://*/*'],
  40. noframes: true,
  41. }));
  42. });
  43. test('parseMetaIrregularities', () => {
  44. const baseMetaFoo = {
  45. ...baseMeta,
  46. name: 'foo',
  47. };
  48. const parseWeirdMeta = code => {
  49. const errors = [];
  50. const res = parseMeta(code, { errors });
  51. return errors.length ? [res, ...errors] : res;
  52. };
  53. expect(parseWeirdMeta(`\
  54. // ==UserScript==============
  55. // @name foo
  56. // @namespace bar
  57. // ==/UserScript===================
  58. `)).toEqual({
  59. ...baseMetaFoo,
  60. namespace: 'bar',
  61. });
  62. expect(parseWeirdMeta(`\
  63. // ==UserScript==
  64. //@name foo
  65. // ==/UserScript==`)).toEqual([baseMetaFoo,
  66. ERR_META_SPACE_INSIDE + `"//@name foo"`,
  67. ]);
  68. expect(parseWeirdMeta(`\
  69. //==UserScript==
  70. // @name foo
  71. //\t==/UserScript==`)).toEqual([baseMetaFoo,
  72. ERR_META_SPACE_INSIDE + `"//==UserScript=="`,
  73. ERR_META_SPACE_INSIDE + String.raw`"//\t==/UserScript=="`,
  74. ]);
  75. expect(parseWeirdMeta(`\
  76. /*
  77. //
  78. ==UserScript==
  79. // @name foo
  80. //
  81. ==/UserScript==
  82. */`)).toBeFalsy();
  83. });