Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 1 | " Tests for stat functions and checktime |
| 2 | |
| 3 | func Test_existent_file() |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 4 | let fname = 'Xtest.tmp' |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 5 | |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 6 | let ts = localtime() |
| 7 | let fl = ['Hello World!'] |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 8 | call writefile(fl, fname) |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 9 | let tf = getftime(fname) |
| 10 | let te = localtime() |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 11 | |
| 12 | call assert_true(ts <= tf && tf <= te) |
| 13 | call assert_equal(strlen(fl[0] . "\n"), getfsize(fname)) |
| 14 | call assert_equal('file', getftype(fname)) |
| 15 | call assert_equal('rw-', getfperm(fname)[0:2]) |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 16 | |
| 17 | call delete(fname) |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 18 | endfunc |
| 19 | |
| 20 | func Test_existent_directory() |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 21 | let dname = '.' |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 22 | |
| 23 | call assert_equal(0, getfsize(dname)) |
| 24 | call assert_equal('dir', getftype(dname)) |
| 25 | call assert_equal('rwx', getfperm(dname)[0:2]) |
| 26 | endfunc |
| 27 | |
| 28 | func Test_checktime() |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 29 | let fname = 'Xtest.tmp' |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 30 | |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 31 | let fl = ['Hello World!'] |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 32 | call writefile(fl, fname) |
| 33 | set autoread |
| 34 | exec 'e' fname |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 35 | " FAT has a granularity of 2 seconds, otherwise it's usually 1 second |
| 36 | if has('win32') |
| 37 | sleep 2 |
| 38 | else |
| 39 | sleep 1 |
| 40 | endif |
| 41 | let fl = readfile(fname) |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 42 | let fl[0] .= ' - checktime' |
| 43 | call writefile(fl, fname) |
| 44 | checktime |
| 45 | call assert_equal(fl[0], getline(1)) |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 46 | |
| 47 | call delete(fname) |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 48 | endfunc |
| 49 | |
| 50 | func Test_nonexistent_file() |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 51 | let fname = 'Xtest.tmp' |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 52 | |
| 53 | call delete(fname) |
| 54 | call assert_equal(-1, getftime(fname)) |
| 55 | call assert_equal(-1, getfsize(fname)) |
| 56 | call assert_equal('', getftype(fname)) |
| 57 | call assert_equal('', getfperm(fname)) |
| 58 | endfunc |
| 59 | |
| 60 | func Test_win32_symlink_dir() |
| 61 | " On Windows, non-admin users cannot create symlinks. |
| 62 | " So we use an existing symlink for this test. |
| 63 | if has('win32') |
| 64 | " Check if 'C:\Users\All Users' is a symlink to a directory. |
Bram Moolenaar | a2f2885 | 2017-02-01 22:05:28 +0100 | [diff] [blame] | 65 | let res = system('dir C:\Users /a') |
Bram Moolenaar | 8767f52 | 2016-07-01 17:17:39 +0200 | [diff] [blame] | 66 | if match(res, '\C<SYMLINKD> *All Users') >= 0 |
| 67 | " Get the filetype of the symlink. |
| 68 | call assert_equal('dir', getftype('C:\Users\All Users')) |
| 69 | endif |
| 70 | endif |
| 71 | endfunc |