import {strict as assert} from 'assert'; import {urlsafeSlugProcessor, unicodeSafeProcessor} from '../../src/utils/slug'; import {SLUG_SEPARATOR as _} from '../../config'; describe('slug', () => { describe('urlsafeSlugProcessor', () => { describe('ascii', () => { it('space separated words', () => { assert.equal( urlsafeSlugProcessor('Text expressions'), `Text${_}expressions` ); }); it('numbered text', () => { assert.equal( urlsafeSlugProcessor('1. export creates'), `1${_}export${_}creates` ); }); it('punctuated text', () => { assert.equal( urlsafeSlugProcessor('svelte.VERSION'), `svelte${_}VERSION` ); }); it('text starting with the dollar sign', () => { assert.equal( urlsafeSlugProcessor('$destroy method'), `$destroy${_}method` ); }); it('numbered text containing the dollar sign', () => { assert.equal( urlsafeSlugProcessor('1. export $destroy'), `1${_}export${_}$destroy` ); }); it('text containing the equal char', () => { assert.equal( urlsafeSlugProcessor('script context=module'), `script${_}context${_}module` ); }); it('text containing the colon char', () => { assert.equal( urlsafeSlugProcessor('svelte:body'), `svelte${_}body` ); }); it('text containing the slash char', () => { assert.equal( urlsafeSlugProcessor('svelte/motion'), `svelte${_}motion` ); }); it('text containing the comma char', () => { assert.equal( urlsafeSlugProcessor('svelte, motion'), `svelte${_}motion` ); }); }); describe('unicode', () => { it('should translate symbols to English', () => { assert.equal( urlsafeSlugProcessor('Ich ♥ Deutsch'), `Ich${_}love${_}Deutsch` ); }); it('should remove emoji', () => { assert.equal( urlsafeSlugProcessor('Ich 😍 Deutsch'), `Ich${_}Deutsch` ); }); }); describe('cyricllic', () => { it('space separated words', () => { assert.equal( urlsafeSlugProcessor('Всплытие и перехват событий'), `Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('numbered text', () => { assert.equal( urlsafeSlugProcessor('1 Всплытие и перехват событий'), `1${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('punctuated text', () => { assert.equal( urlsafeSlugProcessor('.Всплытие.и.перехват событий'), `Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('text starting with the dollar sign', () => { assert.equal( urlsafeSlugProcessor('$Всплытие $ перехват событий'), `$Vsplytie${_}$${_}perehvat${_}sobytij` ); }); it('text containing the dollar sign', () => { assert.equal( urlsafeSlugProcessor('Всплытие$перехват'), `Vsplytie$perehvat` ); }); it('text containing the equal char', () => { assert.equal( urlsafeSlugProcessor('Всплытие = перехват=событий'), `Vsplytie${_}perehvat${_}sobytij` ); }); it('text containing the colon char', () => { assert.equal( urlsafeSlugProcessor('Всплытие : перехват:событий'), `Vsplytie${_}perehvat${_}sobytij` ); }); it('text containing the slash char', () => { assert.equal( urlsafeSlugProcessor('Всплытие / перехват/событий'), `Vsplytie${_}perehvat${_}sobytij` ); }); it('text containing the comma char', () => { assert.equal( urlsafeSlugProcessor('Всплытие, перехват'), `Vsplytie${_}perehvat` ); }); }); describe('ascii + cyricllic', () => { it('space separated words', () => { assert.equal( urlsafeSlugProcessor('Всплытие и export перехват событий'), `Vsplytie${_}i${_}export${_}perehvat${_}sobytij` ); }); it('ascii word concatenated to a cyricllic word', () => { assert.equal( urlsafeSlugProcessor('exportВсплытие'), 'exportVsplytie' ); }); it('cyricllic word concatenated to an ascii word', () => { assert.equal( urlsafeSlugProcessor('Всплытиеexport'), `Vsplytieexport` ); }); it('numbered text', () => { assert.equal( urlsafeSlugProcessor('1 export Всплытие и перехват событий'), `1${_}export${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('punctuated text', () => { assert.equal( urlsafeSlugProcessor('.Всплытие.export.и.перехват событий'), `Vsplytie${_}export${_}i${_}perehvat${_}sobytij` ); }); it('text starting with the dollar sign, followed by ascii char', () => { assert.equal( urlsafeSlugProcessor('$exportВсплытие перехват событий'), `$exportVsplytie${_}perehvat${_}sobytij` ); }); it('text starting with the dollar sign, followed by unicode char', () => { assert.equal( urlsafeSlugProcessor('$Всплытие export перехват событий'), `$Vsplytie${_}export${_}perehvat${_}sobytij` ); }); it('text containing the dollar sign, followed by ascii char', () => { assert.equal( urlsafeSlugProcessor('export $destroy a component prop Всплытие и перехват событий'), `export${_}$destroy${_}a${_}component${_}prop${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('text containing the dollar sign, followed by unicode char', () => { assert.equal( urlsafeSlugProcessor('Всплытие export $Всплытие a component prop Всплытие и перехват событий'), `Vsplytie${_}export${_}$Vsplytie${_}a${_}component${_}prop${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('text containing the equal char', () => { assert.equal( urlsafeSlugProcessor('script context=module Всплытие=и перехват событий'), `script${_}context${_}module${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('text containing the colon char', () => { assert.equal( urlsafeSlugProcessor('svelte:body Всплытие и:перехват событий'), `svelte${_}body${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('text containing the slash char', () => { assert.equal( urlsafeSlugProcessor('svelte/motion Всплытие и / перехват/событий'), `svelte${_}motion${_}Vsplytie${_}i${_}perehvat${_}sobytij` ); }); it('text containing the comma char', () => { assert.equal( urlsafeSlugProcessor('Всплытие, export'), `Vsplytie${_}export` ); }); }); }); describe('unicodeSafeProcessor (preserve unicode)', () => { describe('ascii', () => { it('space separated words', () => { assert.equal( unicodeSafeProcessor('Text expressions'), `Text${_}expressions` ); }); it('numbered text', () => { assert.equal( unicodeSafeProcessor('1. export creates'), `1${_}export${_}creates` ); }); it('punctuated text', () => { assert.equal( unicodeSafeProcessor('svelte.VERSION'), `svelte${_}VERSION` ); }); it('text starting with the dollar sign', () => { assert.equal( unicodeSafeProcessor('$destroy method'), `$destroy${_}method` ); }); it('numbered text containing the dollar sign', () => { assert.equal( unicodeSafeProcessor('1. export $destroy'), `1${_}export${_}$destroy` ); }); it('text containing the equal char', () => { assert.equal( unicodeSafeProcessor('script context=module'), `script${_}context${_}module` ); }); it('text containing the colon char', () => { assert.equal( unicodeSafeProcessor('svelte:body'), `svelte${_}body` ); }); it('text containing the slash char', () => { assert.equal( unicodeSafeProcessor('svelte/motion'), `svelte${_}motion` ); }); it('text containing the comma char', () => { assert.equal( unicodeSafeProcessor('svelte, motion'), `svelte${_}motion` ); }); }); describe('unicode', () => { it('should preserve symbols', () => { assert.equal( unicodeSafeProcessor('Ich ♥ Deutsch'), `Ich${_}love${_}Deutsch` ); }); it('should remove emoji', () => { assert.equal( unicodeSafeProcessor('Ich 😍 Deutsch'), `Ich${_}Deutsch` ); }); }); describe('cyricllic', () => { it('space separated words', () => { assert.equal( unicodeSafeProcessor('Всплытие и перехват событий'), `Всплытие${_}и${_}перехват${_}событий` ); }); it('numbered text', () => { assert.equal( unicodeSafeProcessor('1 Всплытие и перехват событий'), `1${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('punctuated text', () => { assert.equal( unicodeSafeProcessor('.Всплытие.и.перехват событий'), `Всплытие${_}и${_}перехват${_}событий` ); }); it('text starting with the dollar sign', () => { assert.equal( unicodeSafeProcessor('$Всплытие $ перехват событий'), `$${_}Всплытие${_}$${_}перехват${_}событий` ); }); it('text containing the dollar sign', () => { assert.equal( unicodeSafeProcessor('Всплытие$перехват'), `Всплытие${_}$${_}перехват` ); }); it('text containing the equal char', () => { assert.equal( unicodeSafeProcessor('Всплытие = перехват=событий'), `Всплытие${_}перехват${_}событий` ); }); it('text containing the colon char', () => { assert.equal( unicodeSafeProcessor('Всплытие : перехват:событий'), `Всплытие${_}перехват${_}событий` ); }); it('text containing the slash char', () => { assert.equal( unicodeSafeProcessor('Всплытие / перехват/событий'), `Всплытие${_}перехват${_}событий` ); }); it('text containing the comma char', () => { assert.equal( unicodeSafeProcessor('Всплытие, перехват'), `Всплытие${_}перехват` ); }); }); describe('ascii + cyricllic', () => { it('space separated words', () => { assert.equal( unicodeSafeProcessor('Всплытие и export перехват событий'), `Всплытие${_}и${_}export${_}перехват${_}событий` ); }); it('ascii word concatenated to a cyricllic word', () => { assert.equal( unicodeSafeProcessor('exportВсплытие'), `export${_}Всплытие` ); }); it('cyricllic word concatenated to an ascii word', () => { assert.equal( unicodeSafeProcessor('Всплытиеexport'), `Всплытие${_}export` ); }); it('numbered text', () => { assert.equal( unicodeSafeProcessor('1 export Всплытие и перехват событий'), `1${_}export${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('punctuated text', () => { assert.equal( unicodeSafeProcessor('.Всплытие.export.и.перехват событий'), `Всплытие${_}export${_}и${_}перехват${_}событий` ); }); it('text starting with the dollar sign, followed by ascii char', () => { assert.equal( unicodeSafeProcessor('$exportВсплытие перехват событий'), `$export${_}Всплытие${_}перехват${_}событий` ); }); it('text starting with the dollar sign, followed by unicode char', () => { assert.equal( unicodeSafeProcessor('$Всплытие export перехват событий'), `$${_}Всплытие${_}export${_}перехват${_}событий` ); }); it('text containing the dollar sign, followed by ascii char', () => { assert.equal( unicodeSafeProcessor('export $destroy a component prop Всплытие и перехват событий'), `export${_}$destroy${_}a${_}component${_}prop${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('text containing the dollar sign, followed by unicode char', () => { assert.equal( unicodeSafeProcessor('Всплытие export $Всплытие a component prop Всплытие и перехват событий'), `Всплытие${_}export${_}$${_}Всплытие${_}a${_}component${_}prop${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('text containing the equal char', () => { assert.equal( unicodeSafeProcessor('script context=module Всплытие=и перехват событий'), `script${_}context${_}module${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('text containing the colon char', () => { assert.equal( unicodeSafeProcessor('svelte:body Всплытие и:перехват событий'), `svelte${_}body${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('text containing the slash char', () => { assert.equal( unicodeSafeProcessor('svelte/motion Всплытие и / перехват/событий'), `svelte${_}motion${_}Всплытие${_}и${_}перехват${_}событий` ); }); it('text containing the comma char', () => { assert.equal( unicodeSafeProcessor('Всплытие, export'), `Всплытие${_}export` ); }); }); }); });