step8-callback-handling.test.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. const assert = require('assert');
  2. const fs = require('fs');
  3. const source = fs.readFileSync('background.js', 'utf8');
  4. function extractFunction(name) {
  5. const start = source.indexOf(`function ${name}(`);
  6. if (start < 0) {
  7. throw new Error(`missing function ${name}`);
  8. }
  9. const braceStart = source.indexOf('{', start);
  10. let depth = 0;
  11. let end = braceStart;
  12. for (; end < source.length; end++) {
  13. const ch = source[end];
  14. if (ch === '{') depth += 1;
  15. if (ch === '}') {
  16. depth -= 1;
  17. if (depth === 0) {
  18. end += 1;
  19. break;
  20. }
  21. }
  22. }
  23. return source.slice(start, end);
  24. }
  25. const bundle = [
  26. extractFunction('parseUrlSafely'),
  27. extractFunction('isLocalhostOAuthCallbackUrl'),
  28. extractFunction('getStep8CallbackUrlFromNavigation'),
  29. extractFunction('getStep8CallbackUrlFromTabUpdate'),
  30. ].join('\n');
  31. const api = new Function(`${bundle}; return { getStep8CallbackUrlFromNavigation, getStep8CallbackUrlFromTabUpdate };`)();
  32. const callbackUrl = 'http://127.0.0.1:8317/codex/callback?code=abc&state=xyz';
  33. assert.strictEqual(
  34. api.getStep8CallbackUrlFromNavigation({
  35. tabId: 123,
  36. frameId: 0,
  37. url: callbackUrl,
  38. }, 123),
  39. callbackUrl,
  40. '应识别 onCommitted/onBeforeNavigate 命中的 callback'
  41. );
  42. assert.strictEqual(
  43. api.getStep8CallbackUrlFromNavigation({
  44. tabId: 123,
  45. frameId: 1,
  46. url: callbackUrl,
  47. }, 123),
  48. '',
  49. '子 frame 不应命中 callback'
  50. );
  51. assert.strictEqual(
  52. api.getStep8CallbackUrlFromNavigation({
  53. tabId: 999,
  54. frameId: 0,
  55. url: callbackUrl,
  56. }, 123),
  57. '',
  58. '非 signup tab 不应命中 callback'
  59. );
  60. assert.strictEqual(
  61. api.getStep8CallbackUrlFromTabUpdate(
  62. 123,
  63. { url: callbackUrl },
  64. { url: callbackUrl },
  65. 123
  66. ),
  67. callbackUrl,
  68. 'tabs.onUpdated 应能从 changeInfo.url 捕获 callback'
  69. );
  70. assert.strictEqual(
  71. api.getStep8CallbackUrlFromTabUpdate(
  72. 123,
  73. {},
  74. { url: callbackUrl },
  75. 123
  76. ),
  77. callbackUrl,
  78. 'tabs.onUpdated 应能从 tab.url 兜底捕获 callback'
  79. );
  80. assert.strictEqual(
  81. api.getStep8CallbackUrlFromTabUpdate(
  82. 999,
  83. { url: callbackUrl },
  84. { url: callbackUrl },
  85. 123
  86. ),
  87. '',
  88. '非 signup tab 的 tabs.onUpdated 不应命中 callback'
  89. );
  90. console.log('step8 callback handling tests passed');