index.test.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import test from 'tape';
  2. import {
  3. isRemote, compareVersion, debounce, throttle,
  4. } from '#/common';
  5. import { mocker } from '../mock';
  6. test('isRemote', (t) => {
  7. t.notOk(isRemote());
  8. t.notOk(isRemote('file:///tmp/file'));
  9. t.notOk(isRemote('data:text/plain,hello,world'));
  10. t.ok(isRemote('http://www.google.com'));
  11. t.ok(isRemote('https://www.google.com'));
  12. t.notOk(isRemote('http://localhost/a.user.js'));
  13. t.notOk(isRemote('https://localhost/a.user.js'));
  14. t.notOk(isRemote('http://127.0.0.1/a.user.js'));
  15. t.notOk(isRemote('http://127.0.0.1:5555/a.user.js'));
  16. t.notOk(isRemote('http://192.168.1.32/a.user.js'));
  17. t.notOk(isRemote('http://172.16.0.1/a.user.js'));
  18. t.notOk(isRemote('http://10.0.0.1/a.user.js'));
  19. t.notOk(isRemote('http://[::1]/a.user.js'));
  20. t.notOk(isRemote('http://[fe80::6996:2ba9:37e6:8762]/a.user.js'));
  21. t.notOk(isRemote('http://[fc00::90:90]/a.user.js'));
  22. t.notOk(isRemote('http://example.test/a.user.js'));
  23. t.notOk(isRemote('https://example.example/a.user.js'));
  24. t.notOk(isRemote('http://example.invalid/a.user.js'));
  25. t.notOk(isRemote('https://example.localhost/a.user.js'));
  26. t.end();
  27. });
  28. test('compareVersion', (t) => {
  29. t.equal(compareVersion('1.2.3', '1.2.3'), 0);
  30. t.equal(compareVersion('1.2.3', '1.2.0'), 1);
  31. t.equal(compareVersion('1.2.3', '1.2.4'), -1);
  32. t.equal(compareVersion('1.2.0', '1.2'), 0);
  33. t.equal(compareVersion('1.2.1', '1.2'), 1);
  34. t.equal(compareVersion('1.1.9', '1.2'), -1);
  35. t.equal(compareVersion('1.10', '1.9'), 1);
  36. t.deepEqual([
  37. '1.2.3',
  38. '1.2.3-alpha',
  39. '1.0.0-x.7.z.92',
  40. '1.0.0-alpha.1',
  41. '1.0.0-alpha',
  42. '4.11.6',
  43. '4.2.0',
  44. '1.5.19',
  45. '1.5.5',
  46. '4.1.3',
  47. '2.3.1',
  48. '10.5.5',
  49. '11.3.0',
  50. '1.0.0',
  51. '1.0.0-rc.1',
  52. '1.0.0-beta.11',
  53. '1.0.0-beta',
  54. '1.0.0-beta.2',
  55. '1.0.0-alpha.beta+build',
  56. '1.0.0-alpha.1',
  57. '1.0.0-alpha',
  58. ].sort(compareVersion), [
  59. '1.0.0-alpha',
  60. '1.0.0-alpha',
  61. '1.0.0-alpha.1',
  62. '1.0.0-alpha.1',
  63. '1.0.0-alpha.beta+build',
  64. '1.0.0-beta',
  65. '1.0.0-beta.2',
  66. '1.0.0-beta.11',
  67. '1.0.0-rc.1',
  68. '1.0.0-x.7.z.92',
  69. '1.0.0',
  70. '1.2.3-alpha',
  71. '1.2.3',
  72. '1.5.5',
  73. '1.5.19',
  74. '2.3.1',
  75. '4.1.3',
  76. '4.2.0',
  77. '4.11.6',
  78. '10.5.5',
  79. '11.3.0',
  80. ]);
  81. t.end();
  82. });
  83. test('debounce', (t) => {
  84. const log = [];
  85. const fn = debounce((i) => {
  86. log.push(i);
  87. }, 500);
  88. for (let i = 0; i < 3; i += 1) {
  89. fn(i);
  90. mocker.clock.tick(200);
  91. }
  92. mocker.clock.tick(500);
  93. for (let i = 0; i < 3; i += 1) {
  94. fn(i);
  95. mocker.clock.tick(600);
  96. }
  97. t.deepEqual(log, [2, 0, 1, 2]);
  98. t.end();
  99. });
  100. test('debounce with invalid time', (t) => {
  101. for (const time of [undefined, -100]) {
  102. const log = [];
  103. const fn = debounce((i) => {
  104. log.push(i);
  105. }, time);
  106. for (let i = 0; i < 3; i += 1) {
  107. fn(i);
  108. }
  109. mocker.clock.tick(500);
  110. t.deepEqual(log, [2]);
  111. }
  112. t.end();
  113. });
  114. test('throttle', (t) => {
  115. const log = [];
  116. const fn = throttle((i) => {
  117. log.push(i);
  118. }, 500);
  119. for (let i = 0; i < 6; i += 1) {
  120. fn(i);
  121. mocker.clock.tick(200);
  122. }
  123. mocker.clock.tick(500);
  124. for (let i = 0; i < 3; i += 1) {
  125. fn(i);
  126. mocker.clock.tick(600);
  127. }
  128. t.deepEqual(log, [0, 3, 0, 1, 2]);
  129. t.end();
  130. });
  131. test('throttle with invalid time', (t) => {
  132. for (const time of [undefined, -100]) {
  133. const log = [];
  134. const fn = throttle((i) => {
  135. log.push(i);
  136. }, time);
  137. for (let i = 0; i < 3; i += 1) {
  138. fn(i);
  139. }
  140. mocker.clock.tick(500);
  141. t.deepEqual(log, [0]);
  142. }
  143. t.end();
  144. });