test-symbols.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. /* global describe,it */
  2. var getSlug = require('../lib/speakingurl');
  3. describe('getSlug symbols', function () {
  4. 'use strict';
  5. it('should convert symbols', function (done) {
  6. getSlug('Foo & Bar | Baz')
  7. .should.eql('foo-and-bar-or-baz');
  8. getSlug('Foo & Bar | Baz', {
  9. lang: 'en'
  10. })
  11. .should.eql('foo-and-bar-or-baz');
  12. getSlug('Foo & Bar | Baz', {
  13. lang: 'de'
  14. })
  15. .should.eql('foo-und-bar-oder-baz');
  16. getSlug('Foo & Bar | Baz', {
  17. lang: 'fr'
  18. })
  19. .should.eql('foo-et-bar-ou-baz');
  20. getSlug('Foo & Bar | Baz', {
  21. lang: 'es'
  22. })
  23. .should.eql('foo-y-bar-u-baz');
  24. getSlug('Foo & Bar | Baz', {
  25. lang: 'ru'
  26. })
  27. .should.eql('foo-i-bar-ili-baz');
  28. getSlug('Foo & Bar | Baz', {
  29. lang: 'cs'
  30. })
  31. .should.eql('foo-a-bar-nebo-baz');
  32. getSlug('Foo & Bar | Baz', {
  33. lang: 'sk'
  34. })
  35. .should.eql('foo-a-bar-alebo-baz');
  36. done();
  37. });
  38. it('should not convert symbols with uric flag true', function (done) {
  39. getSlug('Foo & Bar | Baz', {
  40. uric: true
  41. })
  42. .should.eql('foo-&-bar-or-baz');
  43. getSlug('Foo & Bar | Baz', {
  44. lang: 'en',
  45. uric: true
  46. })
  47. .should.eql('foo-&-bar-or-baz');
  48. getSlug('Foo & Bar | Baz', {
  49. lang: 'de',
  50. uric: true
  51. })
  52. .should.eql('foo-&-bar-oder-baz');
  53. getSlug('Foo & Bar | Baz', {
  54. lang: 'fr',
  55. uric: true
  56. })
  57. .should.eql('foo-&-bar-ou-baz');
  58. getSlug('Foo & Bar | Baz', {
  59. lang: 'es',
  60. uric: true
  61. })
  62. .should.eql('foo-&-bar-u-baz');
  63. getSlug('Foo & Bar | Baz', {
  64. lang: 'ru',
  65. uric: true
  66. })
  67. .should.eql('foo-&-bar-ili-baz');
  68. getSlug('Foo & Bar | Baz', {
  69. lang: 'cs',
  70. uric: true
  71. })
  72. .should.eql('foo-&-bar-nebo-baz');
  73. getSlug('Foo & Bar | Baz', {
  74. lang: 'sk',
  75. uric: true
  76. })
  77. .should.eql('foo-&-bar-alebo-baz');
  78. done();
  79. });
  80. it('should not convert symbols with uricNoSlash flag true', function (done) {
  81. getSlug('Foo & Bar | Baz', {
  82. uricNoSlash: true
  83. })
  84. .should.eql('foo-&-bar-or-baz');
  85. getSlug('Foo & Bar | Baz', {
  86. lang: 'en',
  87. uricNoSlash: true
  88. })
  89. .should.eql('foo-&-bar-or-baz');
  90. getSlug('Foo & Bar | Baz', {
  91. lang: 'de',
  92. uricNoSlash: true
  93. })
  94. .should.eql('foo-&-bar-oder-baz');
  95. getSlug('Foo & Bar | Baz', {
  96. lang: 'fr',
  97. uricNoSlash: true
  98. })
  99. .should.eql('foo-&-bar-ou-baz');
  100. getSlug('Foo & Bar | Baz', {
  101. lang: 'es',
  102. uricNoSlash: true
  103. })
  104. .should.eql('foo-&-bar-u-baz');
  105. getSlug('Foo & Bar | Baz', {
  106. lang: 'ru',
  107. uricNoSlash: true
  108. })
  109. .should.eql('foo-&-bar-ili-baz');
  110. getSlug('Foo & Bar | Baz', {
  111. lang: 'cs',
  112. uricNoSlash: true
  113. })
  114. .should.eql('foo-&-bar-nebo-baz');
  115. getSlug('Foo & Bar | Baz', {
  116. lang: 'sk',
  117. uricNoSlash: true
  118. })
  119. .should.eql('foo-&-bar-alebo-baz');
  120. done();
  121. });
  122. it('should not convert symbols with mark flag true', function (done) {
  123. getSlug('Foo (Bar) . Baz', {
  124. mark: true,
  125. symbols: false
  126. })
  127. .should.eql('foo-(bar)-.-baz');
  128. getSlug('Foo (Bar) . Baz', {
  129. lang: 'en',
  130. mark: true
  131. })
  132. .should.eql('foo-(bar)-.-baz');
  133. getSlug('Foo (Bar) . & Baz', {
  134. lang: 'en',
  135. mark: true
  136. })
  137. .should.eql('foo-(bar)-.-and-baz');
  138. getSlug('Foo (Bar) . Baz', {
  139. lang: 'de',
  140. mark: true
  141. })
  142. .should.eql('foo-(bar)-.-baz');
  143. getSlug('Foo (Bar) . Baz', {
  144. lang: 'fr',
  145. mark: true
  146. })
  147. .should.eql('foo-(bar)-.-baz');
  148. getSlug('Foo (Bar) . Baz', {
  149. lang: 'es',
  150. mark: true
  151. })
  152. .should.eql('foo-(bar)-.-baz');
  153. getSlug('Foo (Bar) . Baz', {
  154. lang: 'ru',
  155. mark: true
  156. })
  157. .should.eql('foo-(bar)-.-baz');
  158. getSlug('Foo (Bar) . Baz', {
  159. lang: 'cs',
  160. mark: true
  161. })
  162. .should.eql('foo-(bar)-.-baz');
  163. getSlug('Foo (Bar) . Baz', {
  164. lang: 'sk',
  165. mark: true
  166. })
  167. .should.eql('foo-(bar)-.-baz');
  168. done();
  169. });
  170. it('should convert symbols with flags true', function (done) {
  171. getSlug('Foo (♥) ; Baz=Bar', {
  172. lang: 'en',
  173. uric: true,
  174. uricNoSlash: true,
  175. mark: true
  176. })
  177. .should.eql('foo-(love)-;-baz=bar');
  178. getSlug('Foo (♥) ; Baz=& Bar', {
  179. lang: 'en',
  180. uric: true,
  181. uricNoSlash: true,
  182. mark: true
  183. })
  184. .should.eql('foo-(love)-;-baz=&-bar');
  185. getSlug('Foo (♥) ; Baz=& Bar', {
  186. lang: 'en',
  187. mark: true
  188. })
  189. .should.eql('foo-(love)-baz-and-bar');
  190. getSlug('Foo (♥) ; Baz=Bar', {
  191. lang: 'de',
  192. uric: true,
  193. uricNoSlash: true,
  194. mark: true
  195. })
  196. .should.eql('foo-(liebe)-;-baz=bar');
  197. getSlug('Foo (♥) ; Baz=Bar', {
  198. lang: 'fr',
  199. uric: true,
  200. uricNoSlash: true,
  201. mark: true
  202. })
  203. .should.eql('foo-(amour)-;-baz=bar');
  204. getSlug('Foo (♥) ; Baz=Bar', {
  205. lang: 'es',
  206. uric: true,
  207. uricNoSlash: true,
  208. mark: true
  209. })
  210. .should.eql('foo-(amor)-;-baz=bar');
  211. getSlug('Foo (♥) ; Baz=Bar', {
  212. lang: 'ru',
  213. uric: true,
  214. uricNoSlash: true,
  215. mark: true
  216. })
  217. .should.eql('foo-(lubov)-;-baz=bar');
  218. getSlug('Foo (♥) ; Baz=Bar', {
  219. lang: 'cs',
  220. uric: true,
  221. uricNoSlash: true,
  222. mark: true
  223. })
  224. .should.eql('foo-(laska)-;-baz=bar');
  225. getSlug('Foo (♥) ; Baz=Bar', {
  226. lang: 'sk',
  227. uric: true,
  228. uricNoSlash: true,
  229. mark: true
  230. })
  231. .should.eql('foo-(laska)-;-baz=bar');
  232. getSlug(' Sch(* )ner (♥)Ti♥tel ♥läßt grüßen!? Bel♥♥ été !', {
  233. lang: 'en',
  234. uric: true,
  235. uricNoSlash: true,
  236. mark: true,
  237. maintainCase: true
  238. })
  239. .should.eql(
  240. 'Sch(*-)ner-(love)Ti-love-tel-love-laesst-gruessen!?-Bel-love-love-ete-!'
  241. );
  242. done();
  243. });
  244. it('should not convert symbols with flags true', function (done) {
  245. getSlug('Foo (♥) ; Baz=Bar', {
  246. lang: 'en',
  247. mark: true,
  248. symbols: false
  249. })
  250. .should.eql('foo-(-)-baz-bar');
  251. getSlug('Foo (♥) ; Baz=& Bar', {
  252. lang: 'en',
  253. mark: true,
  254. symbols: false
  255. })
  256. .should.eql('foo-(-)-baz-bar');
  257. getSlug('Foo (♥) ; Baz=& Bar', {
  258. lang: 'en',
  259. mark: true,
  260. symbols: false
  261. })
  262. .should.eql('foo-(-)-baz-bar');
  263. getSlug('Foo (♥) ; Baz= & Bar', {
  264. lang: 'de',
  265. mark: true,
  266. symbols: false
  267. })
  268. .should.eql('foo-(-)-baz-bar');
  269. getSlug('Foo (♥) ; Baz=& Bar', {
  270. lang: 'fr',
  271. mark: true,
  272. symbols: false
  273. })
  274. .should.eql('foo-(-)-baz-bar');
  275. getSlug('Foo (♥) ; Baz=& Bar', {
  276. lang: 'es',
  277. mark: true,
  278. symbols: false
  279. })
  280. .should.eql('foo-(-)-baz-bar');
  281. getSlug('Foo (♥) ; Baz=& Bar', {
  282. lang: 'ru',
  283. mark: true,
  284. symbols: false
  285. })
  286. .should.eql('foo-(-)-baz-bar');
  287. getSlug('Foo (♥) ; Baz=& Bar', {
  288. lang: 'cs',
  289. mark: true,
  290. symbols: false
  291. })
  292. .should.eql('foo-(-)-baz-bar');
  293. getSlug('Foo (♥) ; Baz=& Bar', {
  294. lang: 'sk',
  295. mark: true,
  296. symbols: false
  297. })
  298. .should.eql('foo-(-)-baz-bar');
  299. getSlug(' Sch(* )ner (♥)Ti♥tel ♥läßt grüßen!? Bel♥♥ été !', {
  300. lang: 'en',
  301. mark: true,
  302. maintainCase: true,
  303. symbols: false
  304. })
  305. .should.eql(
  306. 'Sch(*-)ner-(-)Ti-tel-laesst-gruessen!-Bel-ete-!'
  307. );
  308. done();
  309. });
  310. it('should replace symbols (de)', function (done) {
  311. getSlug('Äpfel & Birnen', {
  312. lang: 'de'
  313. })
  314. .should.eql('aepfel-und-birnen');
  315. getSlug('ÄÖÜäöüß', {
  316. lang: 'de',
  317. maintainCase: true
  318. })
  319. .should.eql('AeOeUeaeoeuess');
  320. done();
  321. });
  322. it('should not replace symbols (de)', function (done) {
  323. getSlug('Äpfel & Birnen', {
  324. lang: 'de',
  325. symbols: false
  326. })
  327. .should.eql('aepfel-birnen');
  328. getSlug('ÄÖÜäöüß & Äpfel', {
  329. lang: 'de',
  330. maintainCase: true,
  331. symbols: false
  332. })
  333. .should.eql('AeOeUeaeoeuess-Aepfel');
  334. done();
  335. });
  336. it('should replace chars by cs language standards', function (done) {
  337. getSlug(
  338. 'AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhChchIiÍíJjKkLlMmNnŇňOoÓóPpQqRrŘřSsŠšTtŤťUuÚúŮůVvWwXxYyÝýZzŽž', {
  339. lang: 'cs'
  340. })
  341. .should.eql(
  342. 'aaaabbccccddddeeeeeeffgghhchchiiiijjkkllmmnnnnooooppqqrrrrssssttttuuuuuuvvwwxxyyyyzzzz'
  343. );
  344. getSlug(
  345. 'AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhChchIiÍíJjKkLlMmNnŇňOoÓóPpQqRrŘřSsŠšTtŤťUuÚúŮůVvWwXxYyÝýZzŽž', {
  346. lang: 'cs',
  347. maintainCase: true
  348. })
  349. .should.eql(
  350. 'AaAaBbCcCcDdDdEeEeEeFfGgHhChchIiIiJjKkLlMmNnNnOoOoPpQqRrRrSsSsTtTtUuUuUuVvWwXxYyYyZzZz'
  351. );
  352. done();
  353. });
  354. it('should replace chars by sk language standards', function (done) {
  355. getSlug(
  356. 'AaÁaÄäBbCcČčDdĎďDzdzDždžEeÉéFfGgHhChchIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpQqRrŔŕSsŠšTtŤťUuÚúVvWwXxYyÝýZzŽž', {
  357. lang: 'sk'
  358. })
  359. .should.eql(
  360. 'aaaaaabbccccdddddzdzdzdzeeeeffgghhchchiiiijjkkllllllmmnnnnooooooppqqrrrrssssttttuuuuvvwwxxyyyyzzzz'
  361. );
  362. getSlug(
  363. 'AaÁaÄäBbCcČčDdĎďDzdzDždžEeÉéFfGgHhChchIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpQqRrŔŕSsŠšTtŤťUuÚúVvWwXxYyÝýZzŽž', {
  364. lang: 'sk',
  365. maintainCase: true
  366. })
  367. .should.eql(
  368. 'AaAaAaBbCcCcDdDdDzdzDzdzEeEeFfGgHhChchIiIiJjKkLlLlLlMmNnNnOoOoOoPpQqRrRrSsSsTtTtUuUuVvWwXxYyYyZzZz'
  369. );
  370. done();
  371. });
  372. it('should ignore not available language param', function (done) {
  373. getSlug('Äpfel & Birnen', {
  374. lang: 'xx'
  375. })
  376. .should.eql('aepfel-and-birnen');
  377. done();
  378. });
  379. it('should convert currency symbols to lowercase', function (done) {
  380. getSlug('NEXUS4 only €199!', {
  381. maintainCase: false
  382. })
  383. .should.eql('nexus4-only-eur199');
  384. getSlug('NEXUS4 only €299.93', {
  385. maintainCase: false
  386. })
  387. .should.eql('nexus4-only-eur299-93');
  388. getSlug('NEXUS4 only 円399.73', {
  389. maintainCase: false
  390. })
  391. .should.eql('nexus4-only-yen399-73');
  392. done();
  393. });
  394. it('should convert currency symbols to uppercase', function (done) {
  395. getSlug('NEXUS4 only €199!', {
  396. maintainCase: true
  397. })
  398. .should.eql('NEXUS4-only-EUR199');
  399. getSlug('NEXUS4 only €299.93', {
  400. maintainCase: true
  401. })
  402. .should.eql('NEXUS4-only-EUR299-93');
  403. getSlug('NEXUS4 only 円399.73', {
  404. maintainCase: true
  405. })
  406. .should.eql('NEXUS4-only-YEN399-73');
  407. done();
  408. });
  409. });