diff options
Diffstat (limited to 'test/lua/verify_globals.lua')
-rw-r--r-- | test/lua/verify_globals.lua | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/test/lua/verify_globals.lua b/test/lua/verify_globals.lua new file mode 100644 index 0000000000..b9e78f813b --- /dev/null +++ b/test/lua/verify_globals.lua @@ -0,0 +1,121 @@ +-- verify_globals.lua + +-- need the path to find inspect.lua +local old_path = package.path +package.path = "lua/?.lua;" .. package.path + +local inspect = require("inspect") + +package.path = old_path + +-- ignore things that change on different machines or every release +-- the following items still have to exist, but their values don't have to match +local filter = { + -- differences by machine + "DATA_DIR", + "USER_DIR", + "package.cpath", + "package.path", + "package.loaded", + "run_user_scripts_when_superuser", + "running_superuser", + + -- differences in Lua versions + "_VERSION", + "package.config", + } + +-- the following items don't have to exist +local ignore = { + -- not sure why this was removed in wireshark 1.11, but it was + "TreeItem.set_expert_flags", + + -- in Lua 5.1 only + "debug.getfenv", + "debug.setfenv", + "gcinfo", + "getfenv", + "io.gfind", + "setfenv", + "math.mod", + "newproxy", + "string.gfind", + "table.foreach", + "table.foreachi", + "table.getn", + "table.setn", + + -- in Lua 5.2+ only + "bit32", + "debug.getuservalu", + "debug.setuservalu", + "debug.upvalueid", + "debug.upvaluejoin", + "package.searchers", + "package.searchpath", + "rawlen", + "table.pack", + "table.unpack", + +} + + +local arg={...} -- get passed-in args + +-- arg1 = filename to read in +-- arg2 = 'verify' to verify all of read-in file is in _G (default); 'new' to output all items in _G that are not in read-in file +-- arg3 = 'nometa' to ignore metatables + +print("-- Wireshark version: " .. get_version()) + +if #arg == 0 then + -- no args, so just output globals + print(inspect(_G, { serialize = true, filter = inspect.makeFilter(filter) })) + return +end + +local file = assert(io.open(arg[1], "r")) +local input = file:read("*all") +input = inspect.marshal(input) + +local nometa = false +if #arg > 2 and arg[3] == "nometa" then + nometa = true +end + +if #arg == 1 or arg[2] == "verify" then + print(string.rep("\n", 2)) + print("Verifying input file '"..arg[1].."' is contained within the global table") + local ret, diff = inspect.compare(input, _G, { + ['filter'] = inspect.makeFilter(filter), + ['ignore'] = inspect.makeFilter(ignore), + ['nonumber'] = true, + ['nometa'] = nometa + }) + if not ret then + print("Comparison failed - global table does not have all the items in the input file!") + print(string.rep("\n", 2)) + print(string.rep("-", 80)) + print("Differences are:") + print(inspect(diff)) + else + print("\n-----------------------------\n") + print("All tests passed!\n\n") + end + return +elseif #arg > 1 and arg[2] == "new" then + local ret, diff = inspect.compare(_G, input, { + ['filter'] = inspect.makeFilter(filter), + ['ignore'] = inspect.makeFilter(ignore), + ['nonumber'] = true, + ['keep'] = true, + ['nometa'] = nometa + }) + if not ret then + print(inspect(diff)) + else + print("\n-----------------------------\n") + print("No new items!\n\n") + end +end + |