test.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. Object.defineProperty(exports, "__esModule", { value: true });
  11. const util = require("util");
  12. const ava_1 = require("ava");
  13. const jsdom_1 = require("jsdom");
  14. const __1 = require("..");
  15. const isNode8orHigher = Number(process.versions.node.split('.')[0]) >= 8;
  16. class ErrorSubclassFixture extends Error {
  17. }
  18. const document = jsdom_1.jsdom();
  19. const createDomElement = (el) => document.createElement(el);
  20. const types = new Map([
  21. ['undefined', {
  22. is: __1.default.undefined,
  23. fixtures: [
  24. undefined
  25. ]
  26. }],
  27. ['null', {
  28. is: __1.default.null_,
  29. fixtures: [
  30. null
  31. ]
  32. }],
  33. ['string', {
  34. is: __1.default.string,
  35. fixtures: [
  36. '🦄',
  37. 'hello world',
  38. ''
  39. ]
  40. }],
  41. ['number', {
  42. is: __1.default.number,
  43. fixtures: [
  44. 6,
  45. 1.4,
  46. 0,
  47. -0,
  48. Infinity,
  49. -Infinity
  50. ]
  51. }],
  52. ['boolean', {
  53. is: __1.default.boolean,
  54. fixtures: [
  55. true, false
  56. ]
  57. }],
  58. ['symbol', {
  59. is: __1.default.symbol,
  60. fixtures: [
  61. Symbol('🦄')
  62. ]
  63. }],
  64. ['array', {
  65. is: __1.default.array,
  66. fixtures: [
  67. [1, 2],
  68. new Array(2)
  69. ]
  70. }],
  71. ['function', {
  72. is: __1.default.function_,
  73. fixtures: [
  74. function foo() { },
  75. function () { },
  76. () => { },
  77. function () {
  78. return __awaiter(this, void 0, void 0, function* () { });
  79. },
  80. function* () { }
  81. ]
  82. }],
  83. ['buffer', {
  84. is: __1.default.buffer,
  85. fixtures: [
  86. Buffer.from('🦄')
  87. ]
  88. }],
  89. ['object', {
  90. is: __1.default.object,
  91. fixtures: [
  92. { x: 1 },
  93. Object.create({ x: 1 })
  94. ]
  95. }],
  96. ['regExp', {
  97. is: __1.default.regExp,
  98. fixtures: [
  99. /\w/,
  100. new RegExp('\\w')
  101. ]
  102. }],
  103. ['date', {
  104. is: __1.default.date,
  105. fixtures: [
  106. new Date()
  107. ]
  108. }],
  109. ['error', {
  110. is: __1.default.error,
  111. fixtures: [
  112. new Error('🦄'),
  113. new ErrorSubclassFixture()
  114. ]
  115. }],
  116. ['nativePromise', {
  117. is: __1.default.nativePromise,
  118. fixtures: [
  119. Promise.resolve(),
  120. ]
  121. }],
  122. ['promise', {
  123. is: __1.default.promise,
  124. fixtures: [
  125. { then() { }, catch() { } }
  126. ]
  127. }],
  128. ['generator', {
  129. is: __1.default.generator,
  130. fixtures: [
  131. (function* () { yield 4; })()
  132. ]
  133. }],
  134. ['generatorFunction', {
  135. is: __1.default.generatorFunction,
  136. fixtures: [
  137. function* () { yield 4; }
  138. ]
  139. }],
  140. ['asyncFunction', {
  141. is: __1.default.asyncFunction,
  142. fixtures: [
  143. function () {
  144. return __awaiter(this, void 0, void 0, function* () { });
  145. },
  146. () => __awaiter(this, void 0, void 0, function* () { })
  147. ]
  148. }],
  149. ['map', {
  150. is: __1.default.map,
  151. fixtures: [
  152. new Map()
  153. ]
  154. }],
  155. ['set', {
  156. is: __1.default.set,
  157. fixtures: [
  158. new Set()
  159. ]
  160. }],
  161. ['weakSet', {
  162. is: __1.default.weakSet,
  163. fixtures: [
  164. new WeakSet()
  165. ]
  166. }],
  167. ['weakMap', {
  168. is: __1.default.weakMap,
  169. fixtures: [
  170. new WeakMap()
  171. ]
  172. }],
  173. ['int8Array', {
  174. is: __1.default.int8Array,
  175. fixtures: [
  176. new Int8Array(0)
  177. ]
  178. }],
  179. ['uint8Array', {
  180. is: __1.default.uint8Array,
  181. fixtures: [
  182. new Uint8Array(0)
  183. ]
  184. }],
  185. ['uint8ClampedArray', {
  186. is: __1.default.uint8ClampedArray,
  187. fixtures: [
  188. new Uint8ClampedArray(0)
  189. ]
  190. }],
  191. ['int16Array', {
  192. is: __1.default.int16Array,
  193. fixtures: [
  194. new Int16Array(0)
  195. ]
  196. }],
  197. ['uint16Array', {
  198. is: __1.default.uint16Array,
  199. fixtures: [
  200. new Uint16Array(0)
  201. ]
  202. }],
  203. ['int32Array', {
  204. is: __1.default.int32Array,
  205. fixtures: [
  206. new Int32Array(0)
  207. ]
  208. }],
  209. ['uint32Array', {
  210. is: __1.default.uint32Array,
  211. fixtures: [
  212. new Uint32Array(0)
  213. ]
  214. }],
  215. ['float32Array', {
  216. is: __1.default.float32Array,
  217. fixtures: [
  218. new Float32Array(0)
  219. ]
  220. }],
  221. ['float64Array', {
  222. is: __1.default.float64Array,
  223. fixtures: [
  224. new Float64Array(0)
  225. ]
  226. }],
  227. ['arrayBuffer', {
  228. is: __1.default.arrayBuffer,
  229. fixtures: [
  230. new ArrayBuffer(10)
  231. ]
  232. }],
  233. ['nan', {
  234. is: __1.default.nan,
  235. fixtures: [
  236. NaN,
  237. Number.NaN
  238. ]
  239. }],
  240. ['nullOrUndefined', {
  241. is: __1.default.nullOrUndefined,
  242. fixtures: [
  243. null,
  244. undefined
  245. ]
  246. }],
  247. ['plainObject', {
  248. is: __1.default.plainObject,
  249. fixtures: [
  250. { x: 1 },
  251. Object.create(null),
  252. new Object()
  253. ]
  254. }],
  255. ['integer', {
  256. is: __1.default.integer,
  257. fixtures: [
  258. 6
  259. ]
  260. }],
  261. ['safeInteger', {
  262. is: __1.default.safeInteger,
  263. fixtures: [
  264. Math.pow(2, 53) - 1,
  265. -Math.pow(2, 53) + 1
  266. ]
  267. }],
  268. ['domElement', {
  269. is: __1.default.domElement,
  270. fixtures: [
  271. 'div',
  272. 'input',
  273. 'span',
  274. 'img',
  275. 'canvas',
  276. 'script'
  277. ].map(createDomElement)
  278. }
  279. ], ['non-domElements', {
  280. is: value => !__1.default.domElement(value),
  281. fixtures: [
  282. document.createTextNode('data'),
  283. document.createProcessingInstruction('xml-stylesheet', 'href="mycss.css" type="text/css"'),
  284. document.createComment('This is a comment'),
  285. document,
  286. document.implementation.createDocumentType('svg:svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'),
  287. document.createDocumentFragment()
  288. ]
  289. }],
  290. ['infinite', {
  291. is: __1.default.infinite,
  292. fixtures: [
  293. Infinity,
  294. -Infinity
  295. ]
  296. }]
  297. ]);
  298. const testType = (t, type, exclude) => {
  299. const testData = types.get(type);
  300. if (testData === undefined) {
  301. t.fail(`is.${type} not defined`);
  302. return;
  303. }
  304. const { is } = testData;
  305. for (const [key, { fixtures }] of types) {
  306. if (exclude && exclude.indexOf(key) !== -1) {
  307. continue;
  308. }
  309. const assert = key === type ? t.true.bind(t) : t.false.bind(t);
  310. for (const fixture of fixtures) {
  311. assert(is(fixture), `Value: ${util.inspect(fixture)}`);
  312. }
  313. }
  314. };
  315. ava_1.default('is', t => {
  316. t.is(__1.default(null), 'null');
  317. t.is(__1.default(undefined), 'undefined');
  318. });
  319. ava_1.default('is.undefined', t => {
  320. testType(t, 'undefined', ['nullOrUndefined']);
  321. });
  322. ava_1.default('is.null', t => {
  323. testType(t, 'null', ['nullOrUndefined']);
  324. });
  325. ava_1.default('is.string', t => {
  326. testType(t, 'string');
  327. });
  328. ava_1.default('is.number', t => {
  329. testType(t, 'number', ['nan', 'integer', 'safeInteger', 'infinite']);
  330. });
  331. ava_1.default('is.boolean', t => {
  332. testType(t, 'boolean');
  333. });
  334. ava_1.default('is.symbol', t => {
  335. testType(t, 'symbol');
  336. });
  337. ava_1.default('is.array', t => {
  338. testType(t, 'array');
  339. });
  340. ava_1.default('is.function', t => {
  341. testType(t, 'function', ['generatorFunction', 'asyncFunction']);
  342. });
  343. ava_1.default('is.buffer', t => {
  344. testType(t, 'buffer');
  345. });
  346. ava_1.default('is.object', t => {
  347. const testData = types.get('object');
  348. if (testData === undefined) {
  349. t.fail('is.object not defined');
  350. return;
  351. }
  352. for (const el of testData.fixtures) {
  353. t.true(__1.default.object(el));
  354. }
  355. });
  356. ava_1.default('is.regExp', t => {
  357. testType(t, 'regExp');
  358. });
  359. ava_1.default('is.date', t => {
  360. testType(t, 'date');
  361. });
  362. ava_1.default('is.error', t => {
  363. testType(t, 'error');
  364. });
  365. if (isNode8orHigher) {
  366. ava_1.default('is.nativePromise', t => {
  367. testType(t, 'nativePromise');
  368. });
  369. ava_1.default('is.promise', t => {
  370. testType(t, 'promise', ['nativePromise']);
  371. });
  372. }
  373. ava_1.default('is.generator', t => {
  374. testType(t, 'generator');
  375. });
  376. ava_1.default('is.generatorFunction', t => {
  377. testType(t, 'generatorFunction', ['function']);
  378. });
  379. ava_1.default('is.map', t => {
  380. testType(t, 'map');
  381. });
  382. ava_1.default('is.set', t => {
  383. testType(t, 'set');
  384. });
  385. ava_1.default('is.weakMap', t => {
  386. testType(t, 'weakMap');
  387. });
  388. ava_1.default('is.weakSet', t => {
  389. testType(t, 'weakSet');
  390. });
  391. ava_1.default('is.int8Array', t => {
  392. testType(t, 'int8Array');
  393. });
  394. ava_1.default('is.uint8Array', t => {
  395. testType(t, 'uint8Array', ['buffer']);
  396. });
  397. ava_1.default('is.uint8ClampedArray', t => {
  398. testType(t, 'uint8ClampedArray');
  399. });
  400. ava_1.default('is.int16Array', t => {
  401. testType(t, 'int16Array');
  402. });
  403. ava_1.default('is.uint16Array', t => {
  404. testType(t, 'uint16Array');
  405. });
  406. ava_1.default('is.int32Array', t => {
  407. testType(t, 'int32Array');
  408. });
  409. ava_1.default('is.uint32Array', t => {
  410. testType(t, 'uint32Array');
  411. });
  412. ava_1.default('is.float32Array', t => {
  413. testType(t, 'float32Array');
  414. });
  415. ava_1.default('is.float64Array', t => {
  416. testType(t, 'float64Array');
  417. });
  418. ava_1.default('is.arrayBuffer', t => {
  419. testType(t, 'arrayBuffer');
  420. });
  421. ava_1.default('is.dataView', t => {
  422. testType(t, 'arrayBuffer');
  423. });
  424. ava_1.default('is.truthy', t => {
  425. t.true(__1.default.truthy('unicorn'));
  426. t.true(__1.default.truthy('🦄'));
  427. t.true(__1.default.truthy(new Set()));
  428. t.true(__1.default.truthy(Symbol('🦄')));
  429. t.true(__1.default.truthy(true));
  430. });
  431. ava_1.default('is.falsy', t => {
  432. t.true(__1.default.falsy(false));
  433. t.true(__1.default.falsy(0));
  434. t.true(__1.default.falsy(''));
  435. t.true(__1.default.falsy(null));
  436. t.true(__1.default.falsy(undefined));
  437. t.true(__1.default.falsy(NaN));
  438. });
  439. ava_1.default('is.nan', t => {
  440. testType(t, 'nan');
  441. });
  442. ava_1.default('is.nullOrUndefined', t => {
  443. testType(t, 'nullOrUndefined', ['undefined', 'null']);
  444. });
  445. ava_1.default('is.primitive', t => {
  446. const primitives = [
  447. undefined,
  448. null,
  449. '🦄',
  450. 6,
  451. Infinity,
  452. -Infinity,
  453. true,
  454. false,
  455. Symbol('🦄')
  456. ];
  457. for (const el of primitives) {
  458. t.true(__1.default.primitive(el));
  459. }
  460. });
  461. ava_1.default('is.integer', t => {
  462. testType(t, 'integer', ['number', 'safeInteger']);
  463. t.false(__1.default.integer(1.4));
  464. });
  465. ava_1.default('is.safeInteger', t => {
  466. testType(t, 'safeInteger', ['number', 'integer']);
  467. t.false(__1.default.safeInteger(Math.pow(2, 53)));
  468. t.false(__1.default.safeInteger(-Math.pow(2, 53)));
  469. });
  470. ava_1.default('is.plainObject', t => {
  471. testType(t, 'plainObject', ['object', 'promise']);
  472. });
  473. ava_1.default('is.iterable', t => {
  474. t.true(__1.default.iterable(''));
  475. t.true(__1.default.iterable([]));
  476. t.true(__1.default.iterable(new Map()));
  477. t.false(__1.default.iterable(null));
  478. t.false(__1.default.iterable(undefined));
  479. t.false(__1.default.iterable(0));
  480. t.false(__1.default.iterable(NaN));
  481. t.false(__1.default.iterable(Infinity));
  482. t.false(__1.default.iterable({}));
  483. });
  484. ava_1.default('is.class', t => {
  485. class Foo {
  486. }
  487. const classDeclarations = [
  488. Foo,
  489. class Bar extends Foo {
  490. }
  491. ];
  492. for (const x of classDeclarations) {
  493. t.true(__1.default.class_(x));
  494. }
  495. });
  496. ava_1.default('is.typedArray', t => {
  497. const typedArrays = [
  498. new Int8Array(0),
  499. new Uint8Array(0),
  500. new Uint8ClampedArray(0),
  501. new Uint16Array(0),
  502. new Int32Array(0),
  503. new Uint32Array(0),
  504. new Float32Array(0),
  505. new Float64Array(0)
  506. ];
  507. for (const el of typedArrays) {
  508. t.true(__1.default.typedArray(el));
  509. }
  510. t.false(__1.default.typedArray(new ArrayBuffer(1)));
  511. t.false(__1.default.typedArray([]));
  512. t.false(__1.default.typedArray({}));
  513. });
  514. ava_1.default('is.arrayLike', t => {
  515. (() => {
  516. t.true(__1.default.arrayLike(arguments));
  517. })();
  518. t.true(__1.default.arrayLike([]));
  519. t.true(__1.default.arrayLike('unicorn'));
  520. t.false(__1.default.arrayLike({}));
  521. t.false(__1.default.arrayLike(() => { }));
  522. t.false(__1.default.arrayLike(new Map()));
  523. });
  524. ava_1.default('is.inRange', t => {
  525. const x = 3;
  526. t.true(__1.default.inRange(x, [0, 5]));
  527. t.true(__1.default.inRange(x, [5, 0]));
  528. t.true(__1.default.inRange(x, [-5, 5]));
  529. t.true(__1.default.inRange(x, [5, -5]));
  530. t.false(__1.default.inRange(x, [4, 8]));
  531. t.true(__1.default.inRange(-7, [-5, -10]));
  532. t.true(__1.default.inRange(-5, [-5, -10]));
  533. t.true(__1.default.inRange(-10, [-5, -10]));
  534. t.true(__1.default.inRange(x, 10));
  535. t.true(__1.default.inRange(0, 0));
  536. t.true(__1.default.inRange(-2, -3));
  537. t.false(__1.default.inRange(x, 2));
  538. t.false(__1.default.inRange(-3, -2));
  539. t.throws(() => {
  540. __1.default.inRange(0, []);
  541. });
  542. t.throws(() => {
  543. __1.default.inRange(0, [5]);
  544. });
  545. t.throws(() => {
  546. __1.default.inRange(0, [1, 2, 3]);
  547. });
  548. });
  549. ava_1.default('is.domElement', t => {
  550. testType(t, 'domElement');
  551. t.false(__1.default.domElement({ nodeType: 1, nodeName: 'div' }));
  552. });
  553. ava_1.default('is.infinite', t => {
  554. testType(t, 'infinite', ['number']);
  555. });
  556. ava_1.default('is.even', t => {
  557. for (const el of [-6, 2, 4]) {
  558. t.true(__1.default.even(el));
  559. }
  560. for (const el of [-3, 1, 5]) {
  561. t.false(__1.default.even(el));
  562. }
  563. });
  564. ava_1.default('is.odd', t => {
  565. for (const el of [-5, 7, 13]) {
  566. t.true(__1.default.odd(el));
  567. }
  568. for (const el of [-8, 8, 10]) {
  569. t.false(__1.default.odd(el));
  570. }
  571. });
  572. ava_1.default('is.empty', t => {
  573. t.true(__1.default.empty(null));
  574. t.true(__1.default.empty(undefined));
  575. t.true(__1.default.empty(false));
  576. t.false(__1.default.empty(true));
  577. t.true(__1.default.empty(''));
  578. t.false(__1.default.empty('🦄'));
  579. t.true(__1.default.empty([]));
  580. t.false(__1.default.empty(['🦄']));
  581. t.true(__1.default.empty({}));
  582. t.false(__1.default.empty({ unicorn: '🦄' }));
  583. const tempMap = new Map();
  584. t.true(__1.default.empty(tempMap));
  585. tempMap.set('unicorn', '🦄');
  586. t.false(__1.default.empty(tempMap));
  587. const tempSet = new Set();
  588. t.true(__1.default.empty(tempSet));
  589. tempSet.add(1);
  590. t.false(__1.default.empty(tempSet));
  591. });
  592. ava_1.default('is.emptyOrWhitespace', t => {
  593. t.true(__1.default.emptyOrWhitespace(''));
  594. t.true(__1.default.emptyOrWhitespace(' '));
  595. t.false(__1.default.emptyOrWhitespace('🦄'));
  596. t.false(__1.default.emptyOrWhitespace('unicorn'));
  597. });
  598. ava_1.default('is.any', t => {
  599. t.true(__1.default.any(__1.default.string, {}, true, '🦄'));
  600. t.true(__1.default.any(__1.default.object, false, {}, 'unicorns'));
  601. t.false(__1.default.any(__1.default.boolean, '🦄', [], 3));
  602. t.false(__1.default.any(__1.default.integer, true, 'lol', {}));
  603. t.throws(() => {
  604. __1.default.any(null, true);
  605. });
  606. t.throws(() => {
  607. __1.default.any(__1.default.string);
  608. });
  609. });
  610. ava_1.default('is.all', t => {
  611. t.true(__1.default.all(__1.default.object, {}, new Set(), new Map()));
  612. t.true(__1.default.all(__1.default.boolean, true, false));
  613. t.false(__1.default.all(__1.default.string, '🦄', []));
  614. t.false(__1.default.all(__1.default.set, new Map(), {}));
  615. t.throws(() => {
  616. __1.default.all(null, true);
  617. });
  618. t.throws(() => {
  619. __1.default.all(__1.default.string);
  620. });
  621. });
  622. //# sourceMappingURL=test.js.map