" Tests for the substitute (:s) command
source shared.vim
source check.vim
func Test_multiline_subst()
enew!
call append(0, ["1 aa",
\ "bb",
\ "cc",
\ "2 dd",
\ "ee",
\ "3 ef",
\ "gh",
\ "4 ij",
\ "5 a8",
\ "8b c9",
\ "9d",
\ "6 e7",
\ "77f",
\ "xxxxx"])
1
" test if replacing a line break works with a back reference
/^1/,/^2/s/\n\(.\)/ \1/
" test if inserting a line break works with a back reference
/^3/,/^4/s/\(.\)$/\r\1/
" test if replacing a line break with another line break works
/^5/,/^6/s/\(\_d\{3}\)/x\1x/
call assert_equal('1 aa bb cc 2 dd ee', getline(1))
call assert_equal('3 e', getline(2))
call assert_equal('f', getline(3))
call assert_equal('g', getline(4))
call assert_equal('h', getline(5))
call assert_equal('4 i', getline(6))
call assert_equal('j', getline(7))
call assert_equal('5 ax8', getline(8))
call assert_equal('8xb cx9', getline(9))
call assert_equal('9xd', getline(10))
call assert_equal('6 ex7', getline(11))
call assert_equal('7x7f', getline(12))
call assert_equal('xxxxx', getline(13))
enew!
endfunc
func Test_substitute_variants()
" Validate that all the 2-/3-letter variants which embed the flags into the
" command name actually work.
enew!
let ln = 'Testing string'
let variants = [
\ { 'cmd': ':s/Test/test/c', 'exp': 'testing string', 'prompt': 'y' },
\ { 'cmd': ':s/foo/bar/ce', 'exp': ln },
\ { 'cmd': ':s/t/r/cg', 'exp': 'Tesring srring', 'prompt': 'a' },
\ { 'cmd': ':s/t/r/ci', 'exp': 'resting string', 'prompt': 'y' },
\ { 'cmd': ':s/t/r/cI', 'exp': 'Tesring string', 'prompt': 'y' },
\ { 'cmd': ':s/t/r/c', 'exp': 'Testing string', 'prompt': 'n' },
\ { 'cmd': ':s/t/r/cn', 'exp': ln },
\ { 'cmd': ':s/t/r/cp', 'exp': 'Tesring string', 'prompt': 'y' },
\ { 'cmd': ':s/t/r/cl', 'exp': 'Tesring string', 'prompt': 'y' },
\ { 'cmd': ':s/t/r/gc', 'exp': 'Tesring srring', 'prompt': 'a' },
\ { 'cmd': ':s/i/I/gc', 'exp': 'TestIng string', 'prompt': 'l' },
\ { 'cmd': ':s/foo/bar/ge', 'exp': ln },
\ { 'cmd': ':s/t/r/g',