blob: da98a2cfa7611ba7577dbe1ce03792e911a48fd0 [file] [log] [blame]
Luca Saccarolac9df1fb2024-04-14 22:53:22 +02001" Tests for the XDG feature
2
3source check.vim
4CheckFeature terminal
5
6source shared.vim
7source screendump.vim
8source mouse.vim
9source term_util.vim
10
11func s:get_rcs()
12 let rcs = {
13 \ 'file1': { 'path': '~/.vimrc' },
14 \ 'file2': { 'path': '~/.vim/vimrc' },
15 \ 'xdg': { 'path': exists('$XDG_CONFIG_HOME') ? '$XDG_CONFIG_HOME' : "~/.config" },
16 \}
17 for v in values(rcs)
18 let v.exists = filereadable(expand(v.path))
19 endfor
20 return rcs
21endfunc
22
23func Test_xdg_rc_detection()
24 CheckUnix
25 let rc = s:get_rcs()
26 let before =<< trim CODE
27 call writefile([expand('$MYVIMRC')], "XMY_VIMRC")
28 quit!
29 CODE
30 call RunVim(before, [], "")
31 let my_rc = readfile("XMY_VIMRC")
32 if rc.file1.exists
33 call assert_equal(rc.file1.path, my_rc)
34 elseif !rc.file1.exists && rc.file2.exists
35 call assert_equal(rc.file2.path, my_rc)
36 elseif !rc.file1.exists && !rc.file2.exists && rc.xdg.exists
37 call assert_equal(rc.xdg.path, my_rc)
38 endif
39 call delete("XMY_VIMRC")
40endfunc
41
42func Test_xdg_runtime_files()
43 " This tests, that the initialization file from
44 " ~/.vimrc, ~/.vim/vimrc and ~/.config/vim/vimrc (or
45 " $XDG_HOMECONFIG/vim/vimrc) are sourced in that order
46 CheckUnix
47 call mkdir(expand('~/.vim/'), 'pD')
48 call mkdir(expand('~/.config/vim/'), 'pD')
49 call mkdir(expand('~/xdg/vim/'), 'pD')
50
51 let rc1=expand('~/.vimrc')
52 let rc2=expand('~/.vim/vimrc')
53 let rc3=expand('~/.config/vim/vimrc')
54 let rc4=expand('~/xdg/vim/vimrc')
55
56 " g:rc_one|two|three|four is to verify, that the other
Diego Viola2da68c82024-04-15 20:08:38 +020057 " init files are not sourced
Luca Saccarolac9df1fb2024-04-14 22:53:22 +020058 " g:rc is to verify which rc file has been loaded.
59 let file1 =<< trim CODE
60 let g:rc_one = 'one'
61 let g:rc = '.vimrc'
62 CODE
63 let file2 =<< trim CODE
64 let g:rc_two = 'two'
65 let g:rc = '.vim/vimrc'
66 CODE
67 let file3 =<< trim CODE
68 let g:rc_three = 'three'
69 let g:rc = '.config/vim/vimrc'
70 CODE
71 let file4 =<< trim CODE
72 let g:rc_four = 'four'
73 let g:rc = 'xdg/vim/vimrc'
74 CODE
75 call writefile(file1, rc1)
76 call writefile(file2, rc2)
77 call writefile(file3, rc3)
78 call writefile(file4, rc4)
79
80 let rows = 20
81 let buf = RunVimInTerminal('', #{rows: rows, no_clean: 1})
82 call TermWait(buf)
Christian Brabandt29358d22024-04-15 19:11:15 +020083 call term_sendkeys(buf, ":echo \$MYVIMRC[-30:]\<cr>")
Luca Saccarolac9df1fb2024-04-14 22:53:22 +020084 call WaitForAssert({-> assert_match('XfakeHOME/\.vimrc', term_getline(buf, rows))})
85 call term_sendkeys(buf, ":call filter(g:, {idx, _ -> idx =~ '^rc'})\<cr>")
86 call TermWait(buf)
87 call term_sendkeys(buf, ":redraw!\<cr>")
88 call TermWait(buf)
89 call term_sendkeys(buf, ":let g:\<cr>")
90 call VerifyScreenDump(buf, 'Test_xdg_1', {})
91 call StopVimInTerminal(buf)
92 call delete(rc1)
93 bw
94
95 let buf = RunVimInTerminal('', #{rows: rows, no_clean: 1})
96 call TermWait(buf)
Christian Brabandt29358d22024-04-15 19:11:15 +020097 call term_sendkeys(buf, ":echo \$MYVIMRC[-30:]\<cr>")
Luca Saccarolac9df1fb2024-04-14 22:53:22 +020098 call WaitForAssert({-> assert_match('XfakeHOME/\.vim/vimrc', term_getline(buf, rows))})
99 call term_sendkeys(buf, ":call filter(g:, {idx, _ -> idx =~ '^rc'})\<cr>")
100 call TermWait(buf)
101 call term_sendkeys(buf, ":redraw!\<cr>")
102 call TermWait(buf)
103 call term_sendkeys(buf, ":let g:\<cr>")
104 call VerifyScreenDump(buf, 'Test_xdg_2', {})
105 call StopVimInTerminal(buf)
106 call delete(rc2)
107 bw
108
109 let buf = RunVimInTerminal('', #{rows: rows, no_clean: 1})
110 call TermWait(buf)
Christian Brabandt29358d22024-04-15 19:11:15 +0200111 call term_sendkeys(buf, ":echo \$MYVIMRC[-30:]\<cr>")
Luca Saccarolac9df1fb2024-04-14 22:53:22 +0200112 call WaitForAssert({-> assert_match('XfakeHOME/\.config/vim/vimrc', term_getline(buf, rows))})
113 call term_sendkeys(buf, ":call filter(g:, {idx, _ -> idx =~ '^rc'})\<cr>")
114 call TermWait(buf)
115 call term_sendkeys(buf, ":redraw!\<cr>")
116 call TermWait(buf)
117 call term_sendkeys(buf, ":let g:\<cr>")
118 call VerifyScreenDump(buf, 'Test_xdg_3', {})
119 call StopVimInTerminal(buf)
120 call delete(rc3)
121 bw
122
123 let $XDG_CONFIG_HOME=expand('~/xdg/')
124 let buf = RunVimInTerminal('', #{rows: rows, no_clean: 1})
125 call TermWait(buf)
126 call term_sendkeys(buf, ":redraw!\<cr>")
127 call TermWait(buf)
Christian Brabandt29358d22024-04-15 19:11:15 +0200128 call term_sendkeys(buf, ":echo \$MYVIMRC[-30:]\<cr>")
129 call WaitForAssert({-> assert_match('XfakeHOME/xdg/vim/vimrc', term_getline(buf, rows))})
Luca Saccarolac9df1fb2024-04-14 22:53:22 +0200130 call term_sendkeys(buf, ":call filter(g:, {idx, _ -> idx =~ '^rc'})\<cr>")
131 call TermWait(buf)
132 call term_sendkeys(buf, ":let g:\<cr>")
133 call VerifyScreenDump(buf, 'Test_xdg_4', {})
134 call StopVimInTerminal(buf)
135 call delete(rc4)
136 bw
137 unlet $XDG_CONFIG_HOME
138endfunc
139
Diego Violad1068a22024-04-16 20:58:45 +0200140func Test_xdg_version()
141 CheckUnix
142 let $HOME = getcwd() .. '/XfakeHOME'
143 unlet $XDG_CONFIG_HOME
144 let a = execute(':version')->split('\n')
145 let a = filter(a, { _, val -> val =~ '\.config\|XDG_CONFIG_HOME' })
146 call assert_equal(1, len(a))
147 call assert_match('\~/.config/vim/vimrc', a[0])
148
149 let $XDG_CONFIG_HOME = expand('~/.xdg')
150 let a = execute(':version')->split('\n')
151 let a = filter(a, { _, val -> val =~ '\.config\|XDG_CONFIG_HOME' })
152 call assert_equal(1, len(a))
153 call assert_match('XDG_CONFIG_HOME/vim/vimrc', a[0])
154 unlet $XDG_CONFIG_HOME
155endfunc
156
Luca Saccarolac9df1fb2024-04-14 22:53:22 +0200157" vim: shiftwidth=2 sts=2 expandtab