1aaad995fSBram Moolenaar" Tests for using Ctrl-A/Ctrl-X
244132a10SBram Moolenaar
344132a10SBram Moolenaarfunc SetUp()
444132a10SBram Moolenaar  new dummy
544132a10SBram Moolenaar  set nrformats&vim
644132a10SBram Moolenaarendfunc
744132a10SBram Moolenaar
844132a10SBram Moolenaarfunc TearDown()
944132a10SBram Moolenaar  bwipe!
1044132a10SBram Moolenaarendfunc
1144132a10SBram Moolenaar
1244132a10SBram Moolenaar" 1) Ctrl-A on visually selected number
1344132a10SBram Moolenaar" Text:
1444132a10SBram Moolenaar" foobar-10
1544132a10SBram Moolenaar"     Expected:
1644132a10SBram Moolenaar"     1)    Ctrl-A on start of line:
1744132a10SBram Moolenaar"     foobar-9
1844132a10SBram Moolenaar"     2)    Ctrl-A on visually selected "-10":
1944132a10SBram Moolenaar"     foobar-9
2044132a10SBram Moolenaar"     3)    Ctrl-A on visually selected "10":
2144132a10SBram Moolenaar"     foobar-11
2244132a10SBram Moolenaar"     4)    Ctrl-X on visually selected "-10"
2344132a10SBram Moolenaar"     foobar-11
2444132a10SBram Moolenaar"     5)    Ctrl-X on visually selected "10"
2544132a10SBram Moolenaar"     foobar-9
2644132a10SBram Moolenaarfunc Test_visual_increment_01()
2744132a10SBram Moolenaar  call setline(1, repeat(["foobaar-10"], 5))
2844132a10SBram Moolenaar
2944132a10SBram Moolenaar  call cursor(1, 1)
3044132a10SBram Moolenaar  exec "norm! \<C-A>"
3144132a10SBram Moolenaar  call assert_equal("foobaar-9", getline('.'))
3244132a10SBram Moolenaar  call assert_equal([0, 1, 9, 0], getpos('.'))
3344132a10SBram Moolenaar
3444132a10SBram Moolenaar  call cursor(2, 1)
3544132a10SBram Moolenaar  exec "norm! f-v$\<C-A>"
3644132a10SBram Moolenaar  call assert_equal("foobaar-9", getline('.'))
3744132a10SBram Moolenaar  call assert_equal([0, 2, 8, 0], getpos('.'))
3844132a10SBram Moolenaar
3944132a10SBram Moolenaar  call cursor(3, 1)
4044132a10SBram Moolenaar  exec "norm! f1v$\<C-A>"
4144132a10SBram Moolenaar  call assert_equal("foobaar-11", getline('.'))
4244132a10SBram Moolenaar  call assert_equal([0, 3, 9, 0], getpos('.'))
4344132a10SBram Moolenaar
4444132a10SBram Moolenaar  call cursor(4, 1)
4544132a10SBram Moolenaar  exec "norm! f-v$\<C-X>"
4644132a10SBram Moolenaar  call assert_equal("foobaar-11", getline('.'))
4744132a10SBram Moolenaar  call assert_equal([0, 4, 8, 0], getpos('.'))
4844132a10SBram Moolenaar
4944132a10SBram Moolenaar  call cursor(5, 1)
5044132a10SBram Moolenaar  exec "norm! f1v$\<C-X>"
5144132a10SBram Moolenaar  call assert_equal("foobaar-9", getline('.'))
5244132a10SBram Moolenaar  call assert_equal([0, 5, 9, 0], getpos('.'))
5344132a10SBram Moolenaarendfunc
5444132a10SBram Moolenaar
5544132a10SBram Moolenaar" 2) Ctrl-A on visually selected lines
5644132a10SBram Moolenaar" Text:
5744132a10SBram Moolenaar" 10
5844132a10SBram Moolenaar" 20
5944132a10SBram Moolenaar" 30
6044132a10SBram Moolenaar" 40
6144132a10SBram Moolenaar"
6244132a10SBram Moolenaar"     Expected:
6344132a10SBram Moolenaar"     1) Ctrl-A on visually selected lines:
6444132a10SBram Moolenaar" 11
6544132a10SBram Moolenaar" 21
6644132a10SBram Moolenaar" 31
6744132a10SBram Moolenaar" 41
6844132a10SBram Moolenaar"
6944132a10SBram Moolenaar"     2) Ctrl-X on visually selected lines:
7044132a10SBram Moolenaar" 9
7144132a10SBram Moolenaar" 19
7244132a10SBram Moolenaar" 29
7344132a10SBram Moolenaar" 39
7444132a10SBram Moolenaarfunc Test_visual_increment_02()
7544132a10SBram Moolenaar  call setline(1, ["10", "20", "30", "40"])
7644132a10SBram Moolenaar  exec "norm! GV3k$\<C-A>"
7744132a10SBram Moolenaar  call assert_equal(["11", "21", "31", "41"], getline(1, '$'))
7844132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
7944132a10SBram Moolenaar
8044132a10SBram Moolenaar  call setline(1, ["10", "20", "30", "40"])
8144132a10SBram Moolenaar  exec "norm! GV3k$\<C-X>"
8244132a10SBram Moolenaar  call assert_equal(["9", "19", "29", "39"], getline(1, '$'))
8344132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
8444132a10SBram Moolenaarendfunc
8544132a10SBram Moolenaar
8644132a10SBram Moolenaar" 3) g Ctrl-A on visually selected lines, with non-numbers in between
8744132a10SBram Moolenaar" Text:
8844132a10SBram Moolenaar" 10
8944132a10SBram Moolenaar"
9044132a10SBram Moolenaar" 20
9144132a10SBram Moolenaar"
9244132a10SBram Moolenaar" 30
9344132a10SBram Moolenaar"
9444132a10SBram Moolenaar" 40
9544132a10SBram Moolenaar"
9644132a10SBram Moolenaar"     Expected:
9744132a10SBram Moolenaar"     1) 2 g Ctrl-A on visually selected lines:
9844132a10SBram Moolenaar" 12
9944132a10SBram Moolenaar"
10044132a10SBram Moolenaar" 24
10144132a10SBram Moolenaar"
10244132a10SBram Moolenaar" 36
10344132a10SBram Moolenaar"
10444132a10SBram Moolenaar" 48
10544132a10SBram Moolenaar"     2) 2 g Ctrl-X on visually selected lines
10644132a10SBram Moolenaar" 8
10744132a10SBram Moolenaar"
10844132a10SBram Moolenaar" 16
10944132a10SBram Moolenaar"
11044132a10SBram Moolenaar" 24
11144132a10SBram Moolenaar"
11244132a10SBram Moolenaar" 32
11344132a10SBram Moolenaarfunc Test_visual_increment_03()
11444132a10SBram Moolenaar  call setline(1, ["10", "", "20", "", "30", "", "40"])
11544132a10SBram Moolenaar  exec "norm! GV6k2g\<C-A>"
11644132a10SBram Moolenaar  call assert_equal(["12", "", "24", "", "36", "", "48"], getline(1, '$'))
11744132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
11844132a10SBram Moolenaar
11944132a10SBram Moolenaar  call setline(1, ["10", "", "20", "", "30", "", "40"])
12044132a10SBram Moolenaar  exec "norm! GV6k2g\<C-X>"
12144132a10SBram Moolenaar  call assert_equal(["8", "", "16", "", "24", "", "32"], getline(1, '$'))
12244132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
12344132a10SBram Moolenaarendfunc
12444132a10SBram Moolenaar
12544132a10SBram Moolenaar" 4) Ctrl-A on non-number
12644132a10SBram Moolenaar" Text:
12744132a10SBram Moolenaar" foobar-10
12844132a10SBram Moolenaar"     Expected:
12944132a10SBram Moolenaar"     1) visually select foobar:
13044132a10SBram Moolenaar"     foobar-10
13144132a10SBram Moolenaarfunc Test_visual_increment_04()
13244132a10SBram Moolenaar  call setline(1, ["foobar-10"])
13344132a10SBram Moolenaar  exec "norm! vf-\<C-A>"
13444132a10SBram Moolenaar  call assert_equal(["foobar-10"], getline(1, '$'))
13544132a10SBram Moolenaar  " NOTE: I think this is correct behavior...
136d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
13744132a10SBram Moolenaarendfunc
13844132a10SBram Moolenaar
13944132a10SBram Moolenaar" 5) g<Ctrl-A> on letter
14044132a10SBram Moolenaar" Test:
14144132a10SBram Moolenaar" a
14244132a10SBram Moolenaar" a
14344132a10SBram Moolenaar" a
14444132a10SBram Moolenaar" a
14544132a10SBram Moolenaar"     Expected:
14644132a10SBram Moolenaar"     1) g Ctrl-A on visually selected lines
14744132a10SBram Moolenaar"     b
14844132a10SBram Moolenaar"     c
14944132a10SBram Moolenaar"     d
15044132a10SBram Moolenaar"     e
15144132a10SBram Moolenaarfunc Test_visual_increment_05()
15244132a10SBram Moolenaar  set nrformats+=alpha
15344132a10SBram Moolenaar  call setline(1, repeat(["a"], 4))
15444132a10SBram Moolenaar  exec "norm! GV3kg\<C-A>"
15544132a10SBram Moolenaar  call assert_equal(["b", "c", "d", "e"], getline(1, '$'))
15644132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
15744132a10SBram Moolenaarendfunc
15844132a10SBram Moolenaar
15944132a10SBram Moolenaar" 6) g<Ctrl-A> on letter
16044132a10SBram Moolenaar" Test:
16144132a10SBram Moolenaar" z
16244132a10SBram Moolenaar" z
16344132a10SBram Moolenaar" z
16444132a10SBram Moolenaar" z
16544132a10SBram Moolenaar"     Expected:
16644132a10SBram Moolenaar"     1) g Ctrl-X on visually selected lines
16744132a10SBram Moolenaar"     y
16844132a10SBram Moolenaar"     x
16944132a10SBram Moolenaar"     w
17044132a10SBram Moolenaar"     v
17144132a10SBram Moolenaarfunc Test_visual_increment_06()
17244132a10SBram Moolenaar  set nrformats+=alpha
17344132a10SBram Moolenaar  call setline(1, repeat(["z"], 4))
17444132a10SBram Moolenaar  exec "norm! GV3kg\<C-X>"
17544132a10SBram Moolenaar  call assert_equal(["y", "x", "w", "v"], getline(1, '$'))
17644132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
17744132a10SBram Moolenaarendfunc
17844132a10SBram Moolenaar
17944132a10SBram Moolenaar" 7) <Ctrl-A> on letter
18044132a10SBram Moolenaar" Test:
18144132a10SBram Moolenaar" 2
18244132a10SBram Moolenaar" 1
18344132a10SBram Moolenaar" 0
18444132a10SBram Moolenaar" -1
18544132a10SBram Moolenaar" -2
18644132a10SBram Moolenaar"
18744132a10SBram Moolenaar"     Expected:
18844132a10SBram Moolenaar"     1) Ctrl-A on visually selected lines
18944132a10SBram Moolenaar"     3
19044132a10SBram Moolenaar"     2
19144132a10SBram Moolenaar"     1
19244132a10SBram Moolenaar"     0
19344132a10SBram Moolenaar"     -1
19444132a10SBram Moolenaar"
19544132a10SBram Moolenaar"     2) Ctrl-X on visually selected lines
19644132a10SBram Moolenaar"     1
19744132a10SBram Moolenaar"     0
19844132a10SBram Moolenaar"     -1
19944132a10SBram Moolenaar"     -2
20044132a10SBram Moolenaar"     -3
20144132a10SBram Moolenaarfunc Test_visual_increment_07()
20244132a10SBram Moolenaar  call setline(1, ["2", "1", "0", "-1", "-2"])
20344132a10SBram Moolenaar  exec "norm! GV4k\<C-A>"
20444132a10SBram Moolenaar  call assert_equal(["3", "2", "1", "0", "-1"], getline(1, '$'))
20544132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
20644132a10SBram Moolenaar
20744132a10SBram Moolenaar  call setline(1, ["2", "1", "0", "-1", "-2"])
20844132a10SBram Moolenaar  exec "norm! GV4k\<C-X>"
20944132a10SBram Moolenaar  call assert_equal(["1", "0", "-1", "-2", "-3"], getline(1, '$'))
21044132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
21144132a10SBram Moolenaarendfunc
21244132a10SBram Moolenaar
21344132a10SBram Moolenaar" 8) Block increment on 0x9
21444132a10SBram Moolenaar" Text:
21544132a10SBram Moolenaar" 0x9
21644132a10SBram Moolenaar" 0x9
21744132a10SBram Moolenaar"     Expected:
21844132a10SBram Moolenaar"     1) Ctrl-A on visually block selected region (cursor at beginning):
21944132a10SBram Moolenaar"     0xa
22044132a10SBram Moolenaar"     0xa
22144132a10SBram Moolenaar"     2) Ctrl-A on visually block selected region (cursor at end)
22244132a10SBram Moolenaar"     0xa
22344132a10SBram Moolenaar"     0xa
22444132a10SBram Moolenaarfunc Test_visual_increment_08()
22544132a10SBram Moolenaar  call setline(1, repeat(["0x9"], 2))
22644132a10SBram Moolenaar  exec "norm! \<C-V>j$\<C-A>"
22744132a10SBram Moolenaar  call assert_equal(["0xa", "0xa"], getline(1, '$'))
22844132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
22944132a10SBram Moolenaar
23044132a10SBram Moolenaar  call setline(1, repeat(["0x9"], 2))
23144132a10SBram Moolenaar  exec "norm! gg$\<C-V>+\<C-A>"
23244132a10SBram Moolenaar  call assert_equal(["0xa", "0xa"], getline(1, '$'))
23344132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
23444132a10SBram Moolenaarendfunc
23544132a10SBram Moolenaar
23644132a10SBram Moolenaar" 9) Increment and redo
23744132a10SBram Moolenaar" Text:
23844132a10SBram Moolenaar" 2
23944132a10SBram Moolenaar" 2
24044132a10SBram Moolenaar"
24144132a10SBram Moolenaar" 3
24244132a10SBram Moolenaar" 3
24344132a10SBram Moolenaar"
24444132a10SBram Moolenaar"     Expected:
24544132a10SBram Moolenaar"     1) 2 Ctrl-A on first 2 visually selected lines
24644132a10SBram Moolenaar"     4
24744132a10SBram Moolenaar"     4
24844132a10SBram Moolenaar"     2) redo (.) on 3
24944132a10SBram Moolenaar"     5
25044132a10SBram Moolenaar"     5
25144132a10SBram Moolenaarfunc Test_visual_increment_09()
25244132a10SBram Moolenaar  call setline(1, ["2", "2", "", "3", "3", ""])
25344132a10SBram Moolenaar  exec "norm! ggVj2\<C-A>"
25444132a10SBram Moolenaar  call assert_equal(["4", "4", "", "3", "3", ""], getline(1, '$'))
25544132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
25644132a10SBram Moolenaar
25744132a10SBram Moolenaar  exec "norm! 3j."
25844132a10SBram Moolenaar  call assert_equal(["4", "4", "", "5", "5", ""], getline(1, '$'))
25944132a10SBram Moolenaar  call assert_equal([0, 4, 1, 0], getpos('.'))
26044132a10SBram Moolenaarendfunc
26144132a10SBram Moolenaar
26244132a10SBram Moolenaar" 10) sequentially decrement 1
26344132a10SBram Moolenaar" Text:
26444132a10SBram Moolenaar" 1
26544132a10SBram Moolenaar" 1
26644132a10SBram Moolenaar" 1
26744132a10SBram Moolenaar" 1
26844132a10SBram Moolenaar"     Expected:
26944132a10SBram Moolenaar"     1) g Ctrl-X on visually selected lines
27044132a10SBram Moolenaar"     0
27144132a10SBram Moolenaar"     -1
27244132a10SBram Moolenaar"     -2
27344132a10SBram Moolenaar"     -3
27444132a10SBram Moolenaarfunc Test_visual_increment_10()
27544132a10SBram Moolenaar  call setline(1, repeat(["1"], 4))
27644132a10SBram Moolenaar  exec "norm! GV3kg\<C-X>"
27744132a10SBram Moolenaar  call assert_equal(["0", "-1", "-2", "-3"], getline(1, '$'))
27844132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
27944132a10SBram Moolenaarendfunc
28044132a10SBram Moolenaar
28144132a10SBram Moolenaar" 11) visually block selected indented lines
28244132a10SBram Moolenaar" Text:
28344132a10SBram Moolenaar"     1
28444132a10SBram Moolenaar" 1
28544132a10SBram Moolenaar"     1
28644132a10SBram Moolenaar"     1
2878e7d6223SBram Moolenaar"     Expected:
28844132a10SBram Moolenaar"     1) g Ctrl-A on block selected indented lines
28944132a10SBram Moolenaar"     2
29044132a10SBram Moolenaar" 1
29144132a10SBram Moolenaar"     3
29244132a10SBram Moolenaar"     4
29344132a10SBram Moolenaarfunc Test_visual_increment_11()
29444132a10SBram Moolenaar  call setline(1, ["    1", "1", "    1", "    1"])
29544132a10SBram Moolenaar  exec "norm! f1\<C-V>3jg\<C-A>"
29644132a10SBram Moolenaar  call assert_equal(["    2", "1", "    3", "    4"], getline(1, '$'))
29744132a10SBram Moolenaar  call assert_equal([0, 1, 5, 0], getpos('.'))
29844132a10SBram Moolenaarendfunc
29944132a10SBram Moolenaar
30044132a10SBram Moolenaar" 12) visually selected several columns
30144132a10SBram Moolenaar" Text:
30244132a10SBram Moolenaar" 0 0
30344132a10SBram Moolenaar" 0 0
30444132a10SBram Moolenaar" 0 0
30544132a10SBram Moolenaar"     Expected:
30644132a10SBram Moolenaar"     1) 'v' select last zero and first zeroes
30744132a10SBram Moolenaar"     0 1
30844132a10SBram Moolenaar"     1 0
30944132a10SBram Moolenaar"     1 0
31044132a10SBram Moolenaarfunc Test_visual_increment_12()
31144132a10SBram Moolenaar  call setline(1, repeat(["0 0"], 3))
31244132a10SBram Moolenaar  exec "norm! $v++\<C-A>"
31344132a10SBram Moolenaar  call assert_equal(["0 1", "1 0", "1 0"], getline(1, '$'))
31444132a10SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
31544132a10SBram Moolenaarendfunc
31644132a10SBram Moolenaar
31744132a10SBram Moolenaar" 13) visually selected part of columns
31844132a10SBram Moolenaar" Text:
31944132a10SBram Moolenaar" max: 100px
32044132a10SBram Moolenaar" max: 200px
32144132a10SBram Moolenaar" max: 300px
32244132a10SBram Moolenaar" max: 400px
32344132a10SBram Moolenaar"     Expected:
32444132a10SBram Moolenaar"     1) 'v' on first two numbers Ctrl-A
32544132a10SBram Moolenaar"     max: 110px
32644132a10SBram Moolenaar"     max: 220px
32744132a10SBram Moolenaar"     max: 330px
32844132a10SBram Moolenaar"     max: 400px
32944132a10SBram Moolenaar"     2) 'v' on first two numbers Ctrl-X
33044132a10SBram Moolenaar"     max: 90px
33144132a10SBram Moolenaar"     max: 190px
33244132a10SBram Moolenaar"     max: 290px
33344132a10SBram Moolenaar"     max: 400px
33444132a10SBram Moolenaarfunc Test_visual_increment_13()
33544132a10SBram Moolenaar  call setline(1, ["max: 100px", "max: 200px", "max: 300px", "max: 400px"])
33644132a10SBram Moolenaar  exec "norm! f1\<C-V>l2j\<C-A>"
33744132a10SBram Moolenaar  call assert_equal(["max: 110px", "max: 210px", "max: 310px", "max: 400px"], getline(1, '$'))
33844132a10SBram Moolenaar  call assert_equal([0, 1, 6, 0], getpos('.'))
33944132a10SBram Moolenaar
34044132a10SBram Moolenaar  call setline(1, ["max: 100px", "max: 200px", "max: 300px", "max: 400px"])
34144132a10SBram Moolenaar  exec "norm! ggf1\<C-V>l2j\<C-X>"
34244132a10SBram Moolenaar  call assert_equal(["max: 90px", "max: 190px", "max: 290px", "max: 400px"], getline(1, '$'))
34344132a10SBram Moolenaar  call assert_equal([0, 1, 6, 0], getpos('.'))
34444132a10SBram Moolenaarendfunc
34544132a10SBram Moolenaar
34644132a10SBram Moolenaar" 14) redo in block mode
34744132a10SBram Moolenaar" Text:
34844132a10SBram Moolenaar" 1 1
34944132a10SBram Moolenaar" 1 1
35044132a10SBram Moolenaar"     Expected:
35144132a10SBram Moolenaar"     1) Ctrl-a on first column, redo on second column
35244132a10SBram Moolenaar"     2 2
35344132a10SBram Moolenaar"     2 2
35444132a10SBram Moolenaarfunc Test_visual_increment_14()
35544132a10SBram Moolenaar  call setline(1, repeat(["1 1"], 2))
35644132a10SBram Moolenaar  exec "norm! G\<C-V>k\<C-A>w."
35744132a10SBram Moolenaar  call assert_equal(["2 2", "2 2"], getline(1, '$'))
35844132a10SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
35944132a10SBram Moolenaarendfunc
36044132a10SBram Moolenaar
36144132a10SBram Moolenaar" 15) block select single numbers
36244132a10SBram Moolenaar" Text:
36344132a10SBram Moolenaar" 101
36444132a10SBram Moolenaar"     Expected:
36544132a10SBram Moolenaar"     1) Ctrl-a on visually selected zero
36644132a10SBram Moolenaar"     111
3675fe6bdf8SBram Moolenaar"
3685fe6bdf8SBram Moolenaar" Also: 019 with "01" selected increments to "029".
36944132a10SBram Moolenaarfunc Test_visual_increment_15()
37044132a10SBram Moolenaar  call setline(1, ["101"])
37144132a10SBram Moolenaar  exec "norm! lv\<C-A>"
37244132a10SBram Moolenaar  call assert_equal(["111"], getline(1, '$'))
37344132a10SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
3745fe6bdf8SBram Moolenaar
3755fe6bdf8SBram Moolenaar  call setline(1, ["019"])
3765fe6bdf8SBram Moolenaar  exec "norm! 0vl\<C-A>"
3775fe6bdf8SBram Moolenaar  call assert_equal("029", getline(1))
3785fe6bdf8SBram Moolenaar
3795fe6bdf8SBram Moolenaar  call setline(1, ["01239"])
3805fe6bdf8SBram Moolenaar  exec "norm! 0vlll\<C-A>"
3815fe6bdf8SBram Moolenaar  call assert_equal("01249", getline(1))
3825fe6bdf8SBram Moolenaar
3835fe6bdf8SBram Moolenaar  call setline(1, ["01299"])
3845fe6bdf8SBram Moolenaar  exec "norm! 0vlll\<C-A>"
3855fe6bdf8SBram Moolenaar  call assert_equal("1309", getline(1))
38644132a10SBram Moolenaarendfunc
38744132a10SBram Moolenaar
38844132a10SBram Moolenaar" 16) increment right aligned numbers
38944132a10SBram Moolenaar" Text:
39044132a10SBram Moolenaar"    1
39144132a10SBram Moolenaar"   19
39244132a10SBram Moolenaar"  119
39344132a10SBram Moolenaar"     Expected:
39444132a10SBram Moolenaar"     1) Ctrl-a on line selected region
39544132a10SBram Moolenaar"        2
39644132a10SBram Moolenaar"       20
39744132a10SBram Moolenaar"      120
39844132a10SBram Moolenaarfunc Test_visual_increment_16()
39944132a10SBram Moolenaar  call setline(1, ["   1", "  19", " 119"])
40044132a10SBram Moolenaar  exec "norm! VG\<C-A>"
40144132a10SBram Moolenaar  call assert_equal(["   2", "  20", " 120"], getline(1, '$'))
40244132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
40344132a10SBram Moolenaarendfunc
40444132a10SBram Moolenaar
40544132a10SBram Moolenaar" 17) block-wise increment and redo
40644132a10SBram Moolenaar" Text:
40744132a10SBram Moolenaar"   100
40844132a10SBram Moolenaar"   1
40944132a10SBram Moolenaar"
41044132a10SBram Moolenaar"   100
41144132a10SBram Moolenaar"   1
41244132a10SBram Moolenaar"
41344132a10SBram Moolenaar"   Expected:
41444132a10SBram Moolenaar"   1) Ctrl-V j $ on first block, afterwards '.' on second
41544132a10SBram Moolenaar"   101
41644132a10SBram Moolenaar"   2
41744132a10SBram Moolenaar"
41844132a10SBram Moolenaar"   101
41944132a10SBram Moolenaar"   2
42044132a10SBram Moolenaarfunc Test_visual_increment_17()
42144132a10SBram Moolenaar  call setline(1, [" 100", " 1", "", " 100", " 1"])
42244132a10SBram Moolenaar  exec "norm! \<C-V>j$\<C-A>2j."
42344132a10SBram Moolenaar  call assert_equal([" 101", " 2", "", " 101", " 1"], getline(1, '$'))
42444132a10SBram Moolenaar  call assert_equal([0, 3, 1, 0], getpos('.'))
42544132a10SBram Moolenaarendfunc
42644132a10SBram Moolenaar
42744132a10SBram Moolenaar" 18) repeat of g<Ctrl-a>
42844132a10SBram Moolenaar" Text:
42944132a10SBram Moolenaar"   0
43044132a10SBram Moolenaar"   0
43144132a10SBram Moolenaar"   0
43244132a10SBram Moolenaar"   0
43344132a10SBram Moolenaar"
43444132a10SBram Moolenaar"   Expected:
43544132a10SBram Moolenaar"   1) V 4j g<ctrl-a>, repeat twice afterwards with .
43644132a10SBram Moolenaar"   3
43744132a10SBram Moolenaar"   6
43844132a10SBram Moolenaar"   9
43944132a10SBram Moolenaar"   12
44044132a10SBram Moolenaarfunc Test_visual_increment_18()
44144132a10SBram Moolenaar  call setline(1, repeat(["0"], 4))
44244132a10SBram Moolenaar  exec "norm! GV3kg\<C-A>"
44344132a10SBram Moolenaar  exec "norm! .."
44444132a10SBram Moolenaar  call assert_equal(["3", "6", "9", "12"], getline(1, '$'))
44544132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
44644132a10SBram Moolenaarendfunc
44744132a10SBram Moolenaar
44844132a10SBram Moolenaar" 19) increment on number with nrformat including alpha
44944132a10SBram Moolenaar" Text:
45044132a10SBram Moolenaar"  1
45144132a10SBram Moolenaar"  1a
45244132a10SBram Moolenaar"
45344132a10SBram Moolenaar"  Expected:
45444132a10SBram Moolenaar"  1) <Ctrl-V>j$ <ctrl-a>
45544132a10SBram Moolenaar"  2
45644132a10SBram Moolenaar"  2a
45744132a10SBram Moolenaarfunc Test_visual_increment_19()
45844132a10SBram Moolenaar  set nrformats+=alpha
45944132a10SBram Moolenaar  call setline(1, ["1", "1a"])
46044132a10SBram Moolenaar  exec "norm! \<C-V>G$\<C-A>"
46144132a10SBram Moolenaar  call assert_equal(["2", "2a"], getline(1, '$'))
46244132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
46344132a10SBram Moolenaarendfunc
46444132a10SBram Moolenaar
46544132a10SBram Moolenaar" 20) increment a single letter
46644132a10SBram Moolenaar" Text:
46744132a10SBram Moolenaar"  a
46844132a10SBram Moolenaar"
46944132a10SBram Moolenaar"  Expected:
47044132a10SBram Moolenaar"  1) <Ctrl-a> and cursor is on a
47144132a10SBram Moolenaar"  b
47244132a10SBram Moolenaarfunc Test_visual_increment_20()
47344132a10SBram Moolenaar  set nrformats+=alpha
47444132a10SBram Moolenaar  call setline(1, ["a"])
47544132a10SBram Moolenaar  exec "norm! \<C-A>"
47644132a10SBram Moolenaar  call assert_equal(["b"], getline(1, '$'))
47744132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
478004a6781SBram Moolenaar  " decrement a and A and increment z and Z
479004a6781SBram Moolenaar  call setline(1, ['a', 'A', 'z', 'Z'])
480004a6781SBram Moolenaar  exe "normal 1G\<C-X>2G\<C-X>3G\<C-A>4G\<C-A>"
481004a6781SBram Moolenaar  call assert_equal(['a', 'A', 'z', 'Z'], getline(1, '$'))
48244132a10SBram Moolenaarendfunc
48344132a10SBram Moolenaar
48444132a10SBram Moolenaar" 21) block-wise increment on part of hexadecimal
48544132a10SBram Moolenaar" Text:
48644132a10SBram Moolenaar" 0x123456
48744132a10SBram Moolenaar"
48844132a10SBram Moolenaar"   Expected:
48944132a10SBram Moolenaar"   1) Ctrl-V f3 <ctrl-a>
49044132a10SBram Moolenaar" 0x124456
49144132a10SBram Moolenaarfunc Test_visual_increment_21()
49244132a10SBram Moolenaar  call setline(1, ["0x123456"])
49344132a10SBram Moolenaar  exec "norm! \<C-V>f3\<C-A>"
49444132a10SBram Moolenaar  call assert_equal(["0x124456"], getline(1, '$'))
49544132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
49644132a10SBram Moolenaarendfunc
49744132a10SBram Moolenaar
49844132a10SBram Moolenaar" 22) Block increment on 0b0
49944132a10SBram Moolenaar" Text:
50044132a10SBram Moolenaar" 0b1
50144132a10SBram Moolenaar" 0b1
50244132a10SBram Moolenaar"     Expected:
50344132a10SBram Moolenaar"     1) Ctrl-A on visually block selected region (cursor at beginning):
50444132a10SBram Moolenaar"     0b10
50544132a10SBram Moolenaar"     0b10
50644132a10SBram Moolenaar"     2) Ctrl-A on visually block selected region (cursor at end)
50744132a10SBram Moolenaar"     0b10
50844132a10SBram Moolenaar"     0b10
50944132a10SBram Moolenaarfunc Test_visual_increment_22()
51044132a10SBram Moolenaar  call setline(1, repeat(["0b1"], 2))
51144132a10SBram Moolenaar  exec "norm! \<C-V>j$\<C-A>"
51244132a10SBram Moolenaar  call assert_equal(repeat(["0b10"], 2), getline(1, '$'))
51344132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
51444132a10SBram Moolenaar
51544132a10SBram Moolenaar  call setline(1, repeat(["0b1"], 2))
51644132a10SBram Moolenaar  exec "norm! $\<C-V>+\<C-A>"
51744132a10SBram Moolenaar  call assert_equal(repeat(["0b10"], 2), getline(1, '$'))
51844132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
51944132a10SBram Moolenaarendfunc
52044132a10SBram Moolenaar
52144132a10SBram Moolenaar" 23) block-wise increment on part of binary
52244132a10SBram Moolenaar" Text:
52344132a10SBram Moolenaar" 0b1001
52444132a10SBram Moolenaar"
52544132a10SBram Moolenaar"   Expected:
52644132a10SBram Moolenaar"   1) Ctrl-V 5l <ctrl-a>
52744132a10SBram Moolenaar" 0b1011
52844132a10SBram Moolenaarfunc Test_visual_increment_23()
52944132a10SBram Moolenaar  call setline(1, ["0b1001"])
53044132a10SBram Moolenaar  exec "norm! \<C-V>4l\<C-A>"
53144132a10SBram Moolenaar  call assert_equal(["0b1011"], getline(1, '$'))
53244132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
53344132a10SBram Moolenaarendfunc
53444132a10SBram Moolenaar
53544132a10SBram Moolenaar" 24) increment hexadecimal
53644132a10SBram Moolenaar" Text:
53744132a10SBram Moolenaar" 0x0b1001
53844132a10SBram Moolenaar"
53944132a10SBram Moolenaar"   Expected:
54044132a10SBram Moolenaar"   1) <ctrl-a>
54144132a10SBram Moolenaar" 0x0b1002
54244132a10SBram Moolenaarfunc Test_visual_increment_24()
54344132a10SBram Moolenaar  call setline(1, ["0x0b1001"])
54444132a10SBram Moolenaar  exec "norm! \<C-V>$\<C-A>"
54544132a10SBram Moolenaar  call assert_equal(["0x0b1002"], getline(1, '$'))
54644132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
54744132a10SBram Moolenaarendfunc
54844132a10SBram Moolenaar
54944132a10SBram Moolenaar" 25) increment binary with nrformats including alpha
55044132a10SBram Moolenaar" Text:
55144132a10SBram Moolenaar" 0b1001a
55244132a10SBram Moolenaar"
55344132a10SBram Moolenaar"   Expected:
55444132a10SBram Moolenaar"   1) <ctrl-a>
55544132a10SBram Moolenaar" 0b1010a
55644132a10SBram Moolenaarfunc Test_visual_increment_25()
55744132a10SBram Moolenaar  set nrformats+=alpha
55844132a10SBram Moolenaar  call setline(1, ["0b1001a"])
55944132a10SBram Moolenaar  exec "norm! \<C-V>$\<C-A>"
56044132a10SBram Moolenaar  call assert_equal(["0b1010a"], getline(1, '$'))
56144132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
56244132a10SBram Moolenaarendfunc
56344132a10SBram Moolenaar
56444132a10SBram Moolenaar" 26) increment binary with 32 bits
56544132a10SBram Moolenaar" Text:
56644132a10SBram Moolenaar" 0b11111111111111111111111111111110
56744132a10SBram Moolenaar"
56844132a10SBram Moolenaar"   Expected:
56944132a10SBram Moolenaar"   1) <ctrl-a>
57044132a10SBram Moolenaar" 0b11111111111111111111111111111111
57144132a10SBram Moolenaarfunc Test_visual_increment_26()
572004a6781SBram Moolenaar  set nrformats+=bin
57344132a10SBram Moolenaar  call setline(1, ["0b11111111111111111111111111111110"])
57444132a10SBram Moolenaar  exec "norm! \<C-V>$\<C-A>"
57544132a10SBram Moolenaar  call assert_equal(["0b11111111111111111111111111111111"], getline(1, '$'))
57644132a10SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
577004a6781SBram Moolenaar  exec "norm! \<C-V>$\<C-X>"
578004a6781SBram Moolenaar  call assert_equal(["0b11111111111111111111111111111110"], getline(1, '$'))
579004a6781SBram Moolenaar  set nrformats-=bin
58044132a10SBram Moolenaarendfunc
58144132a10SBram Moolenaar
5826a3c8affSBram Moolenaar" 27) increment with 'rightreft', if supported
5836a3c8affSBram Moolenaarfunc Test_visual_increment_27()
5846a3c8affSBram Moolenaar  if exists('+rightleft')
5856a3c8affSBram Moolenaar    set rightleft
5866a3c8affSBram Moolenaar    call setline(1, ["1234 56"])
5876a3c8affSBram Moolenaar
5886a3c8affSBram Moolenaar    exec "norm! $\<C-A>"
5896a3c8affSBram Moolenaar    call assert_equal(["1234 57"], getline(1, '$'))
5906a3c8affSBram Moolenaar    call assert_equal([0, 1, 7, 0], getpos('.'))
5916a3c8affSBram Moolenaar
5926a3c8affSBram Moolenaar    exec "norm! \<C-A>"
5936a3c8affSBram Moolenaar    call assert_equal(["1234 58"], getline(1, '$'))
5946a3c8affSBram Moolenaar    call assert_equal([0, 1, 7, 0], getpos('.'))
5956a3c8affSBram Moolenaar    set norightleft
5966a3c8affSBram Moolenaar  endif
5976a3c8affSBram Moolenaarendfunc
5986a3c8affSBram Moolenaar
599d79e5501SBram Moolenaar" Tab code and linewise-visual inc/dec
600d79e5501SBram Moolenaarfunc Test_visual_increment_28()
601d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
602d79e5501SBram Moolenaar  exec "norm! Vj\<C-A>"
603d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>11", "\<TAB>0"], getline(1, '$'))
604d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
605d79e5501SBram Moolenaar
606d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
607d79e5501SBram Moolenaar  exec "norm! ggVj\<C-X>"
608d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>9", "\<TAB>-2"], getline(1, '$'))
609d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
610d79e5501SBram Moolenaarendfunc
611d79e5501SBram Moolenaar
612d79e5501SBram Moolenaar" Tab code and linewise-visual inc/dec with 'nrformats'+=alpha
613d79e5501SBram Moolenaarfunc Test_visual_increment_29()
614d79e5501SBram Moolenaar  set nrformats+=alpha
615d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
616d79e5501SBram Moolenaar  exec "norm! Vj\<C-A>"
617d79e5501SBram Moolenaar  call assert_equal(["y\<TAB>10", "\<TAB>0"], getline(1, '$'))
618d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
619d79e5501SBram Moolenaar
620d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
621d79e5501SBram Moolenaar  exec "norm! ggVj\<C-X>"
622d79e5501SBram Moolenaar  call assert_equal(["w\<TAB>10", "\<TAB>-2"], getline(1, '$'))
623d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
624d79e5501SBram Moolenaarendfunc
625d79e5501SBram Moolenaar
626d79e5501SBram Moolenaar" Tab code and character-visual inc/dec
627d79e5501SBram Moolenaarfunc Test_visual_increment_30()
628d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
629d79e5501SBram Moolenaar  exec "norm! f1vjf1\<C-A>"
630d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>11", "\<TAB>0"], getline(1, '$'))
631d79e5501SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
632d79e5501SBram Moolenaar
633d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
634d79e5501SBram Moolenaar  exec "norm! ggf1vjf1\<C-X>"
635d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>9", "\<TAB>-2"], getline(1, '$'))
636d79e5501SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
637d79e5501SBram Moolenaarendfunc
638d79e5501SBram Moolenaar
639d79e5501SBram Moolenaar" Tab code and blockwise-visual inc/dec
640d79e5501SBram Moolenaarfunc Test_visual_increment_31()
641d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
642d79e5501SBram Moolenaar  exec "norm! f1\<C-V>jl\<C-A>"
643d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>11", "\<TAB>0"], getline(1, '$'))
644d79e5501SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
645d79e5501SBram Moolenaar
646d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>10", "\<TAB>-1"])
647d79e5501SBram Moolenaar  exec "norm! ggf1\<C-V>jl\<C-X>"
648d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>9", "\<TAB>-2"], getline(1, '$'))
649d79e5501SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
650d79e5501SBram Moolenaarendfunc
651d79e5501SBram Moolenaar
652d79e5501SBram Moolenaar" Tab code and blockwise-visual decrement with 'linebreak' and 'showbreak'
653d79e5501SBram Moolenaarfunc Test_visual_increment_32()
654d79e5501SBram Moolenaar  28vnew dummy_31
655d79e5501SBram Moolenaar  set linebreak showbreak=+
656d79e5501SBram Moolenaar  call setline(1, ["x\<TAB>\<TAB>\<TAB>10", "\<TAB>\<TAB>\<TAB>\<TAB>-1"])
657d79e5501SBram Moolenaar  exec "norm! ggf0\<C-V>jg_\<C-X>"
658d79e5501SBram Moolenaar  call assert_equal(["x\<TAB>\<TAB>\<TAB>1-1", "\<TAB>\<TAB>\<TAB>\<TAB>-2"], getline(1, '$'))
659d79e5501SBram Moolenaar  call assert_equal([0, 1, 6, 0], getpos('.'))
660d79e5501SBram Moolenaar  bwipe!
661d79e5501SBram Moolenaarendfunc
662d79e5501SBram Moolenaar
663d79e5501SBram Moolenaar" Tab code and blockwise-visual increment with $
664d79e5501SBram Moolenaarfunc Test_visual_increment_33()
665d79e5501SBram Moolenaar  call setline(1, ["\<TAB>123", "456"])
666d79e5501SBram Moolenaar  exec "norm! gg0\<C-V>j$\<C-A>"
667d79e5501SBram Moolenaar  call assert_equal(["\<TAB>124", "457"], getline(1, '$'))
668d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
669d79e5501SBram Moolenaarendfunc
670d79e5501SBram Moolenaar
671d79e5501SBram Moolenaar" Tab code and blockwise-visual increment and redo
672d79e5501SBram Moolenaarfunc Test_visual_increment_34()
673d79e5501SBram Moolenaar  call setline(1, ["\<TAB>123", "     456789"])
674d79e5501SBram Moolenaar  exec "norm! gg0\<C-V>j\<C-A>"
675d79e5501SBram Moolenaar  call assert_equal(["\<TAB>123", "     457789"], getline(1, '$'))
676d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
677d79e5501SBram Moolenaar
678d79e5501SBram Moolenaar  exec "norm! .."
679d79e5501SBram Moolenaar  call assert_equal(["\<TAB>123", "     459789"], getline(1, '$'))
680d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
681d79e5501SBram Moolenaarendfunc
682d79e5501SBram Moolenaar
683d79e5501SBram Moolenaar" Tab code, spaces and character-visual increment and redo
684d79e5501SBram Moolenaarfunc Test_visual_increment_35()
685d79e5501SBram Moolenaar  call setline(1, ["\<TAB>123", "        123", "\<TAB>123", "\<TAB>123"])
686d79e5501SBram Moolenaar  exec "norm! ggvjf3\<C-A>..."
687d79e5501SBram Moolenaar  call assert_equal(["\<TAB>127", "        127", "\<TAB>123", "\<TAB>123"], getline(1, '$'))
688d79e5501SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
689d79e5501SBram Moolenaarendfunc
690d79e5501SBram Moolenaar
691d79e5501SBram Moolenaar" Tab code, spaces and blockwise-visual increment and redo
692d79e5501SBram Moolenaarfunc Test_visual_increment_36()
693d79e5501SBram Moolenaar  call setline(1, ["           123", "\<TAB>456789"])
694d79e5501SBram Moolenaar  exec "norm! G0\<C-V>kl\<C-A>"
695d79e5501SBram Moolenaar  call assert_equal(["           123", "\<TAB>556789"], getline(1, '$'))
696d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
697d79e5501SBram Moolenaar
698d79e5501SBram Moolenaar  exec "norm! ..."
699d79e5501SBram Moolenaar  call assert_equal(["           123", "\<TAB>856789"], getline(1, '$'))
700d79e5501SBram Moolenaar  call assert_equal([0, 1, 1, 0], getpos('.'))
701d79e5501SBram Moolenaarendfunc
702d79e5501SBram Moolenaar
703d79e5501SBram Moolenaar" block-wise increment and dot-repeat
704e1edc1caSBram Moolenaar" Text:
705e1edc1caSBram Moolenaar"   1 23
706e1edc1caSBram Moolenaar"   4 56
707e1edc1caSBram Moolenaar"
708e1edc1caSBram Moolenaar" Expected:
709e1edc1caSBram Moolenaar"   1) f2 Ctrl-V jl <ctrl-a>, repeat twice afterwards with .
710e1edc1caSBram Moolenaar"   1 26
711e1edc1caSBram Moolenaar"   4 59
712e1edc1caSBram Moolenaar"
713e1edc1caSBram Moolenaar" Try with and without indent.
714d79e5501SBram Moolenaarfunc Test_visual_increment_37()
715e1edc1caSBram Moolenaar  call setline(1, ["  1 23", "  4 56"])
716e1edc1caSBram Moolenaar  exec "norm! ggf2\<C-V>jl\<C-A>.."
717e1edc1caSBram Moolenaar  call assert_equal(["  1 26", "  4 59"], getline(1, 2))
718e1edc1caSBram Moolenaar
719e1edc1caSBram Moolenaar  call setline(1, ["1 23", "4 56"])
720e1edc1caSBram Moolenaar  exec "norm! ggf2\<C-V>jl\<C-A>.."
721e1edc1caSBram Moolenaar  call assert_equal(["1 26", "4 59"], getline(1, 2))
722e1edc1caSBram Moolenaarendfunc
723e1edc1caSBram Moolenaar
724ef2b5036SBram Moolenaar" Check redo after the normal mode increment
725ef2b5036SBram Moolenaarfunc Test_visual_increment_38()
726ef2b5036SBram Moolenaar  exec "norm! i10\<ESC>5\<C-A>."
727ef2b5036SBram Moolenaar  call assert_equal(["20"], getline(1, '$'))
728ef2b5036SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
729ef2b5036SBram Moolenaarendfunc
730ef2b5036SBram Moolenaar
7313fc3e142SBram Moolenaar" Test what patch 7.3.414 fixed. Ctrl-A on "000" drops the leading zeros.
7323fc3e142SBram Moolenaarfunc Test_normal_increment_01()
7333fc3e142SBram Moolenaar  call setline(1, "000")
7343fc3e142SBram Moolenaar  exec "norm! gg0\<C-A>"
7353fc3e142SBram Moolenaar  call assert_equal("001", getline(1))
7363fc3e142SBram Moolenaar
7373fc3e142SBram Moolenaar  call setline(1, "000")
7383fc3e142SBram Moolenaar  exec "norm! gg$\<C-A>"
7393fc3e142SBram Moolenaar  call assert_equal("001", getline(1))
7403fc3e142SBram Moolenaar
7413fc3e142SBram Moolenaar  call setline(1, "001")
7423fc3e142SBram Moolenaar  exec "norm! gg0\<C-A>"
7433fc3e142SBram Moolenaar  call assert_equal("002", getline(1))
7443fc3e142SBram Moolenaar
7453fc3e142SBram Moolenaar  call setline(1, "001")
7463fc3e142SBram Moolenaar  exec "norm! gg$\<C-A>"
7473fc3e142SBram Moolenaar  call assert_equal("002", getline(1))
7483fc3e142SBram Moolenaarendfunc
7493fc3e142SBram Moolenaar
7508e08125dSBram Moolenaar" Test a regression of patch 7.4.1087 fixed.
7518e08125dSBram Moolenaarfunc Test_normal_increment_02()
7528e08125dSBram Moolenaar  call setline(1, ["hello 10", "world"])
7538e08125dSBram Moolenaar  exec "norm! ggl\<C-A>jx"
7548e08125dSBram Moolenaar  call assert_equal(["hello 11", "worl"], getline(1, '$'))
7558e08125dSBram Moolenaar  call assert_equal([0, 2, 4, 0], getpos('.'))
7568e08125dSBram Moolenaarendfunc
7578e08125dSBram Moolenaar
75852df117dSBram Moolenaar" The test35 unified to this file.
75952df117dSBram Moolenaarfunc Test_normal_increment_03()
76052df117dSBram Moolenaar  call setline(1, ["100     0x100     077     0",
76152df117dSBram Moolenaar        \          "100     0x100     077     ",
76252df117dSBram Moolenaar        \          "100     0x100     077     0xfF     0xFf",
76352df117dSBram Moolenaar        \          "100     0x100     077     "])
76452df117dSBram Moolenaar  set nrformats=octal,hex
76552df117dSBram Moolenaar  exec "norm! gg\<C-A>102\<C-X>\<C-A>l\<C-X>l\<C-A>64\<C-A>128\<C-X>$\<C-X>"
76652df117dSBram Moolenaar  set nrformats=octal
76752df117dSBram Moolenaar  exec "norm! j0\<C-A>102\<C-X>\<C-A>l\<C-X>2\<C-A>w65\<C-A>129\<C-X>blx6lD"
76852df117dSBram Moolenaar  set nrformats=hex
76952df117dSBram Moolenaar  exec "norm! j0101\<C-X>l257\<C-X>\<C-A>Txldt \<C-A> \<C-X> \<C-X>"
77052df117dSBram Moolenaar  set nrformats=
77152df117dSBram Moolenaar  exec "norm! j0200\<C-X>l100\<C-X>w78\<C-X>\<C-A>k"
77252df117dSBram Moolenaar  call assert_equal(["0     0x0ff     0000     -1",
77352df117dSBram Moolenaar        \            "0     1x100     0777777",
77452df117dSBram Moolenaar        \            "-1     0x0     078     0xFE     0xfe",
77552df117dSBram Moolenaar        \            "-100     -100x100     000     "], getline(1, '$'))
77652df117dSBram Moolenaar  call assert_equal([0, 3, 25, 0], getpos('.'))
77752df117dSBram Moolenaarendfunc
77852df117dSBram Moolenaar
7795fe6bdf8SBram Moolenaarfunc Test_increment_empty_line()
7805fe6bdf8SBram Moolenaar  call setline(1, ['0', '0', '0', '0', '0', '0', ''])
7815fe6bdf8SBram Moolenaar  exe "normal Gvgg\<C-A>"
7825fe6bdf8SBram Moolenaar  call assert_equal(['1', '1', '1', '1', '1', '1', ''], getline(1, 7))
7831671f448SBram Moolenaar
7841671f448SBram Moolenaar  " Ctrl-A/Ctrl-X should do nothing in operator pending mode
7851671f448SBram Moolenaar  %d
7861671f448SBram Moolenaar  call setline(1, 'one two')
7871671f448SBram Moolenaar  exe "normal! c\<C-A>l"
7881671f448SBram Moolenaar  exe "normal! c\<C-X>l"
7891671f448SBram Moolenaar  call assert_equal('one two', getline(1))
790004a6781SBram Moolenaarendfunc
7911671f448SBram Moolenaar
792004a6781SBram Moolenaar" Try incrementing/decrementing a non-digit/alpha character
793004a6781SBram Moolenaarfunc Test_increment_special_char()
794004a6781SBram Moolenaar  call setline(1, '!')
795004a6781SBram Moolenaar  call assert_beeps("normal \<C-A>")
796004a6781SBram Moolenaar  call assert_beeps("normal \<C-X>")
7975fe6bdf8SBram Moolenaarendfunc
7988e08125dSBram Moolenaar
799aaad995fSBram Moolenaar" Try incrementing/decrementing a number when nrformats contains unsigned
800aaad995fSBram Moolenaarfunc Test_increment_unsigned()
801aaad995fSBram Moolenaar  set nrformats+=unsigned
802aaad995fSBram Moolenaar
803aaad995fSBram Moolenaar  call setline(1, '0')
804aaad995fSBram Moolenaar  exec "norm! gg0\<C-X>"
805aaad995fSBram Moolenaar  call assert_equal('0', getline(1))
806aaad995fSBram Moolenaar
807aaad995fSBram Moolenaar  call setline(1, '3')
808aaad995fSBram Moolenaar  exec "norm! gg010\<C-X>"
809aaad995fSBram Moolenaar  call assert_equal('0', getline(1))
810aaad995fSBram Moolenaar
811aaad995fSBram Moolenaar  call setline(1, '-0')
812aaad995fSBram Moolenaar  exec "norm! gg0\<C-X>"
813aaad995fSBram Moolenaar  call assert_equal("-0", getline(1))
814aaad995fSBram Moolenaar
815aaad995fSBram Moolenaar  call setline(1, '-11')
816aaad995fSBram Moolenaar  exec "norm! gg08\<C-X>"
817aaad995fSBram Moolenaar  call assert_equal('-3', getline(1))
818aaad995fSBram Moolenaar
819aaad995fSBram Moolenaar  " NOTE: 18446744073709551615 == 2^64 - 1
820aaad995fSBram Moolenaar  call setline(1, '18446744073709551615')
821aaad995fSBram Moolenaar  exec "norm! gg0\<C-A>"
822aaad995fSBram Moolenaar  call assert_equal('18446744073709551615', getline(1))
823aaad995fSBram Moolenaar
824aaad995fSBram Moolenaar  call setline(1, '-18446744073709551615')
825aaad995fSBram Moolenaar  exec "norm! gg0\<C-A>"
826aaad995fSBram Moolenaar  call assert_equal('-18446744073709551615', getline(1))
827aaad995fSBram Moolenaar
828aaad995fSBram Moolenaar  call setline(1, '-18446744073709551614')
829aaad995fSBram Moolenaar  exec "norm! gg08\<C-A>"
830aaad995fSBram Moolenaar  call assert_equal('-18446744073709551615', getline(1))
831aaad995fSBram Moolenaar
832aaad995fSBram Moolenaar  call setline(1, '-1')
833aaad995fSBram Moolenaar  exec "norm! gg0\<C-A>"
834aaad995fSBram Moolenaar  call assert_equal('-2', getline(1))
835aaad995fSBram Moolenaar
836aaad995fSBram Moolenaar  call setline(1, '-3')
837aaad995fSBram Moolenaar  exec "norm! gg08\<C-A>"
838aaad995fSBram Moolenaar  call assert_equal('-11', getline(1))
839aaad995fSBram Moolenaar
840aaad995fSBram Moolenaar  set nrformats-=unsigned
841aaad995fSBram Moolenaarendfunc
842aaad995fSBram Moolenaar
8436c6be9e8SBram Moolenaarfunc Test_normal_increment_with_virtualedit()
8446c6be9e8SBram Moolenaar  set virtualedit=all
8456c6be9e8SBram Moolenaar
8466c6be9e8SBram Moolenaar  call setline(1, ["\<TAB>1"])
8476c6be9e8SBram Moolenaar  exec "norm! 0\<C-A>"
8486c6be9e8SBram Moolenaar  call assert_equal("\<TAB>2", getline(1))
8496c6be9e8SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
8506c6be9e8SBram Moolenaar
8516c6be9e8SBram Moolenaar  call setline(1, ["\<TAB>1"])
8526c6be9e8SBram Moolenaar  exec "norm! 0l\<C-A>"
8536c6be9e8SBram Moolenaar  call assert_equal("\<TAB>2", getline(1))
8546c6be9e8SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
8556c6be9e8SBram Moolenaar
8566c6be9e8SBram Moolenaar  call setline(1, ["\<TAB>1"])
8576c6be9e8SBram Moolenaar  exec "norm! 07l\<C-A>"
8586c6be9e8SBram Moolenaar  call assert_equal("\<TAB>2", getline(1))
8596c6be9e8SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
8606c6be9e8SBram Moolenaar
8616c6be9e8SBram Moolenaar  call setline(1, ["\<TAB>1"])
8626c6be9e8SBram Moolenaar  exec "norm! 0w\<C-A>"
8636c6be9e8SBram Moolenaar  call assert_equal("\<TAB>2", getline(1))
8646c6be9e8SBram Moolenaar  call assert_equal([0, 1, 2, 0], getpos('.'))
8656c6be9e8SBram Moolenaar
8666c6be9e8SBram Moolenaar  call setline(1, ["\<TAB>1"])
8676c6be9e8SBram Moolenaar  exec "norm! 0wl\<C-A>"
8686c6be9e8SBram Moolenaar  call assert_equal("\<TAB>1", getline(1))
8696c6be9e8SBram Moolenaar  call assert_equal([0, 1, 3, 0], getpos('.'))
8706c6be9e8SBram Moolenaar
8716c6be9e8SBram Moolenaar  call setline(1, ["\<TAB>1"])
8726c6be9e8SBram Moolenaar  exec "norm! 0w30l\<C-A>"
8736c6be9e8SBram Moolenaar  call assert_equal("\<TAB>1", getline(1))
8746c6be9e8SBram Moolenaar  call assert_equal([0, 1, 3, 29], getpos('.'))
8756c6be9e8SBram Moolenaar
8766c6be9e8SBram Moolenaar  set virtualedit&
8776c6be9e8SBram Moolenaarendfunc
8786c6be9e8SBram Moolenaar
879*3e72dcadSBram Moolenaar" Test for incrementing a signed hexadecimal and octal number
880*3e72dcadSBram Moolenaarfunc Test_normal_increment_signed_hexoct_nr()
881*3e72dcadSBram Moolenaar  new
882*3e72dcadSBram Moolenaar  " negative sign before a hex number should be ignored
883*3e72dcadSBram Moolenaar  call setline(1, ["-0x9"])
884*3e72dcadSBram Moolenaar  exe "norm \<C-A>"
885*3e72dcadSBram Moolenaar  call assert_equal(["-0xa"], getline(1, '$'))
886*3e72dcadSBram Moolenaar  exe "norm \<C-X>"
887*3e72dcadSBram Moolenaar  call assert_equal(["-0x9"], getline(1, '$'))
888*3e72dcadSBram Moolenaar  call setline(1, ["-007"])
889*3e72dcadSBram Moolenaar  exe "norm \<C-A>"
890*3e72dcadSBram Moolenaar  call assert_equal(["-010"], getline(1, '$'))
891*3e72dcadSBram Moolenaar  exe "norm \<C-X>"
892*3e72dcadSBram Moolenaar  call assert_equal(["-007"], getline(1, '$'))
893*3e72dcadSBram Moolenaar  bw!
894*3e72dcadSBram Moolenaarendfunc
895*3e72dcadSBram Moolenaar
8969e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
897