File

spec/util_human_io_spec.lua @ 13467:c2a476f4712a

util.startup: Fix exiting on pidfile trouble prosody.shutdown() relies on prosody.main_thread, which has not been set yet at this point. Doing a clean shutdown might actually be harmful in case it tears down things set up by the conflicting Prosody, such as the very pidfile we were looking at. Thanks again SigmaTel71 for noticing
author Kim Alvefur <zash@zash.se>
date Wed, 27 Mar 2024 19:33:11 +0100
parent 13367:82513890a1d8
line wrap: on
line source

describe("util.human.io", function ()
	local human_io
	setup(function ()
		human_io = require "util.human.io";
	end);
	describe("table", function ()

		it("alignment works", function ()
			local row = human_io.table({
					{
						width = 3,
						align = "right"
					},
					{
						width = 3,
					},
				});

			assert.equal("  1 | .  ", row({ 1, "." }));
			assert.equal(" 10 | .. ", row({ 10, ".." }));
			assert.equal("100 | ...", row({ 100, "..." }));
			assert.equal("10… | ..…", row({ 1000, "...." }));

		end);
	end);

	describe("ellipsis", function()
		it("works", function()
			assert.equal("…", human_io.ellipsis("abc", 1));
			assert.equal("a…", human_io.ellipsis("abc", 2));
			assert.equal("abc", human_io.ellipsis("abc", 3));

			assert.equal("…", human_io.ellipsis("räksmörgås", 1));
			assert.equal("r…", human_io.ellipsis("räksmörgås", 2));
			assert.equal("rä…", human_io.ellipsis("räksmörgås", 3));
			assert.equal("räk…", human_io.ellipsis("räksmörgås", 4));
			assert.equal("räks…", human_io.ellipsis("räksmörgås", 5));
			assert.equal("räksm…", human_io.ellipsis("räksmörgås", 6));
			assert.equal("räksmö…", human_io.ellipsis("räksmörgås", 7));
			assert.equal("räksmör…", human_io.ellipsis("räksmörgås", 8));
			assert.equal("räksmörg…", human_io.ellipsis("räksmörgås", 9));
			assert.equal("räksmörgås", human_io.ellipsis("räksmörgås", 10));
		end);
	end);

	describe("parse_duration", function ()
		local function test(expected, duration)
			return assert.equal(expected, human_io.parse_duration(duration), ("%q -> %d"):format(duration, expected));
		end
		local function should_fail(duration)
			assert.is_nil(human_io.parse_duration(duration), "invalid duration should fail: %q");
		end
		it("works", function ()
			test(1, "1s");
			test(60, "1min");
			test(60, "1 min");
			test(60, "1 minute");
			test(120, "2min");
			test(7200, "2h");
			test(7200, "2 hours");
			test(86400, "1d");
			test(604800, "1w");
			test(604800, "1week");
			test(1814400, "3 weeks");
			test(2678400, "1month");
			test(2678400, "1 month");
			test(31536000, "365 days");
			test(31556952, "1 year");

			should_fail("two weeks");
			should_fail("1m");
			should_fail("1mi");
			should_fail("1mo");
		end);
	end);

	describe("parse_duration_lax", function ()
		local function test(expected, duration)
			return assert.equal(expected, human_io.parse_duration_lax(duration), ("%q -> %d"):format(duration, expected));
		end
		it("works", function ()
			test(1, "1s");
			test(60, "1mi");
			test(60, "1min");
			test(60, "1 min");
			test(60, "1 minute");
			test(120, "2min");
			test(7200, "2h");
			test(7200, "2 hours");
			test(86400, "1d");
			test(604800, "1w");
			test(604800, "1week");
			test(1814400, "3 weeks");
			test(2678400, "1m");
			test(2678400, "1mo");
			test(2678400, "1month");
			test(2678400, "1 month");
			test(31536000, "365 days");
			test(31556952, "1 year");
			return assert.is_nil(human_io.parse_duration_lax("two weeks"), "\"2 weeks\" -> nil");
		end);
	end);
end);