blob: 4a43863436379b9708ac37017c54fd2b6d9428ae [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
57 " init files are not source
58 " 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)
83 call term_sendkeys(buf, ":echo \$MYVIMRC\<cr>")
84 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)
97 call term_sendkeys(buf, ":echo \$MYVIMRC\<cr>")
98 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)
111 call term_sendkeys(buf, ":echo \$MYVIMRC\<cr>")
112 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)
128 call term_sendkeys(buf, ":echo \$MYVIMRC\<cr>")
129 call WaitForAssert({-> assert_match('xdg/vim/vimrc', term_getline(buf, rows))})
130 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
140" vim: shiftwidth=2 sts=2 expandtab