mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 07:25:22 +01:00 
			
		
		
		
	* minetest.serialize: Reversible number to string conversion The %a format is not supported in Lua 5.1. This commit also adds two tests for number serialization.
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| _G.core = {}
 | |
| 
 | |
| _G.setfenv = require 'busted.compatibility'.setfenv
 | |
| 
 | |
| dofile("builtin/common/serialize.lua")
 | |
| 
 | |
| describe("serialize", function()
 | |
| 	it("works", function()
 | |
| 		local test_in = {cat={sound="nyan", speed=400}, dog={sound="woof"}}
 | |
| 		local test_out = core.deserialize(core.serialize(test_in))
 | |
| 
 | |
| 		assert.same(test_in, test_out)
 | |
| 	end)
 | |
| 
 | |
| 	it("handles characters", function()
 | |
| 		local test_in = {escape_chars="\n\r\t\v\\\"\'", non_european="θשׁ٩∂"}
 | |
| 		local test_out = core.deserialize(core.serialize(test_in))
 | |
| 		assert.same(test_in, test_out)
 | |
| 	end)
 | |
| 
 | |
| 	it("handles precise numbers", function()
 | |
| 		local test_in = 0.2695949158945771
 | |
| 		local test_out = core.deserialize(core.serialize(test_in))
 | |
| 		assert.same(test_in, test_out)
 | |
| 	end)
 | |
| 
 | |
| 	it("handles big integers", function()
 | |
| 		local test_in = 269594915894577
 | |
| 		local test_out = core.deserialize(core.serialize(test_in))
 | |
| 		assert.same(test_in, test_out)
 | |
| 	end)
 | |
| 
 | |
| 	it("handles recursive structures", function()
 | |
| 		local test_in = { hello = "world" }
 | |
| 		test_in.foo = test_in
 | |
| 
 | |
| 		local test_out = core.deserialize(core.serialize(test_in))
 | |
| 		assert.same(test_in, test_out)
 | |
| 	end)
 | |
| 
 | |
| 	it("strips functions in safe mode", function()
 | |
| 		local test_in = {
 | |
| 			func = function(a, b)
 | |
| 				error("test")
 | |
| 			end,
 | |
| 			foo = "bar"
 | |
| 		}
 | |
| 
 | |
| 		local str = core.serialize(test_in)
 | |
| 		assert.not_nil(str:find("loadstring"))
 | |
| 
 | |
| 		local test_out = core.deserialize(str, true)
 | |
| 		assert.is_nil(test_out.func)
 | |
| 		assert.equals(test_out.foo, "bar")
 | |
| 	end)
 | |
| end)
 |