/test/slashes-windows.js

https://github.com/micromatch/picomatch · JavaScript · 536 lines · 305 code · 11 blank · 220 comment · 0 complexity · 677fa4a0044fa93a8fe8f2c87c462c4f MD5 · raw file

  1. 'use strict';
  2. const assert = require('assert');
  3. const support = require('./support');
  4. const { isMatch, makeRe } = require('..');
  5. describe('slash handling - windows', () => {
  6. beforeEach(() => support.windowsPathSep());
  7. afterEach(() => support.resetPathSep());
  8. before(() => support.resetPathSep());
  9. after(() => support.resetPathSep());
  10. it('should match absolute windows paths with regex from makeRe', () => {
  11. const regex = makeRe('**/path/**', { windows: true });
  12. assert(regex.test('C:\\Users\\user\\Projects\\project\\path\\image.jpg'));
  13. });
  14. it('should match windows path separators with a string literal', () => {
  15. assert(!isMatch('a\\a', '(a/b)'));
  16. assert(isMatch('a\\b', '(a/b)'));
  17. assert(!isMatch('a\\c', '(a/b)'));
  18. assert(!isMatch('b\\a', '(a/b)'));
  19. assert(!isMatch('b\\b', '(a/b)'));
  20. assert(!isMatch('b\\c', '(a/b)'));
  21. assert(!isMatch('a\\a', 'a/b'));
  22. assert(isMatch('a\\b', 'a/b'));
  23. assert(!isMatch('a\\c', 'a/b'));
  24. assert(!isMatch('b\\a', 'a/b'));
  25. assert(!isMatch('b\\b', 'a/b'));
  26. assert(!isMatch('b\\c', 'a/b'));
  27. });
  28. it('should not match literal backslashes with literal forward slashes when windows is disabled', () => {
  29. assert(!isMatch('a\\a', 'a\\b', { windows: false }));
  30. assert(isMatch('a\\b', 'a\\b', { windows: false }));
  31. assert(!isMatch('a\\c', 'a\\b', { windows: false }));
  32. assert(!isMatch('b\\a', 'a\\b', { windows: false }));
  33. assert(!isMatch('b\\b', 'a\\b', { windows: false }));
  34. assert(!isMatch('b\\c', 'a\\b', { windows: false }));
  35. assert(!isMatch('a\\a', 'a/b', { windows: false }));
  36. assert(!isMatch('a\\b', 'a/b', { windows: false }));
  37. assert(!isMatch('a\\c', 'a/b', { windows: false }));
  38. assert(!isMatch('b\\a', 'a/b', { windows: false }));
  39. assert(!isMatch('b\\b', 'a/b', { windows: false }));
  40. assert(!isMatch('b\\c', 'a/b', { windows: false }));
  41. });
  42. it('should match an array of literal strings', () => {
  43. assert(!isMatch('a\\a', '(a/b)'));
  44. assert(isMatch('a\\b', '(a/b)'));
  45. assert(!isMatch('a\\c', '(a/b)'));
  46. assert(!isMatch('b\\a', '(a/b)'));
  47. assert(!isMatch('b\\b', '(a/b)'));
  48. assert(!isMatch('b\\c', '(a/b)'));
  49. });
  50. it('should not match backslashes with forward slashes when windows is disabled', () => {
  51. assert(!isMatch('a\\a', 'a/(a|c)', { windows: false }));
  52. assert(!isMatch('a\\b', 'a/(a|c)', { windows: false }));
  53. assert(!isMatch('a\\c', 'a/(a|c)', { windows: false }));
  54. assert(!isMatch('a\\a', 'a/(a|b|c)', { windows: false }));
  55. assert(!isMatch('a\\b', 'a/(a|b|c)', { windows: false }));
  56. assert(!isMatch('a\\c', 'a/(a|b|c)', { windows: false }));
  57. assert(!isMatch('a\\a', '(a\\b)', { windows: false }));
  58. assert(isMatch('a\\b', '(a\\\\b)', { windows: false }));
  59. assert(!isMatch('a\\c', '(a\\b)', { windows: false }));
  60. assert(!isMatch('b\\a', '(a\\b)', { windows: false }));
  61. assert(!isMatch('b\\b', '(a\\b)', { windows: false }));
  62. assert(!isMatch('b\\c', '(a\\b)', { windows: false }));
  63. assert(!isMatch('a\\a', '(a/b)', { windows: false }));
  64. assert(!isMatch('a\\b', '(a/b)', { windows: false }));
  65. assert(!isMatch('a\\c', '(a/b)', { windows: false }));
  66. assert(!isMatch('b\\a', '(a/b)', { windows: false }));
  67. assert(!isMatch('b\\b', '(a/b)', { windows: false }));
  68. assert(!isMatch('b\\c', '(a/b)', { windows: false }));
  69. assert(!isMatch('a\\a', 'a/c', { windows: false }));
  70. assert(!isMatch('a\\b', 'a/c', { windows: false }));
  71. assert(!isMatch('a\\c', 'a/c', { windows: false }));
  72. assert(!isMatch('b\\a', 'a/c', { windows: false }));
  73. assert(!isMatch('b\\b', 'a/c', { windows: false }));
  74. assert(!isMatch('b\\c', 'a/c', { windows: false }));
  75. });
  76. it('should match backslashes when followed by regex logical "or"', () => {
  77. assert(isMatch('a\\a', 'a/(a|c)'));
  78. assert(!isMatch('a\\b', 'a/(a|c)'));
  79. assert(isMatch('a\\c', 'a/(a|c)'));
  80. assert(isMatch('a\\a', 'a/(a|b|c)'));
  81. assert(isMatch('a\\b', 'a/(a|b|c)'));
  82. assert(isMatch('a\\c', 'a/(a|b|c)'));
  83. });
  84. it('should support matching backslashes with regex ranges', () => {
  85. assert(!isMatch('a\\a', 'a/[b-c]'));
  86. assert(isMatch('a\\b', 'a/[b-c]'));
  87. assert(isMatch('a\\c', 'a/[b-c]'));
  88. assert(!isMatch('a\\x\\y', 'a/[b-c]'));
  89. assert(!isMatch('a\\x', 'a/[b-c]'));
  90. assert(isMatch('a\\a', 'a/[a-z]'));
  91. assert(isMatch('a\\b', 'a/[a-z]'));
  92. assert(isMatch('a\\c', 'a/[a-z]'));
  93. assert(!isMatch('a\\x\\y', 'a/[a-z]'));
  94. assert(isMatch('a\\x\\y', 'a/[a-z]/y'));
  95. assert(isMatch('a\\x', 'a/[a-z]'));
  96. assert(!isMatch('a\\a', 'a/[b-c]', { windows: false }));
  97. assert(!isMatch('a\\b', 'a/[b-c]', { windows: false }));
  98. assert(!isMatch('a\\c', 'a/[b-c]', { windows: false }));
  99. assert(!isMatch('a\\x\\y', 'a/[b-c]', { windows: false }));
  100. assert(!isMatch('a\\x', 'a/[b-c]', { windows: false }));
  101. assert(!isMatch('a\\a', 'a/[a-z]', { windows: false }));
  102. assert(!isMatch('a\\b', 'a/[a-z]', { windows: false }));
  103. assert(!isMatch('a\\c', 'a/[a-z]', { windows: false }));
  104. assert(!isMatch('a\\x\\y', 'a/[a-z]', { windows: false }));
  105. assert(!isMatch('a\\x', 'a/[a-z]', { windows: false }));
  106. });
  107. it('should not match slashes with single stars', () => {
  108. assert(isMatch('a', '*'));
  109. assert(isMatch('b', '*'));
  110. assert(!isMatch('a\\a', '*'));
  111. assert(!isMatch('a\\b', '*'));
  112. assert(!isMatch('a\\c', '*'));
  113. assert(!isMatch('a\\x', '*'));
  114. assert(!isMatch('a\\a\\a', '*'));
  115. assert(!isMatch('a\\a\\b', '*'));
  116. assert(!isMatch('a\\a\\a\\a', '*'));
  117. assert(!isMatch('a\\a\\a\\a\\a', '*'));
  118. assert(!isMatch('x\\y', '*'));
  119. assert(!isMatch('z\\z', '*'));
  120. assert(!isMatch('a', '*/*'));
  121. assert(!isMatch('b', '*/*'));
  122. assert(isMatch('a\\a', '*/*'));
  123. assert(isMatch('a\\b', '*/*'));
  124. assert(isMatch('a\\c', '*/*'));
  125. assert(isMatch('a\\x', '*/*'));
  126. assert(!isMatch('a\\a\\a', '*/*'));
  127. assert(!isMatch('a\\a\\b', '*/*'));
  128. assert(!isMatch('a\\a\\a\\a', '*/*'));
  129. assert(!isMatch('a\\a\\a\\a\\a', '*/*'));
  130. assert(isMatch('x\\y', '*/*'));
  131. assert(isMatch('z\\z', '*/*'));
  132. assert(!isMatch('a', '*/*/*'));
  133. assert(!isMatch('b', '*/*/*'));
  134. assert(!isMatch('a\\a', '*/*/*'));
  135. assert(!isMatch('a\\b', '*/*/*'));
  136. assert(!isMatch('a\\c', '*/*/*'));
  137. assert(!isMatch('a\\x', '*/*/*'));
  138. assert(isMatch('a\\a\\a', '*/*/*'));
  139. assert(isMatch('a\\a\\b', '*/*/*'));
  140. assert(!isMatch('a\\a\\a\\a', '*/*/*'));
  141. assert(!isMatch('a\\a\\a\\a\\a', '*/*/*'));
  142. assert(!isMatch('x\\y', '*/*/*'));
  143. assert(!isMatch('z\\z', '*/*/*'));
  144. assert(!isMatch('a', '*/*/*/*'));
  145. assert(!isMatch('b', '*/*/*/*'));
  146. assert(!isMatch('a\\a', '*/*/*/*'));
  147. assert(!isMatch('a\\b', '*/*/*/*'));
  148. assert(!isMatch('a\\c', '*/*/*/*'));
  149. assert(!isMatch('a\\x', '*/*/*/*'));
  150. assert(!isMatch('a\\a\\a', '*/*/*/*'));
  151. assert(!isMatch('a\\a\\b', '*/*/*/*'));
  152. assert(isMatch('a\\a\\a\\a', '*/*/*/*'));
  153. assert(!isMatch('a\\a\\a\\a\\a', '*/*/*/*'));
  154. assert(!isMatch('x\\y', '*/*/*/*'));
  155. assert(!isMatch('z\\z', '*/*/*/*'));
  156. assert(!isMatch('a', '*/*/*/*/*'));
  157. assert(!isMatch('b', '*/*/*/*/*'));
  158. assert(!isMatch('a\\a', '*/*/*/*/*'));
  159. assert(!isMatch('a\\b', '*/*/*/*/*'));
  160. assert(!isMatch('a\\c', '*/*/*/*/*'));
  161. assert(!isMatch('a\\x', '*/*/*/*/*'));
  162. assert(!isMatch('a\\a\\a', '*/*/*/*/*'));
  163. assert(!isMatch('a\\a\\b', '*/*/*/*/*'));
  164. assert(!isMatch('a\\a\\a\\a', '*/*/*/*/*'));
  165. assert(isMatch('a\\a\\a\\a\\a', '*/*/*/*/*'));
  166. assert(!isMatch('x\\y', '*/*/*/*/*'));
  167. assert(!isMatch('z\\z', '*/*/*/*/*'));
  168. assert(!isMatch('a', 'a/*'));
  169. assert(!isMatch('b', 'a/*'));
  170. assert(isMatch('a\\a', 'a/*'));
  171. assert(isMatch('a\\b', 'a/*'));
  172. assert(isMatch('a\\c', 'a/*'));
  173. assert(isMatch('a\\x', 'a/*'));
  174. assert(!isMatch('a\\a\\a', 'a/*'));
  175. assert(!isMatch('a\\a\\b', 'a/*'));
  176. assert(!isMatch('a\\a\\a\\a', 'a/*'));
  177. assert(!isMatch('a\\a\\a\\a\\a', 'a/*'));
  178. assert(!isMatch('x\\y', 'a/*'));
  179. assert(!isMatch('z\\z', 'a/*'));
  180. assert(!isMatch('a', 'a/*/*'));
  181. assert(!isMatch('b', 'a/*/*'));
  182. assert(!isMatch('a\\a', 'a/*/*'));
  183. assert(!isMatch('a\\b', 'a/*/*'));
  184. assert(!isMatch('a\\c', 'a/*/*'));
  185. assert(!isMatch('a\\x', 'a/*/*'));
  186. assert(isMatch('a\\a\\a', 'a/*/*'));
  187. assert(isMatch('a\\a\\b', 'a/*/*'));
  188. assert(!isMatch('a\\a\\a\\a', 'a/*/*'));
  189. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/*'));
  190. assert(!isMatch('x\\y', 'a/*/*'));
  191. assert(!isMatch('z\\z', 'a/*/*'));
  192. assert(!isMatch('a', 'a/*/*/*'));
  193. assert(!isMatch('b', 'a/*/*/*'));
  194. assert(!isMatch('a\\a', 'a/*/*/*'));
  195. assert(!isMatch('a\\b', 'a/*/*/*'));
  196. assert(!isMatch('a\\c', 'a/*/*/*'));
  197. assert(!isMatch('a\\x', 'a/*/*/*'));
  198. assert(!isMatch('a\\a\\a', 'a/*/*/*'));
  199. assert(!isMatch('a\\a\\b', 'a/*/*/*'));
  200. assert(isMatch('a\\a\\a\\a', 'a/*/*/*'));
  201. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/*/*'));
  202. assert(!isMatch('x\\y', 'a/*/*/*'));
  203. assert(!isMatch('z\\z', 'a/*/*/*'));
  204. assert(!isMatch('a', 'a/*/*/*/*'));
  205. assert(!isMatch('b', 'a/*/*/*/*'));
  206. assert(!isMatch('a\\a', 'a/*/*/*/*'));
  207. assert(!isMatch('a\\b', 'a/*/*/*/*'));
  208. assert(!isMatch('a\\c', 'a/*/*/*/*'));
  209. assert(!isMatch('a\\x', 'a/*/*/*/*'));
  210. assert(!isMatch('a\\a\\a', 'a/*/*/*/*'));
  211. assert(!isMatch('a\\a\\b', 'a/*/*/*/*'));
  212. assert(!isMatch('a\\a\\a\\a', 'a/*/*/*/*'));
  213. assert(isMatch('a\\a\\a\\a\\a', 'a/*/*/*/*'));
  214. assert(!isMatch('x\\y', 'a/*/*/*/*'));
  215. assert(!isMatch('z\\z', 'a/*/*/*/*'));
  216. assert(!isMatch('a', 'a/*/a'));
  217. assert(!isMatch('b', 'a/*/a'));
  218. assert(!isMatch('a\\a', 'a/*/a'));
  219. assert(!isMatch('a\\b', 'a/*/a'));
  220. assert(!isMatch('a\\c', 'a/*/a'));
  221. assert(!isMatch('a\\x', 'a/*/a'));
  222. assert(isMatch('a\\a\\a', 'a/*/a'));
  223. assert(!isMatch('a\\a\\b', 'a/*/a'));
  224. assert(!isMatch('a\\a\\a\\a', 'a/*/a'));
  225. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/a'));
  226. assert(!isMatch('x\\y', 'a/*/a'));
  227. assert(!isMatch('z\\z', 'a/*/a'));
  228. assert(!isMatch('a', 'a/*/b'));
  229. assert(!isMatch('b', 'a/*/b'));
  230. assert(!isMatch('a\\a', 'a/*/b'));
  231. assert(!isMatch('a\\b', 'a/*/b'));
  232. assert(!isMatch('a\\c', 'a/*/b'));
  233. assert(!isMatch('a\\x', 'a/*/b'));
  234. assert(!isMatch('a\\a\\a', 'a/*/b'));
  235. assert(isMatch('a\\a\\b', 'a/*/b'));
  236. assert(!isMatch('a\\a\\a\\a', 'a/*/b'));
  237. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/b'));
  238. assert(!isMatch('x\\y', 'a/*/b'));
  239. assert(!isMatch('z\\z', 'a/*/b'));
  240. assert(!isMatch('a', '*/*', { windows: false }));
  241. assert(!isMatch('b', '*/*', { windows: false }));
  242. assert(!isMatch('a\\a', '*/*', { windows: false }));
  243. assert(!isMatch('a\\b', '*/*', { windows: false }));
  244. assert(!isMatch('a\\c', '*/*', { windows: false }));
  245. assert(!isMatch('a\\x', '*/*', { windows: false }));
  246. assert(!isMatch('a\\a\\a', '*/*', { windows: false }));
  247. assert(!isMatch('a\\a\\b', '*/*', { windows: false }));
  248. assert(!isMatch('a\\a\\a\\a', '*/*', { windows: false }));
  249. assert(!isMatch('a\\a\\a\\a\\a', '*/*', { windows: false }));
  250. assert(!isMatch('x\\y', '*/*', { windows: false }));
  251. assert(!isMatch('z\\z', '*/*', { windows: false }));
  252. assert(!isMatch('a', '*/*/*', { windows: false }));
  253. assert(!isMatch('b', '*/*/*', { windows: false }));
  254. assert(!isMatch('a\\a', '*/*/*', { windows: false }));
  255. assert(!isMatch('a\\b', '*/*/*', { windows: false }));
  256. assert(!isMatch('a\\c', '*/*/*', { windows: false }));
  257. assert(!isMatch('a\\x', '*/*/*', { windows: false }));
  258. assert(!isMatch('a\\a\\a', '*/*/*', { windows: false }));
  259. assert(!isMatch('a\\a\\b', '*/*/*', { windows: false }));
  260. assert(!isMatch('a\\a\\a\\a', '*/*/*', { windows: false }));
  261. assert(!isMatch('a\\a\\a\\a\\a', '*/*/*', { windows: false }));
  262. assert(!isMatch('x\\y', '*/*/*', { windows: false }));
  263. assert(!isMatch('z\\z', '*/*/*', { windows: false }));
  264. assert(!isMatch('a', '*/*/*/*', { windows: false }));
  265. assert(!isMatch('b', '*/*/*/*', { windows: false }));
  266. assert(!isMatch('a\\a', '*/*/*/*', { windows: false }));
  267. assert(!isMatch('a\\b', '*/*/*/*', { windows: false }));
  268. assert(!isMatch('a\\c', '*/*/*/*', { windows: false }));
  269. assert(!isMatch('a\\x', '*/*/*/*', { windows: false }));
  270. assert(!isMatch('a\\a\\a', '*/*/*/*', { windows: false }));
  271. assert(!isMatch('a\\a\\b', '*/*/*/*', { windows: false }));
  272. assert(!isMatch('a\\a\\a\\a', '*/*/*/*', { windows: false }));
  273. assert(!isMatch('a\\a\\a\\a\\a', '*/*/*/*', { windows: false }));
  274. assert(!isMatch('x\\y', '*/*/*/*', { windows: false }));
  275. assert(!isMatch('z\\z', '*/*/*/*', { windows: false }));
  276. assert(!isMatch('a', '*/*/*/*/*', { windows: false }));
  277. assert(!isMatch('b', '*/*/*/*/*', { windows: false }));
  278. assert(!isMatch('a\\a', '*/*/*/*/*', { windows: false }));
  279. assert(!isMatch('a\\b', '*/*/*/*/*', { windows: false }));
  280. assert(!isMatch('a\\c', '*/*/*/*/*', { windows: false }));
  281. assert(!isMatch('a\\x', '*/*/*/*/*', { windows: false }));
  282. assert(!isMatch('a\\a\\a', '*/*/*/*/*', { windows: false }));
  283. assert(!isMatch('a\\a\\b', '*/*/*/*/*', { windows: false }));
  284. assert(!isMatch('a\\a\\a\\a', '*/*/*/*/*', { windows: false }));
  285. assert(!isMatch('a\\a\\a\\a\\a', '*/*/*/*/*', { windows: false }));
  286. assert(!isMatch('x\\y', '*/*/*/*/*', { windows: false }));
  287. assert(!isMatch('z\\z', '*/*/*/*/*', { windows: false }));
  288. assert(!isMatch('a', 'a/*', { windows: false }));
  289. assert(!isMatch('b', 'a/*', { windows: false }));
  290. assert(!isMatch('a\\a', 'a/*', { windows: false }));
  291. assert(!isMatch('a\\b', 'a/*', { windows: false }));
  292. assert(!isMatch('a\\c', 'a/*', { windows: false }));
  293. assert(!isMatch('a\\x', 'a/*', { windows: false }));
  294. assert(!isMatch('a\\a\\a', 'a/*', { windows: false }));
  295. assert(!isMatch('a\\a\\b', 'a/*', { windows: false }));
  296. assert(!isMatch('a\\a\\a\\a', 'a/*', { windows: false }));
  297. assert(!isMatch('a\\a\\a\\a\\a', 'a/*', { windows: false }));
  298. assert(!isMatch('x\\y', 'a/*', { windows: false }));
  299. assert(!isMatch('z\\z', 'a/*', { windows: false }));
  300. assert(!isMatch('a', 'a/*/*', { windows: false }));
  301. assert(!isMatch('b', 'a/*/*', { windows: false }));
  302. assert(!isMatch('a\\a', 'a/*/*', { windows: false }));
  303. assert(!isMatch('a\\b', 'a/*/*', { windows: false }));
  304. assert(!isMatch('a\\c', 'a/*/*', { windows: false }));
  305. assert(!isMatch('a\\x', 'a/*/*', { windows: false }));
  306. assert(!isMatch('a\\a\\a', 'a/*/*', { windows: false }));
  307. assert(!isMatch('a\\a\\b', 'a/*/*', { windows: false }));
  308. assert(!isMatch('a\\a\\a\\a', 'a/*/*', { windows: false }));
  309. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/*', { windows: false }));
  310. assert(!isMatch('x\\y', 'a/*/*', { windows: false }));
  311. assert(!isMatch('z\\z', 'a/*/*', { windows: false }));
  312. assert(!isMatch('a', 'a/*/*/*', { windows: false }));
  313. assert(!isMatch('b', 'a/*/*/*', { windows: false }));
  314. assert(!isMatch('a\\a', 'a/*/*/*', { windows: false }));
  315. assert(!isMatch('a\\b', 'a/*/*/*', { windows: false }));
  316. assert(!isMatch('a\\c', 'a/*/*/*', { windows: false }));
  317. assert(!isMatch('a\\x', 'a/*/*/*', { windows: false }));
  318. assert(!isMatch('a\\a\\a', 'a/*/*/*', { windows: false }));
  319. assert(!isMatch('a\\a\\b', 'a/*/*/*', { windows: false }));
  320. assert(!isMatch('a\\a\\a\\a', 'a/*/*/*', { windows: false }));
  321. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/*/*', { windows: false }));
  322. assert(!isMatch('x\\y', 'a/*/*/*', { windows: false }));
  323. assert(!isMatch('z\\z', 'a/*/*/*', { windows: false }));
  324. assert(!isMatch('a', 'a/*/*/*/*', { windows: false }));
  325. assert(!isMatch('b', 'a/*/*/*/*', { windows: false }));
  326. assert(!isMatch('a\\a', 'a/*/*/*/*', { windows: false }));
  327. assert(!isMatch('a\\b', 'a/*/*/*/*', { windows: false }));
  328. assert(!isMatch('a\\c', 'a/*/*/*/*', { windows: false }));
  329. assert(!isMatch('a\\x', 'a/*/*/*/*', { windows: false }));
  330. assert(!isMatch('a\\a\\a', 'a/*/*/*/*', { windows: false }));
  331. assert(!isMatch('a\\a\\b', 'a/*/*/*/*', { windows: false }));
  332. assert(!isMatch('a\\a\\a\\a', 'a/*/*/*/*', { windows: false }));
  333. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/*/*/*', { windows: false }));
  334. assert(!isMatch('x\\y', 'a/*/*/*/*', { windows: false }));
  335. assert(!isMatch('z\\z', 'a/*/*/*/*', { windows: false }));
  336. assert(!isMatch('a', 'a/*/a', { windows: false }));
  337. assert(!isMatch('b', 'a/*/a', { windows: false }));
  338. assert(!isMatch('a\\a', 'a/*/a', { windows: false }));
  339. assert(!isMatch('a\\b', 'a/*/a', { windows: false }));
  340. assert(!isMatch('a\\c', 'a/*/a', { windows: false }));
  341. assert(!isMatch('a\\x', 'a/*/a', { windows: false }));
  342. assert(!isMatch('a\\a\\a', 'a/*/a', { windows: false }));
  343. assert(!isMatch('a\\a\\b', 'a/*/a', { windows: false }));
  344. assert(!isMatch('a\\a\\a\\a', 'a/*/a', { windows: false }));
  345. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/a', { windows: false }));
  346. assert(!isMatch('x\\y', 'a/*/a', { windows: false }));
  347. assert(!isMatch('z\\z', 'a/*/a', { windows: false }));
  348. assert(!isMatch('a', 'a/*/b', { windows: false }));
  349. assert(!isMatch('b', 'a/*/b', { windows: false }));
  350. assert(!isMatch('a\\a', 'a/*/b', { windows: false }));
  351. assert(!isMatch('a\\b', 'a/*/b', { windows: false }));
  352. assert(!isMatch('a\\c', 'a/*/b', { windows: false }));
  353. assert(!isMatch('a\\x', 'a/*/b', { windows: false }));
  354. assert(!isMatch('a\\a\\a', 'a/*/b', { windows: false }));
  355. assert(!isMatch('a\\a\\b', 'a/*/b', { windows: false }));
  356. assert(!isMatch('a\\a\\a\\a', 'a/*/b', { windows: false }));
  357. assert(!isMatch('a\\a\\a\\a\\a', 'a/*/b', { windows: false }));
  358. assert(!isMatch('x\\y', 'a/*/b', { windows: false }));
  359. assert(!isMatch('z\\z', 'a/*/b', { windows: false }));
  360. });
  361. it('should support globstars (**)', () => {
  362. assert(isMatch('a\\a', 'a/**'));
  363. assert(isMatch('a\\b', 'a/**'));
  364. assert(isMatch('a\\c', 'a/**'));
  365. assert(isMatch('a\\x', 'a/**'));
  366. assert(isMatch('a\\x\\y', 'a/**'));
  367. assert(isMatch('a\\x\\y\\z', 'a/**'));
  368. assert(isMatch('a\\a', 'a/**/*'));
  369. assert(isMatch('a\\b', 'a/**/*'));
  370. assert(isMatch('a\\c', 'a/**/*'));
  371. assert(isMatch('a\\x', 'a/**/*'));
  372. assert(isMatch('a\\x\\y', 'a/**/*'));
  373. assert(isMatch('a\\x\\y\\z', 'a/**/*'));
  374. assert(isMatch('a\\a', 'a/**/**/*'));
  375. assert(isMatch('a\\b', 'a/**/**/*'));
  376. assert(isMatch('a\\c', 'a/**/**/*'));
  377. assert(isMatch('a\\x', 'a/**/**/*'));
  378. assert(isMatch('a\\x\\y', 'a/**/**/*'));
  379. assert(isMatch('a\\x\\y\\z', 'a/**/**/*'));
  380. });
  381. it('should not match backslashes with globstars when disabled', () => {
  382. assert(!isMatch('a\\a', 'a/**', { windows: false }));
  383. assert(!isMatch('a\\b', 'a/**', { windows: false }));
  384. assert(!isMatch('a\\c', 'a/**', { windows: false }));
  385. assert(!isMatch('a\\x', 'a/**', { windows: false }));
  386. assert(!isMatch('a\\x\\y', 'a/**', { windows: false }));
  387. assert(!isMatch('a\\x\\y\\z', 'a/**', { windows: false }));
  388. assert(!isMatch('a\\a', 'a/**/*', { windows: false }));
  389. assert(!isMatch('a\\b', 'a/**/*', { windows: false }));
  390. assert(!isMatch('a\\c', 'a/**/*', { windows: false }));
  391. assert(!isMatch('a\\x', 'a/**/*', { windows: false }));
  392. assert(!isMatch('a\\x\\y', 'a/**/*', { windows: false }));
  393. assert(!isMatch('a\\x\\y\\z', 'a/**/*', { windows: false }));
  394. assert(!isMatch('a\\a', 'a/**/**/*', { windows: false }));
  395. assert(!isMatch('a\\b', 'a/**/**/*', { windows: false }));
  396. assert(!isMatch('a\\c', 'a/**/**/*', { windows: false }));
  397. assert(!isMatch('a\\x', 'a/**/**/*', { windows: false }));
  398. assert(!isMatch('a\\x\\y', 'a/**/**/*', { windows: false }));
  399. assert(!isMatch('a\\x\\y\\z', 'a/**/**/*', { windows: false }));
  400. });
  401. it('should work with file extensions', () => {
  402. assert(isMatch('a.txt', 'a*.txt'));
  403. assert(!isMatch('a\\b.txt', 'a*.txt'));
  404. assert(!isMatch('a\\x\\y.txt', 'a*.txt'));
  405. assert(!isMatch('a\\x\\y\\z', 'a*.txt'));
  406. assert(isMatch('a.txt', 'a.txt'));
  407. assert(!isMatch('a\\b.txt', 'a.txt'));
  408. assert(!isMatch('a\\x\\y.txt', 'a.txt'));
  409. assert(!isMatch('a\\x\\y\\z', 'a.txt'));
  410. assert(!isMatch('a.txt', 'a/**/*.txt'));
  411. assert(isMatch('a\\b.txt', 'a/**/*.txt'));
  412. assert(isMatch('a\\x\\y.txt', 'a/**/*.txt'));
  413. assert(!isMatch('a\\x\\y\\z', 'a/**/*.txt'));
  414. assert(!isMatch('a.txt', 'a/**/*.txt', { windows: false }));
  415. assert(!isMatch('a\\b.txt', 'a/**/*.txt', { windows: false }));
  416. assert(!isMatch('a\\x\\y.txt', 'a/**/*.txt', { windows: false }));
  417. assert(!isMatch('a\\x\\y\\z', 'a/**/*.txt', { windows: false }));
  418. assert(!isMatch('a.txt', 'a/*.txt'));
  419. assert(isMatch('a\\b.txt', 'a/*.txt'));
  420. assert(!isMatch('a\\x\\y.txt', 'a/*.txt'));
  421. assert(!isMatch('a\\x\\y\\z', 'a/*.txt'));
  422. assert(!isMatch('a.txt', 'a/*.txt', { windows: false }));
  423. assert(!isMatch('a\\b.txt', 'a/*.txt', { windows: false }));
  424. assert(!isMatch('a\\x\\y.txt', 'a/*.txt', { windows: false }));
  425. assert(!isMatch('a\\x\\y\\z', 'a/*.txt', { windows: false }));
  426. assert(!isMatch('a.txt', 'a/*/*.txt'));
  427. assert(!isMatch('a\\b.txt', 'a/*/*.txt'));
  428. assert(isMatch('a\\x\\y.txt', 'a/*/*.txt'));
  429. assert(!isMatch('a\\x\\y\\z', 'a/*/*.txt'));
  430. assert(!isMatch('a.txt', 'a/*/*.txt', { windows: false }));
  431. assert(!isMatch('a\\b.txt', 'a/*/*.txt', { windows: false }));
  432. assert(!isMatch('a\\x\\y.txt', 'a/*/*.txt', { windows: false }));
  433. assert(!isMatch('a\\x\\y\\z', 'a/*/*.txt', { windows: false }));
  434. });
  435. it('should support negation patterns', () => {
  436. assert(isMatch('a', '!a/b'));
  437. assert(isMatch('a\\a', '!a/b'));
  438. assert(!isMatch('a\\b', '!a/b'));
  439. assert(isMatch('a\\c', '!a/b'));
  440. assert(isMatch('b\\a', '!a/b'));
  441. assert(isMatch('b\\b', '!a/b'));
  442. assert(isMatch('b\\c', '!a/b'));
  443. assert(isMatch('a', '!*/c'));
  444. assert(isMatch('a\\a', '!*/c'));
  445. assert(isMatch('a\\b', '!*/c'));
  446. assert(!isMatch('a\\c', '!*/c'));
  447. assert(isMatch('b\\a', '!*/c'));
  448. assert(isMatch('b\\b', '!*/c'));
  449. assert(!isMatch('b\\c', '!*/c'));
  450. assert(isMatch('a', '!a/b'));
  451. assert(isMatch('a\\a', '!a/b'));
  452. assert(!isMatch('a\\b', '!a/b'));
  453. assert(isMatch('a\\c', '!a/b'));
  454. assert(isMatch('b\\a', '!a/b'));
  455. assert(isMatch('b\\b', '!a/b'));
  456. assert(isMatch('b\\c', '!a/b'));
  457. assert(isMatch('a', '!*/c'));
  458. assert(isMatch('a\\a', '!*/c'));
  459. assert(isMatch('a\\b', '!*/c'));
  460. assert(!isMatch('a\\c', '!*/c'));
  461. assert(isMatch('b\\a', '!*/c'));
  462. assert(isMatch('b\\b', '!*/c'));
  463. assert(!isMatch('b\\c', '!*/c'));
  464. assert(isMatch('a', '!a/(b)'));
  465. assert(isMatch('a\\a', '!a/(b)'));
  466. assert(!isMatch('a\\b', '!a/(b)'));
  467. assert(isMatch('a\\c', '!a/(b)'));
  468. assert(isMatch('b\\a', '!a/(b)'));
  469. assert(isMatch('b\\b', '!a/(b)'));
  470. assert(isMatch('b\\c', '!a/(b)'));
  471. assert(isMatch('a', '!(a/b)'));
  472. assert(isMatch('a\\a', '!(a/b)'));
  473. assert(!isMatch('a\\b', '!(a/b)'));
  474. assert(isMatch('a\\c', '!(a/b)'));
  475. assert(isMatch('b\\a', '!(a/b)'));
  476. assert(isMatch('b\\b', '!(a/b)'));
  477. assert(isMatch('b\\c', '!(a/b)'));
  478. });
  479. });