aboutsummaryrefslogtreecommitdiff
path: root/games/devtest
diff options
context:
space:
mode:
authorJude Melton-Houghton <jwmhjwmh@gmail.com>2022-09-26 17:03:43 -0400
committerGitHub <noreply@github.com>2022-09-26 17:03:43 -0400
commitf4a01f3a5dc0d8fe2f4f6d804d790da91d1bc30c (patch)
tree089ddc309e22ae8549ec3b86765ee272f57a33df /games/devtest
parent03428d9825cfdf2cfaed6ac9410dafccac0d4f3a (diff)
downloadminetest-f4a01f3a5dc0d8fe2f4f6d804d790da91d1bc30c.tar.xz
Avoid duplication of mod metadata in memory (#12562)
Co-authored-by: sfan5 <sfan5@live.de>
Diffstat (limited to 'games/devtest')
-rw-r--r--games/devtest/mods/unittests/init.lua1
-rw-r--r--games/devtest/mods/unittests/metadata.lua79
2 files changed, 80 insertions, 0 deletions
diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua
index f93d516d7..936f05c6d 100644
--- a/games/devtest/mods/unittests/init.lua
+++ b/games/devtest/mods/unittests/init.lua
@@ -179,6 +179,7 @@ dofile(modpath .. "/itemdescription.lua")
dofile(modpath .. "/async_env.lua")
dofile(modpath .. "/entity.lua")
dofile(modpath .. "/content_ids.lua")
+dofile(modpath .. "/metadata.lua")
--------------
diff --git a/games/devtest/mods/unittests/metadata.lua b/games/devtest/mods/unittests/metadata.lua
new file mode 100644
index 000000000..477ea8037
--- /dev/null
+++ b/games/devtest/mods/unittests/metadata.lua
@@ -0,0 +1,79 @@
+-- Tests of generic and specific metadata functionality
+
+local compare_meta = ItemStack("unittests:iron_lump"):get_meta()
+compare_meta:from_table({
+ fields = {
+ a = "1",
+ b = "2",
+ c = "3",
+ d = "4",
+ e = "e",
+ },
+})
+
+local function test_metadata(meta)
+ meta:from_table({fields = {a = 1, b = "2"}})
+ meta:set_string("c", "3")
+ meta:set_int("d", 4)
+ meta:set_string("e", "e")
+
+ meta:set_string("", "!")
+ meta:set_string("", "")
+
+ assert(meta:equals(compare_meta))
+
+ local tab = meta:to_table()
+ assert(tab.fields.a == "1")
+ assert(tab.fields.b == "2")
+ assert(tab.fields.c == "3")
+ assert(tab.fields.d == "4")
+ assert(tab.fields.e == "e")
+
+ assert(not meta:contains(""))
+ assert(meta:contains("a"))
+ assert(meta:contains("b"))
+ assert(meta:contains("c"))
+ assert(meta:contains("d"))
+ assert(meta:contains("e"))
+
+ assert(meta:get("") == nil)
+ assert(meta:get_string("") == "")
+ assert(meta:get_int("") == 0)
+ assert(meta:get_float("") == 0.0)
+ assert(meta:get("a") == "1")
+ assert(meta:get_string("a") == "1")
+ assert(meta:get_int("a") == 1)
+ assert(meta:get_float("a") == 1.0)
+ assert(meta:get_int("e") == 0)
+ assert(meta:get_float("e") == 0.0)
+
+ meta:set_float("f", 1.1)
+ meta:set_string("g", "${f}")
+ meta:set_string("h", "${g}")
+ meta:set_string("i", "${h}")
+ assert(meta:get_float("h") > 1)
+ assert(meta:get_string("i") == "${f}")
+
+ meta:from_table()
+ assert(next(meta:to_table().fields) == nil)
+
+ assert(not meta:equals(compare_meta))
+end
+
+local storage_a = core.get_mod_storage()
+local storage_b = core.get_mod_storage()
+local function test_mod_storage()
+ assert(rawequal(storage_a, storage_b))
+ test_metadata(storage_a)
+end
+unittests.register("test_mod_storage", test_mod_storage)
+
+local function test_item_metadata()
+ test_metadata(ItemStack("unittest:coal_lump"):get_meta())
+end
+unittests.register("test_item_metadata", test_item_metadata)
+
+local function test_node_metadata(player, pos)
+ test_metadata(minetest.get_meta(pos))
+end
+unittests.register("test_node_metadata", test_node_metadata, {map=true})