test-lang.js 12 KB

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