@@ -127,7 +127,7 @@ export def RemoveSurrounding(
127127 endif
128128enddef
129129
130- def SurroundSmart (open_delimiter: string ,
130+ export def SurroundSmart (open_delimiter: string ,
131131 close_delimiter: string ,
132132 open_delimiters_dict: dict <string> ,
133133 close_delimiters_dict: dict <string> ,
@@ -551,11 +551,187 @@ export def DeleteTextBetweenMarks(A: string, B: string): string
551551 return ' '
552552enddef
553553
554+ def g: Test_Surround_one_line ()
555+ vnew
556+ Generate_markdown_testfile ()
557+ exe $ " edit {src_name}"
558+
559+ # Simple test, add code delimiters to ' architecto beatae vitae'
560+ var expected_value = [
561+ ' accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae' ,
562+ ' ab illo inventore veritatis et quasi `architecto beatae vitae` dicta' ,
563+ ' sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit'
564+ ]
565+ cursor (3 , 38 )
566+ exe " norm! veee\<esc> "
567+ markdown.Surround (' `' , ' `' , text_style_dict, text_style_dict)
568+ var actual_value = getline (2 , 4 )
569+ assert_equal (expected_value, actual_value)
570+
571+ # Bold: simple text- object around ' (molestias excepturi sint)'
572+ expected_value = [
573+ ' Quis autem vel eum iure reprehenderit qui in ea **voluptate velit esse**' ,
574+ ' quam nihil **(molestiae consequatur)**, vel illum qui dolorem eum fugiat quo' ,
575+ ' voluptas nulla pariatur?' ,
576+ ]
577+ cursor (15 , 13 )
578+ markdown.Surround (' **' , ' **' , text_style_dict, text_style_dict, ' a(' )
579+ actual_value = getline (14 , 16 )
580+ assert_equal (expected_value, actual_value)
581+
582+ :% bw !
583+ Cleanup_markdown_testfile ()
584+ enddef
585+
586+ def g: Test_Surround_one_line_smart_delimiters ()
587+ # vnew
588+ Generate_markdown_testfile ()
589+ exe $ " edit {src_name}"
590+ # setlocal conceallevel= 0
591+
592+ # Smart delimiters
593+ var expected_value = [
594+ ' incidunt ut (labore et ~~dolore magnam) aliquam quaerat~~ voluptatem. Ut' ,
595+ ' enim ad `minima` *[veniam, quis nostrum]* ~~exercitationem~~ ullam corporis' ,
596+ ' suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?'
597+ ]
598+ cursor (11 , 29 )
599+ exe " norm! va[\<esc> "
600+ markdown.Surround (' *' , ' *' , text_style_dict, text_style_dict)
601+ var actual_value = getline (10 , 12 )
602+ assert_equal (expected_value, actual_value)
603+
604+ # Test with junk between A and B. Overwrite everything and avoid consecutive
605+ # delimiters of same type , like ** **
606+ cursor (21 , 41 )
607+ exe " norm! va(\<esc> "
608+ expected_value = [
609+ ' dolores et quas molestias excepturi sint, obcaecati cupiditate non' ,
610+ ' pro**vident, (similique sunt in culpa, qui officia deserunt)**' ,
611+ ' mollitia) animi, id est laborum et dolorum fuga.'
612+ ]
613+ markdown.Surround (' **' , ' **' , text_style_dict, text_style_dict)
614+ actual_value = getline (20 , 22 )
615+ assert_equal (expected_value, actual_value)
616+
617+ # Test with junk between A and B. Overwrite everything and avoid consecutive
618+ # delimiters of same type , like ** **
619+ cursor (19 , 20 )
620+ exe " norm! va(\<esc> "
621+ expected_value = [
622+ ' At vero eos et accusamus et iusto odio dignissimos ducimus, qui' ,
623+ ' blandit*iis pra(esentium voluptatum deleniti atque) corrupti*, quos' ,
624+ ' dolores et quas molestias excepturi sint, obcaecati cupiditate non' ,
625+ ]
626+ markdown.Surround (' *' , ' *' , text_style_dict, text_style_dict)
627+ actual_value = getline (18 , 20 )
628+ assert_equal (expected_value, actual_value)
629+
630+ :% bw !
631+ Cleanup_markdown_testfile ()
632+ enddef
633+
634+ def g: Test_RemoveSurrounding_one_line ()
635+
636+ Generate_markdown_testfile ()
637+ # vnew
638+ exe $ " edit {src_name}"
639+
640+ cursor (10 , 30 )
641+ var expected_value =
642+ ' incidunt ut (labore et dolore magnam) aliquam quaerat voluptatem. Ut'
643+ utils.RemoveSurrounding (strikethrough_dict, strikethrough_dict)
644+ var actual_value = getline (10 )
645+ assert_equal (expected_value, actual_value)
646+
647+ cursor (11 , 40 )
648+ expected_value =
649+ ' enim ad `minima [veniam`, quis nostrum] exercitationem ullam corporis'
650+ utils.RemoveSurrounding (strikethrough_dict, strikethrough_dict)
651+ actual_value = getline (11 )
652+ assert_equal (expected_value, actual_value)
653+
654+ cursor (14 , 60 )
655+ expected_value =
656+ ' Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse'
657+ utils.RemoveSurrounding (bold_dict, bold_dict)
658+ actual_value = getline (14 )
659+ assert_equal (expected_value, actual_value)
660+
661+ cursor (19 , 18 )
662+ utils.RemoveSurrounding (italic_dict, italic_dict)
663+ cursor (19 , 30 )
664+ utils.RemoveSurrounding (code_dict, code_dict)
665+ cursor (19 , 47 )
666+ utils.RemoveSurrounding (italic_dict, italic_dict)
667+ expected_value =
668+ ' blanditiis pra(esentium voluptatum deleniti atque) corrupti, quos'
669+ actual_value = getline (19 )
670+ assert_equal (expected_value, actual_value)
671+
672+ :% bw !
673+ Cleanup_markdown_testfile ()
674+ enddef
675+
676+ def g: Test_Surround_multi_line_smart_delimiters ()
677+ # vnew
678+ Generate_markdown_testfile ()
679+ exe $ " edit {src_name}"
680+ setlocal conceallevel= 0
681+
682+ # Smart delimiters
683+ var expected_value = [
684+ ' Nam libero tempore, *cum soluta nobis est eligendi optio, cumque nihil' ,
685+ ' impedit, quo minus id, quod' ,
686+ ' maxime placeat facere possimu*, omnis voluptas assumenda est, omnis' ,
687+ ]
688+ cursor (25 , 21 )
689+ exe " norm! v27ggt,\<esc> "
690+ markdown.Surround (' *' , ' *' , text_style_dict, text_style_dict)
691+ var actual_value = getline (25 , 27 )
692+ echom assert_equal (expected_value, actual_value)
693+
694+ # Smart delimiters
695+ expected_value = [
696+ ' ~~At vero eos et accusamus et iusto odio dignissimos ducimus, qui' ,
697+ ' blanditiis pra(esentium voluptatum deleniti atque) corrupti, quos~~' ,
698+ ]
699+ cursor (18 , 1 )
700+ exe " norm! 0vj$\<esc> "
701+ markdown.Surround (' ~~' , ' ~~' , text_style_dict, text_style_dict)
702+ actual_value = getline (18 , 19 )
703+ echom assert_equal (expected_value, actual_value)
704+
705+ :% bw !
706+ Cleanup_markdown_testfile ()
707+ enddef
554708
555- # TODO
556- export var Surround = SurroundSmart
557- if exists (' g:markdown_extras_config' )
558- && has_key (g: markdown_extras_config , ' smart_textstyle' )
559- && g: markdown_extras_config [' smart_textstyle' ]
560- Surround = SurroundSimple
561- endif
709+ def g: Test_RemoveSurrounding_multi_line ()
710+ # vnew
711+ Generate_markdown_testfile ()
712+ exe $ " edit {src_name}"
713+
714+ # Test 1
715+ var expected_value = [
716+ ' dolor repellend[a]us. Temporibus autem quibusdam et aut officiis' ,
717+ ' debitis aut rerum necessitatibus saepe eveniet, ut et voluptates' ,
718+ ' repudiandae sint et molestiae non recusandae.' ,
719+ ]
720+ cursor (28 , 25 )
721+ utils.RemoveSurrounding (code_dict, code_dict)
722+ var actual_value = getline (28 , 30 )
723+ echom assert_equal (expected_value, actual_value)
724+
725+ # Test 2 : preserve inner surrounding
726+ expected_value = [
727+ ' Itaque earum rerum hic tenetur a sapiente `delectus`, ut aut reiciendis' ,
728+ ' voluptatibus maiores' ,
729+ ]
730+ cursor (32 , 28 )
731+ utils.RemoveSurrounding (italic_dict, italic_dict)
732+ actual_value = getline (32 , 33 )
733+ echom assert_equal (expected_value, actual_value)
734+
735+ :% bw !
736+ Cleanup_markdown_testfile ()
737+ enddef
0 commit comments