2022-05-16 09:59:37 +03:00
|
|
|
module os
|
|
|
|
|
|
|
|
fn test_is_abs_path() {
|
|
|
|
$if windows {
|
|
|
|
assert is_abs_path('/')
|
|
|
|
assert is_abs_path('\\')
|
|
|
|
assert !is_abs_path('\\\\')
|
|
|
|
assert is_abs_path(r'C:\path\to\files\file.v')
|
|
|
|
assert is_abs_path(r'\\Host\share')
|
|
|
|
assert is_abs_path(r'//Host\share\files\file.v')
|
|
|
|
assert is_abs_path(r'\\.\BootPartition\Windows')
|
|
|
|
assert !is_abs_path(r'\\.\')
|
|
|
|
assert !is_abs_path(r'\\?\\')
|
|
|
|
assert !is_abs_path(r'C:path\to\dir')
|
|
|
|
assert !is_abs_path(r'dir')
|
|
|
|
assert !is_abs_path(r'.\')
|
|
|
|
assert !is_abs_path(r'.')
|
|
|
|
assert !is_abs_path(r'\\Host')
|
|
|
|
assert !is_abs_path(r'\\Host\')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
assert is_abs_path('/')
|
|
|
|
assert is_abs_path('/path/to/files/file.v')
|
|
|
|
assert !is_abs_path('\\')
|
|
|
|
assert !is_abs_path('path/to/files/file.v')
|
|
|
|
assert !is_abs_path('dir')
|
|
|
|
assert !is_abs_path('./')
|
|
|
|
assert !is_abs_path('.')
|
|
|
|
}
|
2022-05-21 01:16:29 +03:00
|
|
|
|
|
|
|
fn test_clean_path() {
|
|
|
|
$if windows {
|
|
|
|
assert clean_path(r'\\path\to\files/file.v') == r'\path\to\files\file.v'
|
|
|
|
assert clean_path(r'\/\//\/') == '\\'
|
|
|
|
assert clean_path(r'./path\\dir/\\./\/\\/file.v\.\\\.') == r'path\dir\file.v'
|
|
|
|
assert clean_path(r'\./path/dir\\file.exe') == r'\path\dir\file.exe'
|
|
|
|
assert clean_path(r'.') == ''
|
|
|
|
assert clean_path(r'./') == ''
|
2022-05-31 06:32:12 +03:00
|
|
|
assert clean_path('') == ''
|
2022-05-21 01:16:29 +03:00
|
|
|
assert clean_path(r'\./') == '\\'
|
|
|
|
assert clean_path(r'//\/\/////') == '\\'
|
|
|
|
return
|
|
|
|
}
|
|
|
|
assert clean_path('./../.././././//') == '../..'
|
2022-05-31 06:32:12 +03:00
|
|
|
assert clean_path('') == ''
|
2022-05-21 01:16:29 +03:00
|
|
|
assert clean_path('.') == ''
|
|
|
|
assert clean_path('./path/to/file.v//./') == 'path/to/file.v'
|
|
|
|
assert clean_path('./') == ''
|
|
|
|
assert clean_path('/.') == '/'
|
|
|
|
assert clean_path('//path/./to/.///files/file.v///') == '/path/to/files/file.v'
|
|
|
|
assert clean_path('path/./to/.///files/.././file.v///') == 'path/to/files/../file.v'
|
|
|
|
assert clean_path('\\') == '\\'
|
|
|
|
assert clean_path('//////////') == '/'
|
|
|
|
}
|
|
|
|
|
2022-10-14 10:22:36 +03:00
|
|
|
fn test_to_slash() {
|
|
|
|
sep := path_separator
|
|
|
|
assert to_slash('') == ''
|
|
|
|
assert to_slash(sep) == ('/')
|
|
|
|
assert to_slash([sep, 'a', sep, 'b'].join('')) == '/a/b'
|
|
|
|
assert to_slash(['a', sep, sep, 'b'].join('')) == 'a//b'
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_from_slash() {
|
|
|
|
sep := path_separator
|
|
|
|
assert from_slash('') == ''
|
|
|
|
assert from_slash('/') == sep
|
|
|
|
assert from_slash('/a/b') == [sep, 'a', sep, 'b'].join('')
|
|
|
|
assert from_slash('a//b') == ['a', sep, sep, 'b'].join('')
|
|
|
|
}
|
|
|
|
|
2022-05-21 01:16:29 +03:00
|
|
|
fn test_norm_path() {
|
|
|
|
$if windows {
|
|
|
|
assert norm_path(r'C:/path/to//file.v\\') == r'C:\path\to\file.v'
|
|
|
|
assert norm_path(r'C:path\.\..\\\.\to//file.v') == r'C:to\file.v'
|
|
|
|
assert norm_path(r'D:path\.\..\..\\\\.\to//dir/..\') == r'D:..\to'
|
|
|
|
assert norm_path(r'D:/path\.\..\/..\file.v') == r'D:\file.v'
|
|
|
|
assert norm_path(r'') == '.'
|
|
|
|
assert norm_path(r'/') == '\\'
|
|
|
|
assert norm_path(r'\/') == '\\'
|
|
|
|
assert norm_path(r'path\../dir\..') == '.'
|
|
|
|
assert norm_path(r'.\.\') == '.'
|
|
|
|
assert norm_path(r'G:.\.\dir\././\.\.\\\\///to/././\file.v/./\\') == r'G:dir\to\file.v'
|
|
|
|
assert norm_path(r'G:\..\..\.\.\file.v\\\.') == r'G:\file.v'
|
|
|
|
assert norm_path(r'\\Server\share\\\dir/..\file.v\./.') == r'\\Server\share\file.v'
|
|
|
|
assert norm_path(r'\\.\device\\\dir/to/./file.v\.') == r'\\.\device\dir\to\file.v'
|
|
|
|
assert norm_path(r'C:dir/../dir2/../../../file.v') == r'C:..\..\file.v'
|
|
|
|
assert norm_path(r'\\.\C:\\\Users/\Documents//..') == r'\\.\C:\Users'
|
|
|
|
assert norm_path(r'\\.\C:\Users') == r'\\.\C:\Users'
|
|
|
|
assert norm_path(r'\\') == '\\'
|
|
|
|
assert norm_path(r'//') == '\\'
|
|
|
|
assert norm_path(r'\\\') == '\\'
|
|
|
|
assert norm_path(r'.') == '.'
|
|
|
|
assert norm_path(r'\\Server') == '\\Server'
|
|
|
|
assert norm_path(r'\\Server\') == '\\Server'
|
|
|
|
return
|
|
|
|
}
|
|
|
|
assert norm_path('/path/././../to/file//file.v/.') == '/to/file/file.v'
|
|
|
|
assert norm_path('path/././to/files/../../file.v/.') == 'path/file.v'
|
|
|
|
assert norm_path('path/././/../../to/file.v/.') == '../to/file.v'
|
|
|
|
assert norm_path('/path/././/../..///.././file.v/././') == '/file.v'
|
|
|
|
assert norm_path('path/././//../../../to/dir//.././file.v/././') == '../../to/file.v'
|
|
|
|
assert norm_path('path/../dir/..') == '.'
|
|
|
|
assert norm_path('../dir/..') == '..'
|
|
|
|
assert norm_path('/../dir/..') == '/'
|
|
|
|
assert norm_path('//././dir/../files/././/file.v') == '/files/file.v'
|
|
|
|
assert norm_path('/\\../dir/////////.') == '/\\../dir'
|
|
|
|
assert norm_path('/home/') == '/home'
|
|
|
|
assert norm_path('/home/////./.') == '/home'
|
|
|
|
assert norm_path('...') == '...'
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_abs_path() {
|
|
|
|
wd := getwd()
|
|
|
|
wd_w_sep := wd + path_separator
|
|
|
|
$if windows {
|
|
|
|
assert abs_path('path/to/file.v') == '${wd_w_sep}path\\to\\file.v'
|
|
|
|
assert abs_path('path/to/file.v') == '${wd_w_sep}path\\to\\file.v'
|
|
|
|
assert abs_path('/') == r'\'
|
|
|
|
assert abs_path(r'C:\path\to\files\file.v') == r'C:\path\to\files\file.v'
|
|
|
|
assert abs_path(r'C:\/\path\.\to\../files\file.v\.\\\.\') == r'C:\path\files\file.v'
|
|
|
|
assert abs_path(r'\\Host\share\files\..\..\.') == r'\\Host\share\'
|
|
|
|
assert abs_path(r'\\.\HardDiskvolume2\files\..\..\.') == r'\\.\HardDiskvolume2\'
|
|
|
|
assert abs_path(r'\\?\share') == r'\\?\share'
|
|
|
|
assert abs_path(r'\\.\') == r'\'
|
|
|
|
assert abs_path(r'G:/\..\\..\.\.\file.v\\.\.\\\\') == r'G:\file.v'
|
|
|
|
assert abs_path('files') == '${wd_w_sep}files'
|
|
|
|
assert abs_path('') == wd
|
|
|
|
assert abs_path('.') == wd
|
|
|
|
assert abs_path('files/../file.v') == '${wd_w_sep}file.v'
|
|
|
|
assert abs_path('///') == r'\'
|
|
|
|
assert abs_path('/path/to/file.v') == r'\path\to\file.v'
|
|
|
|
assert abs_path('D:/') == r'D:\'
|
|
|
|
assert abs_path(r'\\.\HardiskVolume6') == r'\\.\HardiskVolume6'
|
|
|
|
return
|
|
|
|
}
|
|
|
|
assert abs_path('/') == '/'
|
|
|
|
assert abs_path('.') == wd
|
|
|
|
assert abs_path('files') == '${wd_w_sep}files'
|
|
|
|
assert abs_path('') == wd
|
|
|
|
assert abs_path('files/../file.v') == '${wd_w_sep}file.v'
|
|
|
|
assert abs_path('///') == '/'
|
|
|
|
assert abs_path('/path/to/file.v') == '/path/to/file.v'
|
|
|
|
assert abs_path('/path/to/file.v/../..') == '/path'
|
|
|
|
assert abs_path('path/../file.v/..') == wd
|
|
|
|
assert abs_path('///') == '/'
|
|
|
|
}
|
2022-05-31 06:32:12 +03:00
|
|
|
|
|
|
|
fn test_existing_path() {
|
|
|
|
wd := getwd()
|
|
|
|
$if windows {
|
|
|
|
assert existing_path('') or { '' } == ''
|
|
|
|
assert existing_path('..') or { '' } == '..'
|
|
|
|
assert existing_path('.') or { '' } == '.'
|
|
|
|
assert existing_path(wd) or { '' } == wd
|
|
|
|
assert existing_path('\\') or { '' } == '\\'
|
|
|
|
assert existing_path('$wd\\.\\\\does/not/exist\\.\\') or { '' } == '$wd\\.\\\\'
|
|
|
|
assert existing_path('$wd\\\\/\\.\\.\\/.') or { '' } == '$wd\\\\/\\.\\.\\/.'
|
|
|
|
assert existing_path('$wd\\././/\\/oh') or { '' } == '$wd\\././/\\/'
|
|
|
|
return
|
|
|
|
}
|
|
|
|
assert existing_path('') or { '' } == ''
|
|
|
|
assert existing_path('..') or { '' } == '..'
|
|
|
|
assert existing_path('.') or { '' } == '.'
|
|
|
|
assert existing_path(wd) or { '' } == wd
|
|
|
|
assert existing_path('/') or { '' } == '/'
|
|
|
|
assert existing_path('$wd/does/.///not/exist///.//') or { '' } == '$wd/'
|
|
|
|
assert existing_path('$wd//././/.//') or { '' } == '$wd//././/.//'
|
|
|
|
assert existing_path('$wd//././/.//oh') or { '' } == '$wd//././/.//'
|
|
|
|
}
|
2022-06-08 21:26:24 +03:00
|
|
|
|
|
|
|
fn test_windows_volume() {
|
|
|
|
$if windows {
|
|
|
|
assert windows_volume('C:/path\\to/file.v') == 'C:'
|
|
|
|
assert windows_volume('D:\\.\\') == 'D:'
|
|
|
|
assert windows_volume('G:') == 'G:'
|
|
|
|
assert windows_volume('G') == ''
|
|
|
|
assert windows_volume(r'\\Host\share\files\file.v') == r'\\Host\share'
|
|
|
|
assert windows_volume('\\\\Host\\') == ''
|
|
|
|
assert windows_volume(r'\\.\BootPartition2\\files\.\\') == r'\\.\BootPartition2'
|
|
|
|
assert windows_volume(r'\/.\BootPartition2\\files\.\\') == r'\/.\BootPartition2'
|
|
|
|
assert windows_volume(r'\\\.\BootPartition2\\files\.\\') == ''
|
|
|
|
assert windows_volume('') == ''
|
|
|
|
assert windows_volume('\\') == ''
|
|
|
|
assert windows_volume('/') == ''
|
|
|
|
}
|
|
|
|
}
|