index.test.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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.end();
  16. });
  17. test('compareVersion', (t) => {
  18. t.equal(compareVersion('1.2.3', '1.2.3'), 0);
  19. t.equal(compareVersion('1.2.3', '1.2.0'), 1);
  20. t.equal(compareVersion('1.2.3', '1.2.4'), -1);
  21. t.equal(compareVersion('1.2.0', '1.2'), 0);
  22. t.equal(compareVersion('1.2.1', '1.2'), 1);
  23. t.equal(compareVersion('1.1.9', '1.2'), -1);
  24. t.equal(compareVersion('1.10', '1.9'), 1);
  25. t.deepEqual([
  26. '1.2.3',
  27. '1.2.3-alpha',
  28. '1.0.0-x.7.z.92',
  29. '1.0.0-alpha.1',
  30. '1.0.0-alpha',
  31. '4.11.6',
  32. '4.2.0',
  33. '1.5.19',
  34. '1.5.5',
  35. '4.1.3',
  36. '2.3.1',
  37. '10.5.5',
  38. '11.3.0',
  39. '1.0.0',
  40. '1.0.0-rc.1',
  41. '1.0.0-beta.11',
  42. '1.0.0-beta',
  43. '1.0.0-beta.2',
  44. '1.0.0-alpha.beta+build',
  45. '1.0.0-alpha.1',
  46. '1.0.0-alpha',
  47. ].sort(compareVersion), [
  48. '1.0.0-alpha',
  49. '1.0.0-alpha',
  50. '1.0.0-alpha.1',
  51. '1.0.0-alpha.1',
  52. '1.0.0-alpha.beta+build',
  53. '1.0.0-beta',
  54. '1.0.0-beta.2',
  55. '1.0.0-beta.11',
  56. '1.0.0-rc.1',
  57. '1.0.0-x.7.z.92',
  58. '1.0.0',
  59. '1.2.3-alpha',
  60. '1.2.3',
  61. '1.5.5',
  62. '1.5.19',
  63. '2.3.1',
  64. '4.1.3',
  65. '4.2.0',
  66. '4.11.6',
  67. '10.5.5',
  68. '11.3.0',
  69. ]);
  70. t.end();
  71. });
  72. test('debounce', (t) => {
  73. const log = [];
  74. const fn = debounce((i) => {
  75. log.push(i);
  76. }, 500);
  77. for (let i = 0; i < 3; i += 1) {
  78. fn(i);
  79. mocker.clock.tick(200);
  80. }
  81. mocker.clock.tick(500);
  82. for (let i = 0; i < 3; i += 1) {
  83. fn(i);
  84. mocker.clock.tick(600);
  85. }
  86. t.deepEqual(log, [2, 0, 1, 2]);
  87. t.end();
  88. });
  89. test('debounce with invalid time', (t) => {
  90. for (const time of [undefined, -100]) {
  91. const log = [];
  92. const fn = debounce((i) => {
  93. log.push(i);
  94. }, time);
  95. for (let i = 0; i < 3; i += 1) {
  96. fn(i);
  97. }
  98. mocker.clock.tick(500);
  99. t.deepEqual(log, [2]);
  100. }
  101. t.end();
  102. });
  103. test('throttle', (t) => {
  104. const log = [];
  105. const fn = throttle((i) => {
  106. log.push(i);
  107. }, 500);
  108. for (let i = 0; i < 6; i += 1) {
  109. fn(i);
  110. mocker.clock.tick(200);
  111. }
  112. mocker.clock.tick(500);
  113. for (let i = 0; i < 3; i += 1) {
  114. fn(i);
  115. mocker.clock.tick(600);
  116. }
  117. t.deepEqual(log, [0, 3, 0, 1, 2]);
  118. t.end();
  119. });
  120. test('throttle with invalid time', (t) => {
  121. for (const time of [undefined, -100]) {
  122. const log = [];
  123. const fn = throttle((i) => {
  124. log.push(i);
  125. }, time);
  126. for (let i = 0; i < 3; i += 1) {
  127. fn(i);
  128. }
  129. mocker.clock.tick(500);
  130. t.deepEqual(log, [0]);
  131. }
  132. t.end();
  133. });