1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
-- test script for wslua Dir functions
local testlib = require("testlib")
local OTHER = "other"
testlib.init( { [OTHER] = 0 } )
------------- helper funcs ------------
-- the following are so we can use pcall (which needs a function to call)
local function callDirFuncBase(name, t)
t.result = Dir[name]()
return true
end
local function callDirFunc(name, val, t)
t.result = Dir[name](val)
return true
end
local function makeFile(filename)
local f = io.open(filename, "w")
if not f then
error ("failed to make file"..filename.." in directory\n"..
"make sure to delete 'temp' directory before running again")
end
f:write("fooobarrloo")
f:close()
return true
end
--------------------------
-- for our called function results
local t = {}
testlib.testing("Dir basics")
testlib.test(OTHER,"global", _G.Dir ~= nil)
testlib.test(OTHER,"global", type(Dir.make) == 'function')
testlib.test(OTHER,"global", type(Dir.remove) == 'function')
testlib.test(OTHER,"global", type(Dir.remove_all) == 'function')
testlib.test(OTHER,"global", type(Dir.open) == 'function')
testlib.test(OTHER,"global", type(Dir.close) == 'function')
testlib.test(OTHER,"global", type(Dir.exists) == 'function')
testlib.test(OTHER,"global", type(Dir.personal_config_path) == 'function')
testlib.test(OTHER,"global", type(Dir.global_config_path) == 'function')
testlib.test(OTHER,"global", type(Dir.personal_plugins_path) == 'function')
testlib.test(OTHER,"global", type(Dir.global_plugins_path) == 'function')
testlib.testing("Dir paths/filenames")
testlib.test(OTHER,"Dir.__FILE__", __FILE__ ~= nil)
testlib.test(OTHER,"Dir.__DIR__", __DIR__ ~= nil)
testlib.test(OTHER,"Dir.exists", pcall(callDirFunc, "exists", "temp", t))
testlib.test(OTHER,"Dir.personal_config_path", pcall(callDirFuncBase, "personal_config_path", t))
testlib.test(OTHER,"Dir.global_config_path", pcall(callDirFuncBase, "global_config_path", t))
testlib.test(OTHER,"Dir.personal_plugins_path", pcall(callDirFuncBase, "personal_plugins_path", t))
testlib.test(OTHER,"Dir.global_plugins_path", pcall(callDirFuncBase, "global_plugins_path", t))
-- Users expect trailing slashes for DATA_DIR and USER_DIR (bug 14619).
local dirsep = package.config:sub(1,1)
testlib.test(OTHER,"DATA_DIR", string.sub(DATA_DIR, -1) == dirsep)
testlib.test(OTHER,"USER_DIR", string.sub(USER_DIR, -1) == dirsep)
print("\nFor your information, I got the following info:\n")
print("__FILE__ = '" .. __FILE__ .. "'")
print("__DIR__ = '" .. __DIR__ .. "'")
print("personal_config_path = '" .. Dir.personal_config_path() .. "'")
print("global_config_path = '" .. Dir.global_config_path() .. "'")
print("personal_plugins_path = '" .. Dir.personal_plugins_path() .. "'")
print("global_plugins_path = '" .. Dir.global_plugins_path() .. "'")
print("\n")
testlib.testing("Directory manipulation")
testlib.test(OTHER,"Dir.exists", pcall(callDirFunc, "exists", "temp", t))
if t.result == true or t.result == false then
error("this testsuite requires there be no 'temp' directory or file; please remove it")
end
testlib.testing("Dir.make")
testlib.test(OTHER,"Dir.make", pcall(callDirFunc, "make", "temp", t) and t.result == true)
testlib.test(OTHER,"Dir.exists", pcall(callDirFunc, "exists", "temp", t) and t.result == true)
-- make the same dir, should give false
testlib.test(OTHER,"Dir.make", pcall(callDirFunc, "make", "temp", t) and t.result == false)
testlib.testing("Dir.remove")
testlib.test(OTHER,"Dir.remove", pcall(callDirFunc, "remove", "temp", t) and t.result == true)
testlib.test(OTHER,"Dir.exists", pcall(callDirFunc, "exists", "temp", t) and t.result == nil)
testlib.test(OTHER,"Dir.remove", pcall(callDirFunc, "remove", "temp", t) and t.result == false)
Dir.make("temp")
makeFile("temp/file.txt")
-- will return nil because temp has a file
testlib.test(OTHER,"Dir.remove", pcall(callDirFunc, "remove", "temp", t) and t.result == nil)
testlib.testing("Dir.remove_all")
testlib.test(OTHER,"Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == true)
testlib.test(OTHER,"Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == false)
Dir.make("temp")
makeFile("temp/file1.txt")
makeFile("temp/file2.txt")
makeFile("temp/file3.txt")
testlib.test(OTHER,"Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == true)
testlib.test(OTHER,"Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == false)
testlib.testing("Dir.open")
Dir.make("temp")
makeFile("temp/file1.txt")
makeFile("temp/file2.txt")
makeFile("temp/file3.txt")
testlib.test(OTHER,"Dir.open", pcall(callDirFunc, "open", "temp", t))
testlib.test(OTHER,"Dir.open", type(t.result) == 'userdata')
testlib.test(OTHER,"Dir.open", typeof(t.result) == 'Dir')
io.stdout:write("calling Dir object...")
local dir = t.result
local files = {}
files[dir()] = true
io.stdout:write("passed\n")
files[dir()] = true
files[dir()] = true
testlib.test(OTHER,"Dir.call", files["file1.txt"])
testlib.test(OTHER,"Dir.call", files["file2.txt"])
testlib.test(OTHER,"Dir.call", files["file3.txt"])
testlib.test(OTHER,"Dir.call", dir() == nil)
testlib.test(OTHER,"Dir.call", dir() == nil)
testlib.testing("Dir.close")
testlib.test(OTHER,"Dir.close", pcall(callDirFunc, "close", dir, t))
testlib.test(OTHER,"Dir.close", pcall(callDirFunc, "close", dir, t))
testlib.testing("Negative testing 1")
-- now try breaking it
testlib.test(OTHER,"Dir.open", pcall(callDirFunc, "open", "temp", t))
dir = t.result
-- call dir() now
files = {}
files[dir()] = true
Dir.remove_all("temp")
-- call it again
files[dir()] = true
files[dir()] = true
testlib.test(OTHER,"Dir.call", files["file1.txt"])
testlib.test(OTHER,"Dir.call", files["file2.txt"])
testlib.test(OTHER,"Dir.call", files["file3.txt"])
testlib.test(OTHER,"Dir.close", pcall(callDirFunc, "close", dir, t))
testlib.testing("Negative testing 2")
-- do it again, but this time don't do dir() until after removing the files
Dir.make("temp")
makeFile("temp/file1.txt")
makeFile("temp/file2.txt")
makeFile("temp/file3.txt")
testlib.test(OTHER,"Dir.open", pcall(callDirFunc, "open", "temp", t))
dir = t.result
Dir.remove_all("temp")
-- now do it
file = dir()
testlib.test(OTHER,"Dir.call", file == nil)
testlib.test(OTHER,"Dir.close", pcall(callDirFunc, "close", dir, t))
-- negative tests
testlib.testing("Negative testing 3")
-- invalid args
testlib.test(OTHER,"Dir.make", not pcall(callDirFunc, "make", {}, t))
testlib.test(OTHER,"Dir.make", not pcall(callDirFunc, "make", nil, t))
testlib.test(OTHER,"Dir.remove", not pcall(callDirFunc, "remove", {}, t))
testlib.test(OTHER,"Dir.remove", not pcall(callDirFunc, "remove", nil, t))
testlib.test(OTHER,"Dir.remove_all", not pcall(callDirFunc, "remove_all", {}, t))
testlib.test(OTHER,"Dir.remove_all", not pcall(callDirFunc, "remove_all", nil, t))
testlib.test(OTHER,"Dir.open", not pcall(callDirFunc, "open", {}, t))
testlib.test(OTHER,"Dir.open", not pcall(callDirFunc, "open", nil, t))
testlib.test(OTHER,"Dir.close", not pcall(callDirFunc, "close", "dir", t))
testlib.test(OTHER,"Dir.close", not pcall(callDirFunc, "close", nil, t))
print("\n-----------------------------\n")
testlib.getResults()
|