aboutsummaryrefslogtreecommitdiffstats
path: root/test/lua/verify_globals.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/lua/verify_globals.lua')
-rw-r--r--test/lua/verify_globals.lua121
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
+