1313/* eslint-env mocha */
1414
1515import assert from 'assert' ;
16- import { multiline } from '../src/string.js' ;
16+ import {
17+ multiline , editDistance , sanitizeName , sanitizePath , splitByExtension ,
18+ } from '../src/string.js' ;
1719
1820describe ( 'String tests' , ( ) => {
1921 it ( 'multiline()' , ( ) => {
@@ -39,3 +41,139 @@ describe('String tests', () => {
3941 ` ) ;
4042 } ) ;
4143} ) ;
44+
45+ describe ( 'splitByExtension Tests' , ( ) => {
46+ it ( 'extension split works for empty string' , ( ) => {
47+ assert . deepStrictEqual ( [ '' , '' ] , splitByExtension ( '' ) ) ;
48+ } ) ;
49+
50+ it ( 'extension split works for string w/o extension' , ( ) => {
51+ assert . deepStrictEqual ( [ 'foo' , '' ] , splitByExtension ( 'foo' ) ) ;
52+ } ) ;
53+
54+ it ( 'extension split works for string with extension' , ( ) => {
55+ assert . deepStrictEqual ( [ 'foo' , 'txt' ] , splitByExtension ( 'foo.txt' ) ) ;
56+ } ) ;
57+
58+ it ( 'extension split works for string with dots and extension' , ( ) => {
59+ assert . deepStrictEqual ( [ 'foo.bar' , 'txt' ] , splitByExtension ( 'foo.bar.txt' ) ) ;
60+ } ) ;
61+
62+ it ( 'extension split works for string ending with a dot' , ( ) => {
63+ assert . deepStrictEqual ( [ 'foo.' , '' ] , splitByExtension ( 'foo.' ) ) ;
64+ } ) ;
65+
66+ it ( 'extension split works for string starting with a dot' , ( ) => {
67+ assert . deepStrictEqual ( [ '.foo' , '' ] , splitByExtension ( '.foo' ) ) ;
68+ } ) ;
69+ } ) ;
70+
71+ describe ( 'sanitize Tests' , ( ) => {
72+ it ( 'sanitize works for empty string' , ( ) => {
73+ assert . strictEqual ( sanitizeName ( '' ) , '' ) ;
74+ } ) ;
75+
76+ it ( 'sanitize transform string to lower case' , ( ) => {
77+ assert . strictEqual ( sanitizeName ( 'MyDocument' ) , 'mydocument' ) ;
78+ } ) ;
79+
80+ it ( 'sanitize transforms non-alpha to dashes' , ( ) => {
81+ assert . strictEqual ( sanitizeName ( 'My 2. Document' ) , 'my-2-document' ) ;
82+ } ) ;
83+
84+ it ( 'sanitize removes leading dashes' , ( ) => {
85+ assert . strictEqual ( sanitizeName ( '.My 2. Document' ) , 'my-2-document' ) ;
86+ } ) ;
87+
88+ it ( 'sanitize removes trailing dashes' , ( ) => {
89+ assert . strictEqual ( sanitizeName ( '.My 2. Document-' ) , 'my-2-document' ) ;
90+ } ) ;
91+
92+ it ( 'sanitize normalizes unicode' , ( ) => {
93+ assert . strictEqual ( sanitizeName ( 'Föhren Smürd' ) , 'fohren-smurd' ) ;
94+ } ) ;
95+ } ) ;
96+
97+ describe ( 'editDistance Tests' , ( ) => {
98+ it ( 'editDistances works for empty strings' , ( ) => {
99+ assert . strictEqual ( 0 , editDistance ( '' , '' ) ) ;
100+ } ) ;
101+
102+ it ( 'editDistances works for equal strings' , ( ) => {
103+ assert . strictEqual ( 0 , editDistance ( 'foo' , 'foo' ) ) ;
104+ } ) ;
105+
106+ it ( 'editDistances works for appended characters' , ( ) => {
107+ assert . strictEqual ( 3 , editDistance ( 'foo' , 'foo123' ) ) ;
108+ } ) ;
109+
110+ it ( 'editDistances works for removed characters from the end' , ( ) => {
111+ assert . strictEqual ( 3 , editDistance ( 'foo123' , 'foo' ) ) ;
112+ } ) ;
113+
114+ it ( 'editDistances works for replaced characters' , ( ) => {
115+ assert . strictEqual ( 3 , editDistance ( 'My Document' , 'my-document' ) ) ;
116+ } ) ;
117+
118+ it ( 'editDistances works for more complicate replacements' , ( ) => {
119+ assert . strictEqual ( 5 , editDistance ( 'My 1. Document' , 'my-1-document' ) ) ;
120+ } ) ;
121+
122+ it ( 'editDistances works for more complicate replacements (2)' , ( ) => {
123+ assert . strictEqual ( 10 , editDistance ( 'my-1-document' , 'My 1. Document.docx' ) ) ;
124+ } ) ;
125+
126+ it ( 'editDistances is reasonably fast for long names)' , ( ) => {
127+ const t0 = Date . now ( ) ;
128+ assert . strictEqual ( 66 , editDistance (
129+ 'my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document my-1-document ' ,
130+ 'My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document My 1. Document .docx' ,
131+ ) ) ;
132+ const t1 = Date . now ( ) ;
133+ assert . ok ( t1 - t0 < 100 ) ;
134+ } ) ;
135+ } ) ;
136+
137+ describe ( 'sanitizePath Tests' , ( ) => {
138+ it ( 'sanitizePath works for empty string' , ( ) => {
139+ assert . strictEqual ( sanitizePath ( '' ) , '' ) ;
140+ } ) ;
141+
142+ it ( 'sanitizePath transform string to lower case' , ( ) => {
143+ assert . strictEqual ( sanitizePath ( 'MyDocument' ) , 'mydocument' ) ;
144+ } ) ;
145+
146+ it ( 'sanitizePath can ignore extension' , ( ) => {
147+ assert . strictEqual ( sanitizePath ( '.MyDocument' , {
148+ ignoreExtension : true ,
149+ } ) , 'mydocument' ) ;
150+ } ) ;
151+
152+ it ( 'sanitizePath works with dots in path and no extension' , ( ) => {
153+ assert . strictEqual ( sanitizePath ( '/foo.bar/My Document' ) , '/foo.bar/my-document' ) ;
154+ } ) ;
155+
156+ it ( 'sanitizePath only transforms last path segment' , ( ) => {
157+ assert . strictEqual ( sanitizePath ( '/Untitled Folder/MyDocument' ) , '/Untitled Folder/mydocument' ) ;
158+ } ) ;
159+
160+ it ( 'sanitizePath only transforms root segment' , ( ) => {
161+ assert . strictEqual ( sanitizePath ( '/MyDocument' ) , '/mydocument' ) ;
162+ } ) ;
163+
164+ it ( 'sanitizePath transforms non-alpha to dashes' , ( ) => {
165+ assert . strictEqual ( sanitizePath ( 'My 2. Document.docx' ) , 'my-2-document.docx' ) ;
166+ } ) ;
167+
168+ it ( 'sanitizePath removes leading dashes' , ( ) => {
169+ assert . strictEqual ( sanitizePath ( '.My 2. Document.docx' ) , 'my-2-document.docx' ) ;
170+ } ) ;
171+
172+ it ( 'sanitizePath removes trailing dashes' , ( ) => {
173+ assert . strictEqual ( sanitizePath ( '.My 2. Document!.docx' ) , 'my-2-document.docx' ) ;
174+ } ) ;
175+
176+ it ( 'sanitizePath normalizes unicode' , ( ) => {
177+ assert . strictEqual ( sanitizePath ( 'Föhren Smürd' ) , 'fohren-smurd' ) ;
178+ } ) ;
179+ } ) ;
0 commit comments