spec/util_format_spec.lua
author Kim Alvefur <zash@zash.se>
Sat, 11 Dec 2021 13:39:58 +0100
changeset 12037 161f8268c4b3
parent 12036 3db09eb4c43b
child 12038 ee94ac51b2dd
permissions -rw-r--r--
util.format: Also handle the %p format added in Lua 5.4

local format = require "util.format".format;

describe("util.format", function()
	describe("#format()", function()
		it("should work", function()
			assert.equal("hello", format("%s", "hello"));
			assert.equal("(nil)", format("%s"));
			assert.equal("(nil)", format("%d"));
			assert.equal("(nil)", format("%q"));
			assert.equal(" [(nil)]", format("", nil));
			assert.equal("true", format("%s", true));
			assert.equal("[true]", format("%d", true));
			assert.equal("% [true]", format("%%", true));
			assert.equal("{ }", format("%q", { }));
			assert.equal("[1.5]", format("%d", 1.5));
			assert.equal("[7.3786976294838e+19]", format("%d", 73786976294838206464));
		end);

		it("escapes ascii control stuff", function ()
			assert.equal("␁", format("%s", "\1"));
			assert.equal("[␁]", format("%d", "\1"));
		end);

		it("escapes invalid UTF-8", function ()
			assert.equal("\"Hello w\\195rld\"", format("%s", "Hello w\195rld"));
		end);

		if _VERSION >= "Lua 5.4" then
			it("handles %p formats", function ()
				assert.matches("a 0x%x+ b", format("%s %p %s", "a", {}, "b"));
			end)
		else
			it("does something with %p formats", function ()
				assert.string(format("%p", {}));
			end)
		end
	end);
end);