diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/lua/dir.lua | 202 | ||||
-rwxr-xr-x | test/suite-wslua.sh | 17 |
2 files changed, 219 insertions, 0 deletions
diff --git a/test/lua/dir.lua b/test/lua/dir.lua new file mode 100644 index 0000000000..88ecbe2ce9 --- /dev/null +++ b/test/lua/dir.lua @@ -0,0 +1,202 @@ +-- test script for wslua Dir functions + +------------- helper funcs ------------ + +local total_tests = 0 + +local function testing(name) + print("---- Testing "..name.." ---- ") +end + +local function test(name, ...) + total_tests = total_tests + 1 + io.stdout:write("test "..name.."-"..total_tests.."...") + if (...) == true then + io.stdout:write("passed\n") + return true + else + io.stdout:write("failed!\n") + error(name.." test failed!") + end +end + +-- 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 = {} + +testing("Dir basics") + +test("global", _G.Dir ~= nil) +test("global", type(Dir.make) == 'function') +test("global", type(Dir.remove) == 'function') +test("global", type(Dir.remove_all) == 'function') +test("global", type(Dir.open) == 'function') +test("global", type(Dir.close) == 'function') +test("global", type(Dir.exists) == 'function') +test("global", type(Dir.personal_config_path) == 'function') +test("global", type(Dir.global_config_path) == 'function') +test("global", type(Dir.personal_plugins_path) == 'function') +test("global", type(Dir.global_plugins_path) == 'function') + +testing("Dir paths/filenames") + +test("Dir.__FILE__", __FILE__ ~= nil) +test("Dir.__DIR__", __DIR__ ~= nil) +test("Dir.exists", pcall(callDirFunc, "exists", "temp", t)) +test("Dir.personal_config_path", pcall(callDirFuncBase, "personal_config_path", t)) +test("Dir.global_config_path", pcall(callDirFuncBase, "global_config_path", t)) +test("Dir.personal_plugins_path", pcall(callDirFuncBase, "personal_plugins_path", t)) +test("Dir.global_plugins_path", pcall(callDirFuncBase, "global_plugins_path", t)) + +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") + +testing("Directory manipulation") + +test("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 + +testing("Dir.make") + +test("Dir.make", pcall(callDirFunc, "make", "temp", t) and t.result == true) +test("Dir.exists", pcall(callDirFunc, "exists", "temp", t) and t.result == true) +-- make the same dir, should give false +test("Dir.make", pcall(callDirFunc, "make", "temp", t) and t.result == false) + +testing("Dir.remove") + +test("Dir.remove", pcall(callDirFunc, "remove", "temp", t) and t.result == true) +test("Dir.exists", pcall(callDirFunc, "exists", "temp", t) and t.result == nil) +test("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 +test("Dir.remove", pcall(callDirFunc, "remove", "temp", t) and t.result == nil) + +testing("Dir.remove_all") + +test("Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == true) +test("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") +test("Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == true) +test("Dir.remove_all", pcall(callDirFunc, "remove_all", "temp", t) and t.result == false) + +testing("Dir.open") + +Dir.make("temp") +makeFile("temp/file1.txt") +makeFile("temp/file2.txt") +makeFile("temp/file3.txt") +test("Dir.open", pcall(callDirFunc, "open", "temp", t)) +test("Dir.open", type(t.result) == 'userdata') +test("Dir.open", typeof(t.result) == 'Dir') + +io.stdout:write("calling Dir object...") +local dir = t.result +local file = dir() +io.stdout:write("passed\n") + +test("Dir.call", file == "file1.txt") +file = dir() +test("Dir.call", file == "file2.txt") +file = dir() +test("Dir.call", file == "file3.txt") +file = dir() +test("Dir.call", file == nil) +file = dir() +test("Dir.call", file == nil) + +testing("Dir.close") + +test("Dir.close", pcall(callDirFunc, "close", dir, t)) +test("Dir.close", pcall(callDirFunc, "close", dir, t)) + +testing("Negative testing 1") +-- now try breaking it +test("Dir.open", pcall(callDirFunc, "open", "temp", t)) +dir = t.result +-- call dir() now +file = dir() +test("Dir.call", file == "file1.txt") + +Dir.remove_all("temp") + +-- call it again +file = dir() +test("Dir.call", file == "file2.txt") +test("Dir.close", pcall(callDirFunc, "close", dir, t)) + +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") + +test("Dir.open", pcall(callDirFunc, "open", "temp", t)) +dir = t.result + +Dir.remove_all("temp") +-- now do it +file = dir() +test("Dir.call", file == nil) +test("Dir.close", pcall(callDirFunc, "close", dir, t)) + + +-- negative tests +testing("Negative testing 3") + +-- invalid args +test("Dir.make", not pcall(callDirFunc, "make", {}, t)) +test("Dir.make", not pcall(callDirFunc, "make", nil, t)) +test("Dir.remove", not pcall(callDirFunc, "remove", {}, t)) +test("Dir.remove", not pcall(callDirFunc, "remove", nil, t)) +test("Dir.remove_all", not pcall(callDirFunc, "remove_all", {}, t)) +test("Dir.remove_all", not pcall(callDirFunc, "remove_all", nil, t)) +test("Dir.open", not pcall(callDirFunc, "open", {}, t)) +test("Dir.open", not pcall(callDirFunc, "open", nil, t)) +test("Dir.close", not pcall(callDirFunc, "close", "dir", t)) +test("Dir.close", not pcall(callDirFunc, "close", nil, t)) + + +print("\n-----------------------------\n") + +print("All tests passed!\n\n") diff --git a/test/suite-wslua.sh b/test/suite-wslua.sh index d6c2244746..d4eaa60489 100755 --- a/test/suite-wslua.sh +++ b/test/suite-wslua.sh @@ -22,6 +22,22 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # +wslua_step_dir_test() { + if [ $HAVE_LUA -ne 0 ]; then + test_step_skipped + return + fi + + # Tshark catches lua script failures, so we have to parse the output. + $TSHARK -r $CAPTURE_DIR/empty.pcap -X lua_script:$TESTS_DIR/lua/dir.lua > testout.txt 2>&1 + if grep -q "All tests passed!" testout.txt; then + test_step_ok + else + cat testout.txt + test_step_failed "didn't find pass marker" + fi +} + wslua_step_dissector_test() { if [ $HAVE_LUA -ne 0 ]; then test_step_skipped @@ -358,6 +374,7 @@ wslua_cleanup_step() { wslua_suite() { test_step_set_pre wslua_cleanup_step test_step_set_post wslua_cleanup_step + test_step_add "wslua dir" wslua_step_dir_test test_step_add "wslua dissector" wslua_step_dissector_test test_step_add "wslua field/fieldinfo" wslua_step_field_test test_step_add "wslua file" wslua_step_file_test |