tests_base.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  1. import { keys } from "../lib/keycode";
  2. export default function (qunit, Inputmask) {
  3. const $ = Inputmask.dependencyLib;
  4. qunit.module("Simple masking");
  5. qunit.test(
  6. 'inputmask("99-99-99", { clearMaskOnLostFocus: false}',
  7. function (assert) {
  8. const $fixture = $("#qunit-fixture");
  9. $fixture.append('<input type="text" id="testmask" />');
  10. const testmask = document.getElementById("testmask");
  11. Inputmask({
  12. mask: "99-99-99",
  13. clearMaskOnLostFocus: false
  14. }).mask(testmask);
  15. assert.equal(
  16. testmask.inputmask._valueGet(),
  17. "__-__-__",
  18. "Result " + testmask.inputmask._valueGet()
  19. );
  20. }
  21. );
  22. qunit.test(
  23. 'inputmask("99-99-99", { clearMaskOnLostFocus: true}',
  24. function (assert) {
  25. const done = assert.async(),
  26. $fixture = $("#qunit-fixture");
  27. $fixture.append('<input type="text" id="testmask" />');
  28. const testmask = document.getElementById("testmask");
  29. Inputmask({
  30. mask: "99-99-99",
  31. clearMaskOnLostFocus: false
  32. }).mask(testmask);
  33. testmask.blur();
  34. setTimeout(function () {
  35. assert.equal(testmask.value, "", "Result " + testmask.value);
  36. done();
  37. }, 0);
  38. }
  39. );
  40. qunit.test('inputmask("999.999.999")', function (assert) {
  41. const $fixture = $("#qunit-fixture");
  42. $fixture.append('<input type="text" id="testmask" />');
  43. const testmask = document.getElementById("testmask");
  44. Inputmask("999.999.999").mask(testmask);
  45. testmask.focus();
  46. $("#testmask").Type("123");
  47. assert.equal(testmask.value, "123.___.___", "Result " + testmask.value);
  48. });
  49. qunit.test('inputmask("999.999.999") + backspace', function (assert) {
  50. const $fixture = $("#qunit-fixture");
  51. $fixture.append('<input type="text" id="testmask" />');
  52. const testmask = document.getElementById("testmask");
  53. Inputmask("999.999.999").mask(testmask);
  54. testmask.focus();
  55. $("#testmask").Type("123");
  56. $("#testmask").SendKey(keys.Backspace);
  57. assert.equal(testmask.value, "12_.___.___", "Result " + testmask.value);
  58. });
  59. qunit.test(
  60. 'inputmask("999.999.999", { oncomplete: ... })',
  61. function (assert) {
  62. const done = assert.async(),
  63. $fixture = $("#qunit-fixture");
  64. $fixture.append('<input type="text" id="testmask" />');
  65. const testmask = document.getElementById("testmask");
  66. Inputmask("999.999.999", {
  67. oncomplete: function () {
  68. assert.equal(
  69. testmask.value,
  70. "123.456.789",
  71. "Result " + testmask.value
  72. );
  73. testmask.inputmask.remove();
  74. done();
  75. }
  76. }).mask(testmask);
  77. testmask.focus();
  78. $("#testmask").Type("123456789");
  79. }
  80. );
  81. qunit.test(
  82. 'inputmask("9-AAA.999", { onincomplete: ... })',
  83. function (assert) {
  84. const done = assert.async(),
  85. $fixture = $("#qunit-fixture");
  86. $fixture.append('<input type="text" id="testmask" />');
  87. const testmask = document.getElementById("testmask");
  88. Inputmask("9-AAA.999", {
  89. onincomplete: function () {
  90. assert.equal(testmask.value, "1-ABC.12_", "Result " + testmask.value);
  91. testmask.inputmask.remove();
  92. done();
  93. }
  94. }).mask(testmask);
  95. testmask.focus();
  96. setTimeout(function () {
  97. $("#testmask").Type("1abc12");
  98. testmask.blur();
  99. }, 0);
  100. }
  101. );
  102. qunit.test(
  103. 'inputmask("999.999.999") - delete 2nd with backspace, continue the mask',
  104. function (assert) {
  105. const $fixture = $("#qunit-fixture");
  106. $fixture.append('<input type="text" id="testmask" />');
  107. const testmask = document.getElementById("testmask");
  108. Inputmask("999.999.999").mask(testmask);
  109. testmask.focus();
  110. $("#testmask").Type("123");
  111. $("#testmask").SendKey(keys.ArrowLeft);
  112. $("#testmask").SendKey(keys.ArrowLeft);
  113. $("#testmask").SendKey(keys.Backspace);
  114. $("#testmask").Type("4");
  115. $("#testmask").SendKey(keys.ArrowRight);
  116. $("#testmask").Type("56");
  117. assert.equal(testmask.value, "143.56_.___", "Result " + testmask.value);
  118. }
  119. );
  120. qunit.test(
  121. 'inputmask("999.999.999") - delete 2nd with delete, continue the mask',
  122. function (assert) {
  123. const $fixture = $("#qunit-fixture");
  124. $fixture.append('<input type="text" id="testmask" />');
  125. const testmask = document.getElementById("testmask");
  126. Inputmask("999.999.999").mask(testmask);
  127. testmask.focus();
  128. $("#testmask").Type("123");
  129. $("#testmask").SendKey(keys.ArrowLeft);
  130. $("#testmask").SendKey(keys.ArrowLeft);
  131. $("#testmask").SendKey(keys.ArrowLeft);
  132. $("#testmask").SendKey(keys.Delete);
  133. $("#testmask").Type("4");
  134. $("#testmask").SendKey(keys.ArrowRight);
  135. $("#testmask").Type("56");
  136. assert.equal(testmask.value, "143.56_.___", "Result " + testmask.value);
  137. }
  138. );
  139. qunit.test(
  140. 'inputmask("999.999.999") - delete selection start with nomask',
  141. function (assert) {
  142. const $fixture = $("#qunit-fixture");
  143. $fixture.append('<input type="text" id="testmask" />');
  144. const testmask = document.getElementById("testmask");
  145. Inputmask("999.999.999").mask(testmask);
  146. testmask.focus();
  147. $("#testmask").Type("123456789");
  148. $.caret(testmask, 3, 7);
  149. $("#testmask").SendKey(keys.Delete);
  150. assert.equal(testmask.value, "123.789.___", "Result " + testmask.value);
  151. }
  152. );
  153. qunit.test(
  154. 'inputmask("999.999.999") - backspace selection start with nomask',
  155. function (assert) {
  156. const $fixture = $("#qunit-fixture");
  157. $fixture.append('<input type="text" id="testmask" />');
  158. const testmask = document.getElementById("testmask");
  159. Inputmask("999.999.999").mask(testmask);
  160. testmask.focus();
  161. $("#testmask").Type("123456789");
  162. $.caret(testmask, 3, 7);
  163. $("#testmask").SendKey(keys.Backspace);
  164. assert.equal(testmask.value, "123.789.___", "Result " + testmask.value);
  165. }
  166. );
  167. qunit.test(
  168. 'inputmask("999.999.999") - overtype selection start with nomask',
  169. function (assert) {
  170. const $fixture = $("#qunit-fixture");
  171. $fixture.append('<input type="text" id="testmask" />');
  172. const testmask = document.getElementById("testmask");
  173. Inputmask("999.999.999").mask(testmask);
  174. testmask.focus();
  175. $("#testmask").Type("123456789");
  176. $.caret(testmask, 3, 7);
  177. $("#testmask").Type("1");
  178. assert.equal(testmask.value, "123.178.9__", "Result " + testmask.value);
  179. }
  180. );
  181. qunit.test('inputmask("*****")', function (assert) {
  182. const $fixture = $("#qunit-fixture");
  183. $fixture.append('<input type="text" id="testmask" />');
  184. const testmask = document.getElementById("testmask");
  185. Inputmask("*****").mask(testmask);
  186. testmask.focus();
  187. $("#testmask").Type("abe");
  188. $("#testmask").SendKey(keys.ArrowLeft);
  189. $("#testmask").Type("cd");
  190. assert.equal(testmask.value, "abcde", "Result " + testmask.value);
  191. });
  192. qunit.test(
  193. 'inputmask("(999)999-9999") - ruslanfedoseenko mask',
  194. function (assert) {
  195. const $fixture = $("#qunit-fixture");
  196. $fixture.append('<input type="text" id="testmask" />');
  197. const testmask = document.getElementById("testmask");
  198. Inputmask("(999)999-9999").mask(testmask);
  199. testmask.focus();
  200. testmask.value = "9999999999";
  201. $.caret(testmask, 4);
  202. $("#testmask").Type("7");
  203. assert.equal(testmask.value, "(999)999-9999", "Result " + testmask.value);
  204. }
  205. );
  206. qunit.test(
  207. 'inputmask("(999)999-9999") - insert false - ruslanfedoseenko mask',
  208. function (assert) {
  209. const $fixture = $("#qunit-fixture");
  210. $fixture.append('<input type="text" id="testmask" />');
  211. const testmask = document.getElementById("testmask");
  212. Inputmask("(999)999-9999", {
  213. insertMode: false
  214. }).mask(testmask);
  215. testmask.focus();
  216. testmask.value = "9999999999";
  217. $.caret(testmask, 4);
  218. $("#testmask").Type("7");
  219. assert.equal(testmask.value, "(999)999-9999", "Result " + testmask.value);
  220. }
  221. );
  222. qunit.test('inputmask("") - empty mask - andywolk', function (assert) {
  223. const $fixture = $("#qunit-fixture");
  224. $fixture.append('<input type="text" id="testmask" />');
  225. const testmask = document.getElementById("testmask");
  226. Inputmask("").mask(testmask);
  227. testmask.focus();
  228. $("#testmask").val("123");
  229. assert.equal(testmask.value, "123", "Result " + testmask.value);
  230. });
  231. qunit.test("Delete selection with non-masks", function (assert) {
  232. const $fixture = $("#qunit-fixture");
  233. $fixture.append('<input type="text" id="testmask" />');
  234. const testmask = document.getElementById("testmask");
  235. Inputmask("(999)999-9999").mask(testmask);
  236. testmask.focus();
  237. $("#testmask").Type("9999999999");
  238. $.caret(testmask, 8, 11);
  239. $("#testmask").SendKey(keys.Delete);
  240. assert.equal(testmask.value, "(999)999-99__", "Result " + testmask.value);
  241. });
  242. qunit.test(
  243. "Selection and backspace also deletes previous - kenaku",
  244. function (assert) {
  245. const $fixture = $("#qunit-fixture");
  246. $fixture.append('<input type="text" id="testmask" />');
  247. const testmask = document.getElementById("testmask");
  248. Inputmask("999 99 99 999").mask(testmask);
  249. testmask.focus();
  250. $("#testmask").Type("1234567890");
  251. $.caret(testmask, 2, 3);
  252. $("#testmask").SendKey(keys.Backspace);
  253. assert.equal(testmask.value, "124 56 78 90_", "Result " + testmask.value);
  254. }
  255. );
  256. qunit.test(
  257. "aaaa 9999 backspace in aaaa does nothing - Evelyne28",
  258. function (assert) {
  259. const done = assert.async(),
  260. $fixture = $("#qunit-fixture");
  261. $fixture.append('<input type="text" id="testmask" />');
  262. const testmask = document.getElementById("testmask");
  263. Inputmask("aaaa 9999").mask(testmask);
  264. testmask.focus();
  265. $("#testmask").Type("abcd 1234");
  266. $.caret(testmask, 3);
  267. $("#testmask").SendKey(keys.Backspace);
  268. assert.equal(testmask.value, "abd_ 1234", "Result " + testmask.value);
  269. done();
  270. }
  271. );
  272. qunit.module("Non-greedy masks");
  273. qunit.test(
  274. 'inputmask("*", { greedy: false, repeat: "*" }) - replace cd with 1',
  275. function (assert) {
  276. const $fixture = $("#qunit-fixture");
  277. $fixture.append('<input type="text" id="testmask" />');
  278. const testmask = document.getElementById("testmask");
  279. Inputmask("*", {
  280. greedy: false,
  281. repeat: "*"
  282. }).mask(testmask);
  283. testmask.focus();
  284. $("#testmask").Type("abcdef");
  285. $.caret(testmask, 2, 4);
  286. $("#testmask").SendKey("1");
  287. assert.equal(testmask.value, "ab1ef", "Result " + testmask.value);
  288. }
  289. );
  290. qunit.test(
  291. 'inputmask("*", { greedy: false, repeat: "*" }) - type abcdef',
  292. function (assert) {
  293. const $fixture = $("#qunit-fixture");
  294. $fixture.append('<input type="text" id="testmask" />');
  295. const testmask = document.getElementById("testmask");
  296. Inputmask("*", {
  297. greedy: false,
  298. repeat: "*"
  299. }).mask(testmask);
  300. testmask.focus();
  301. $("#testmask").Type("abcdef");
  302. assert.equal(testmask.value, "abcdef", "Result " + testmask.value);
  303. }
  304. );
  305. qunit.test(
  306. 'inputmask("A.", { repeat: "*" }) - type abc - joostburg',
  307. function (assert) {
  308. const $fixture = $("#qunit-fixture");
  309. $fixture.append('<input type="text" id="testmask" />');
  310. const testmask = document.getElementById("testmask");
  311. Inputmask("A.", {
  312. repeat: "*"
  313. }).mask(testmask);
  314. testmask.focus();
  315. $("#testmask").Type("abc");
  316. assert.equal(testmask.value, "A.B.C.", "Result " + testmask.value);
  317. }
  318. );
  319. qunit.test(
  320. '{ mask: "A", placeholder: "", repeat: 16 }) - type testtest - glosswordteam',
  321. function (assert) {
  322. const $fixture = $("#qunit-fixture");
  323. $fixture.append('<input type="text" id="testmask" />');
  324. const testmask = document.getElementById("testmask");
  325. Inputmask({
  326. mask: "A",
  327. placeholder: "",
  328. repeat: 16
  329. }).mask(testmask);
  330. testmask.focus();
  331. $("#testmask").Type("testtest");
  332. assert.equal(testmask.value, "TESTTEST", "Result " + testmask.value);
  333. }
  334. );
  335. qunit.test(
  336. '{ mask: "A", repeat: 16, greedy: false }) - type testtest - glosswordteam',
  337. function (assert) {
  338. const $fixture = $("#qunit-fixture");
  339. $fixture.append('<input type="text" id="testmask" />');
  340. const testmask = document.getElementById("testmask");
  341. Inputmask({
  342. mask: "A",
  343. repeat: 16,
  344. greedy: false
  345. }).mask(testmask);
  346. testmask.focus();
  347. $("#testmask").Type("testtest");
  348. assert.equal(testmask.value, "TESTTEST", "Result " + testmask.value);
  349. }
  350. );
  351. qunit.module("greedy masks");
  352. qunit.test(
  353. 'inputmask("*", { greedy: true, repeat: 10, clearMaskOnLostFocus: false })',
  354. function (assert) {
  355. const $fixture = $("#qunit-fixture");
  356. $fixture.append('<input type="text" id="testmask" />');
  357. const testmask = document.getElementById("testmask");
  358. Inputmask("*", {
  359. greedy: true,
  360. repeat: 10,
  361. clearMaskOnLostFocus: false
  362. }).mask(testmask);
  363. testmask.focus();
  364. assert.equal(
  365. $("#testmask")[0].inputmask._valueGet(),
  366. "__________",
  367. "Result " + $("#testmask")[0].inputmask._valueGet()
  368. );
  369. }
  370. );
  371. qunit.test(
  372. 'inputmask("*", { greedy: true, repeat: 10 }) - type 12345678901234567890',
  373. function (assert) {
  374. const $fixture = $("#qunit-fixture");
  375. $fixture.append('<input type="text" id="testmask" />');
  376. const testmask = document.getElementById("testmask");
  377. Inputmask("*", {
  378. greedy: true,
  379. repeat: 10
  380. }).mask(testmask);
  381. testmask.focus();
  382. $("#testmask").Type("12345678901234567890");
  383. assert.equal(testmask.value, "1234567890", "Result " + testmask.value);
  384. }
  385. );
  386. qunit.test(
  387. 'inputmask("9,99", { greedy: true, repeat: 5 }) - type 12345678901234567890',
  388. function (assert) {
  389. const $fixture = $("#qunit-fixture");
  390. $fixture.append('<input type="text" id="testmask" />');
  391. const testmask = document.getElementById("testmask");
  392. Inputmask("9,99", {
  393. greedy: true,
  394. repeat: 5
  395. }).mask(testmask);
  396. testmask.focus();
  397. $("#testmask").Type("12345678901234567890");
  398. assert.equal(
  399. testmask.value,
  400. "1,234,567,890,123,45",
  401. "Result " + testmask.value
  402. );
  403. }
  404. );
  405. qunit.test(
  406. 'inputmask({ mask: "9", repeat: 10, placeholder: "", numericInput: true }) - greedy true with empty placeholder - type 12345',
  407. function (assert) {
  408. const $fixture = $("#qunit-fixture");
  409. $fixture.append('<input type="text" id="testmask" />');
  410. const testmask = document.getElementById("testmask");
  411. Inputmask({
  412. mask: "9",
  413. repeat: 10,
  414. placeholder: "",
  415. numericInput: true
  416. }).mask(testmask);
  417. testmask.focus();
  418. $("#testmask").Type("12345");
  419. assert.equal(testmask.value, "12345", "Result " + testmask.value);
  420. }
  421. );
  422. qunit.test("creditcard switch - pchelailya", function (assert) {
  423. const done = assert.async(),
  424. $fixture = $("#qunit-fixture");
  425. $fixture.append('<input type="text" id="testmask" />');
  426. const testmask = document.getElementById("testmask");
  427. Inputmask("9999 9999 9999 9999").mask(testmask);
  428. $("#testmask").on("keyup input", function (event) {
  429. const value = this.inputmask.unmaskedvalue();
  430. if (value != null && value.length === 2 && value === "37") {
  431. Inputmask("9999 999999 99999").mask(this);
  432. }
  433. });
  434. testmask.focus();
  435. $("#testmask").Type("37");
  436. setTimeout(function () {
  437. $("#testmask").Type("12");
  438. assert.equal(
  439. testmask.value,
  440. "3712 ______ _____",
  441. "Result " + testmask.value
  442. );
  443. done();
  444. }, 0);
  445. });
  446. qunit.test(
  447. "maskscache - same mask diff definitions - StonesEditeurs",
  448. function (assert) {
  449. const $fixture = $("#qunit-fixture");
  450. $fixture.append('<input type="text" id="testmask" />');
  451. const testmask = document.getElementById("testmask");
  452. Inputmask({
  453. mask: "Z{1,*}",
  454. definitions: {
  455. Z: {
  456. validator: function (chrs, buffer, pos, strict, opts) {
  457. return {
  458. pos,
  459. c: "A"
  460. };
  461. }
  462. }
  463. }
  464. }).mask(testmask);
  465. Inputmask({
  466. mask: "Z{1,*}", // <= Same mask
  467. definitions: {
  468. Z: {
  469. validator: function (chrs, buffer, pos, strict, opts) {
  470. return {
  471. pos,
  472. c: "B"
  473. }; // <= another definition
  474. }
  475. }
  476. }
  477. }).mask(testmask);
  478. $("#testmask").Type("abcdef");
  479. assert.equal(
  480. document.getElementById("testmask").inputmask._valueGet(),
  481. "BBBBBB",
  482. "Result " + document.getElementById("testmask").inputmask._valueGet()
  483. );
  484. }
  485. );
  486. qunit.test(
  487. "autoUnmask not work in newest release #1109 - danilG",
  488. function (assert) {
  489. const $fixture = $("#qunit-fixture");
  490. $fixture.append('<input type="text" id="testmask" />');
  491. const testmask = document.getElementById("testmask");
  492. Inputmask({
  493. mask: "+7 999 999-99-99",
  494. autoUnmask: true
  495. }).mask(testmask);
  496. $(testmask).val("9226845186");
  497. // Let's get value exact immediate - this crack's
  498. $(testmask).val();
  499. $(testmask).trigger("mouseenter");
  500. assert.equal(
  501. document.getElementById("testmask").inputmask._valueGet(),
  502. "+7 922 684-51-86",
  503. "Result " + document.getElementById("testmask").inputmask._valueGet()
  504. );
  505. }
  506. );
  507. qunit.test("Title Case - Especially", function (assert) {
  508. const $fixture = $("#qunit-fixture");
  509. $fixture.append('<input type="text" id="testmask" />');
  510. const testmask = document.getElementById("testmask");
  511. Inputmask("p{1,10}", {
  512. definitions: {
  513. p: {
  514. validator: "[A-Za-z\u0410-\u044F\u0401\u0451\u00C0-\u00FF\u00B5 ]",
  515. cardinality: 1,
  516. casing: "title" // auto uppercasing
  517. }
  518. }
  519. }).mask(testmask);
  520. $(testmask).val("title case");
  521. assert.equal(
  522. document.getElementById("testmask").inputmask._valueGet(),
  523. "Title Case",
  524. "Result " + document.getElementById("testmask").inputmask._valueGet()
  525. );
  526. });
  527. qunit.test(
  528. "Bug when typing after a fixed character #1299 - gayanj",
  529. function (assert) {
  530. const done = assert.async(),
  531. $fixture = $("#qunit-fixture");
  532. $fixture.append('<input type="text" id="testmask" />');
  533. const testmask = document.getElementById("testmask");
  534. Inputmask("AaaBAaaVaa").mask(testmask);
  535. testmask.focus();
  536. setTimeout(function () {
  537. $.caret(testmask, 4);
  538. $("#testmask").Type("a");
  539. assert.equal(
  540. document.getElementById("testmask").inputmask._valueGet(),
  541. "___BA__V__",
  542. "Result " + document.getElementById("testmask").inputmask._valueGet()
  543. );
  544. done();
  545. }, 0);
  546. }
  547. );
  548. }