@@ -254,4 +254,185 @@ describe('MarkdownLink', () => {
254
254
expect ( edit . range ) . toEqual ( link . range ) ;
255
255
} ) ;
256
256
} ) ;
257
+
258
+ describe ( 'convert wikilink to link' , ( ) => {
259
+ it ( 'should generate default alias if no one' , ( ) => {
260
+ const wikilink = parser . parse ( getRandomURI ( ) , `[[wikilink]]` ) . links [ 0 ] ;
261
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
262
+ type : 'link' ,
263
+ } ) ;
264
+ expect ( wikilinkEdit . newText ) . toEqual ( `[wikilink](wikilink)` ) ;
265
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
266
+
267
+ const wikilinkWithSection = parser . parse (
268
+ getRandomURI ( ) ,
269
+ `[[wikilink#section]]`
270
+ ) . links [ 0 ] ;
271
+ const wikilinkWithSectionEdit = MarkdownLink . createUpdateLinkEdit (
272
+ wikilinkWithSection ,
273
+ {
274
+ type : 'link' ,
275
+ }
276
+ ) ;
277
+ expect ( wikilinkWithSectionEdit . newText ) . toEqual (
278
+ `[wikilink#section](wikilink#section)`
279
+ ) ;
280
+ expect ( wikilinkWithSectionEdit . range ) . toEqual ( wikilinkWithSection . range ) ;
281
+ } ) ;
282
+
283
+ it ( 'should use alias in the wikilik the if there has one' , ( ) => {
284
+ const wikilink = parser . parse (
285
+ getRandomURI ( ) ,
286
+ `[[wikilink#section|alias]]`
287
+ ) . links [ 0 ] ;
288
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
289
+ type : 'link' ,
290
+ } ) ;
291
+ expect ( wikilinkEdit . newText ) . toEqual ( `[alias](wikilink#section)` ) ;
292
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
293
+ } ) ;
294
+ } ) ;
295
+
296
+ describe ( 'convert link to wikilink' , ( ) => {
297
+ it ( 'should reorganize target, section, and alias in wikilink manner' , ( ) => {
298
+ const link = parser . parse ( getRandomURI ( ) , `[link](to/path.md)` ) . links [ 0 ] ;
299
+ const linkEdit = MarkdownLink . createUpdateLinkEdit ( link , {
300
+ type : 'wikilink' ,
301
+ } ) ;
302
+ expect ( linkEdit . newText ) . toEqual ( `[[to/path.md|link]]` ) ;
303
+ expect ( linkEdit . range ) . toEqual ( link . range ) ;
304
+
305
+ const linkWithSection = parser . parse (
306
+ getRandomURI ( ) ,
307
+ `[link](to/path.md#section)`
308
+ ) . links [ 0 ] ;
309
+ const linkWithSectionEdit = MarkdownLink . createUpdateLinkEdit (
310
+ linkWithSection ,
311
+ {
312
+ type : 'wikilink' ,
313
+ }
314
+ ) ;
315
+ expect ( linkWithSectionEdit . newText ) . toEqual (
316
+ `[[to/path.md#section|link]]`
317
+ ) ;
318
+ expect ( linkWithSectionEdit . range ) . toEqual ( linkWithSection . range ) ;
319
+ } ) ;
320
+
321
+ it ( 'should use alias in the wikilik the if there has one' , ( ) => {
322
+ const wikilink = parser . parse (
323
+ getRandomURI ( ) ,
324
+ `[[wikilink#section|alias]]`
325
+ ) . links [ 0 ] ;
326
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
327
+ type : 'link' ,
328
+ } ) ;
329
+ expect ( wikilinkEdit . newText ) . toEqual ( `[alias](wikilink#section)` ) ;
330
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
331
+ } ) ;
332
+ } ) ;
333
+
334
+ describe ( 'convert to its original type' , ( ) => {
335
+ it ( 'should remain unchanged' , ( ) => {
336
+ const link = parser . parse ( getRandomURI ( ) , `[link](to/path.md#section)` )
337
+ . links [ 0 ] ;
338
+ const linkEdit = MarkdownLink . createUpdateLinkEdit ( link , {
339
+ type : 'link' ,
340
+ } ) ;
341
+ expect ( linkEdit . newText ) . toEqual ( `[link](to/path.md#section)` ) ;
342
+ expect ( linkEdit . range ) . toEqual ( link . range ) ;
343
+
344
+ const wikilink = parser . parse (
345
+ getRandomURI ( ) ,
346
+ `[[wikilink#section|alias]]`
347
+ ) . links [ 0 ] ;
348
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
349
+ type : 'wikilink' ,
350
+ } ) ;
351
+ expect ( wikilinkEdit . newText ) . toEqual ( `[[wikilink#section|alias]]` ) ;
352
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
353
+ } ) ;
354
+ } ) ;
355
+
356
+ describe ( 'change isEmbed property' , ( ) => {
357
+ it ( 'should change isEmbed only' , ( ) => {
358
+ const wikilink = parser . parse ( getRandomURI ( ) , `[[wikilink]]` ) . links [ 0 ] ;
359
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
360
+ isEmbed : true ,
361
+ } ) ;
362
+ expect ( wikilinkEdit . newText ) . toEqual ( `![[wikilink]]` ) ;
363
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
364
+
365
+ const link = parser . parse ( getRandomURI ( ) , `` ) . links [ 0 ] ;
366
+ const linkEdit = MarkdownLink . createUpdateLinkEdit ( link , {
367
+ isEmbed : false ,
368
+ } ) ;
369
+ expect ( linkEdit . newText ) . toEqual ( `[link](to/path.md)` ) ;
370
+ expect ( linkEdit . range ) . toEqual ( link . range ) ;
371
+ } ) ;
372
+
373
+ it ( 'should be unchanged if the update value is the same as the original one' , ( ) => {
374
+ const embeddedWikilink = parser . parse ( getRandomURI ( ) , `![[wikilink]]` )
375
+ . links [ 0 ] ;
376
+ const embeddedWikilinkEdit = MarkdownLink . createUpdateLinkEdit (
377
+ embeddedWikilink ,
378
+ {
379
+ isEmbed : true ,
380
+ }
381
+ ) ;
382
+ expect ( embeddedWikilinkEdit . newText ) . toEqual ( `![[wikilink]]` ) ;
383
+ expect ( embeddedWikilinkEdit . range ) . toEqual ( embeddedWikilink . range ) ;
384
+
385
+ const link = parser . parse ( getRandomURI ( ) , `[link](to/path.md)` ) . links [ 0 ] ;
386
+ const linkEdit = MarkdownLink . createUpdateLinkEdit ( link , {
387
+ isEmbed : false ,
388
+ } ) ;
389
+ expect ( linkEdit . newText ) . toEqual ( `[link](to/path.md)` ) ;
390
+ expect ( linkEdit . range ) . toEqual ( link . range ) ;
391
+ } ) ;
392
+ } ) ;
393
+
394
+ describe ( 'insert angles' , ( ) => {
395
+ it ( 'should insert angles when meeting space in links' , ( ) => {
396
+ const link = parser . parse ( getRandomURI ( ) , `` ) . links [ 0 ] ;
397
+ const linkAddSection = MarkdownLink . createUpdateLinkEdit ( link , {
398
+ section : 'one section' ,
399
+ } ) ;
400
+ expect ( linkAddSection . newText ) . toEqual (
401
+ ``
402
+ ) ;
403
+ expect ( linkAddSection . range ) . toEqual ( link . range ) ;
404
+
405
+ const linkChangingTarget = parser . parse (
406
+ getRandomURI ( ) ,
407
+ `[link](to/path.md#one-section)`
408
+ ) . links [ 0 ] ;
409
+ const linkEdit = MarkdownLink . createUpdateLinkEdit ( linkChangingTarget , {
410
+ target : 'to/another path.md' ,
411
+ } ) ;
412
+ expect ( linkEdit . newText ) . toEqual (
413
+ `[link](<to/another path.md#one-section>)`
414
+ ) ;
415
+ expect ( linkEdit . range ) . toEqual ( linkChangingTarget . range ) ;
416
+
417
+ const wikilink = parser . parse ( getRandomURI ( ) , `[[wikilink#one section]]` )
418
+ . links [ 0 ] ;
419
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
420
+ type : 'link' ,
421
+ } ) ;
422
+ expect ( wikilinkEdit . newText ) . toEqual (
423
+ `[wikilink#one section](<wikilink#one section>)`
424
+ ) ;
425
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
426
+ } ) ;
427
+
428
+ it ( 'should not insert angles in wikilink' , ( ) => {
429
+ const wikilink = parser . parse ( getRandomURI ( ) , `[[wikilink#one section]]` )
430
+ . links [ 0 ] ;
431
+ const wikilinkEdit = MarkdownLink . createUpdateLinkEdit ( wikilink , {
432
+ target : 'another wikilink' ,
433
+ } ) ;
434
+ expect ( wikilinkEdit . newText ) . toEqual ( `[[another wikilink#one section]]` ) ;
435
+ expect ( wikilinkEdit . range ) . toEqual ( wikilink . range ) ;
436
+ } ) ;
437
+ } ) ;
257
438
} ) ;
0 commit comments