From 6f0dbaaeb328c5df4c41eb30f2cd4bcb56f33ac1 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sat, 27 Mar 2021 12:18:27 +0100 Subject: [PATCH] Fix colorspec.from_string, add tests --- minetest/colorspec.lua | 12 +++++++----- test.lua | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/minetest/colorspec.lua b/minetest/colorspec.lua index e3ad028..3e82bc5 100644 --- a/minetest/colorspec.lua +++ b/minetest/colorspec.lua @@ -165,13 +165,15 @@ end colorspec.from_table = colorspec.new function colorspec.from_string(string) - local hex = "#([A-Fa-f%d])+" + local hex = "#([A-Fa-f%d]+)" local number, alpha = named_colors[string], 0xFF if not number then - local name, alpha_text = string:match("^([a-z])+" .. hex .. "$") - assert(alpha_text:len() == 2) - number = assert(named_colors[name]) - alpha = tonumber(alpha_text, 16) + local name, alpha_text = string:match("^([a-z]+)" .. hex .. "$") + if name then + assert(alpha_text:len() == 2) + number = assert(named_colors[name]) + alpha = tonumber(alpha_text, 16) + end end if number then return colorspec.from_number(number * 0x100 + alpha) diff --git a/test.lua b/test.lua index 465429f..f1f3d34 100644 --- a/test.lua +++ b/test.lua @@ -113,8 +113,19 @@ do end -- colorspec -local colorspec = minetest.colorspec.from_number(0xDDCCBBAA) -assertdump(table.equals(colorspec, {a = 0xAA, b = 0xBB, g = 0xCC, r = 0xDD,}), colorspec) +local colorspec = minetest.colorspec +local function test_from_string(string, number) + local spec = colorspec.from_string(string) + local expected = colorspec.from_number(number) + assertdump(table.equals(spec, expected), {expected = expected, actual = spec}) +end +local spec = colorspec.from_number(0xDDCCBBAA) +assertdump(table.equals(spec, {a = 0xAA, b = 0xBB, g = 0xCC, r = 0xDD}), spec) +test_from_string("aliceblue", 0xf0f8ffff) +test_from_string("aliceblue#42", 0xf0f8ff42) +test_from_string("#333", 0x333333FF) +test_from_string("#694269", 0x694269FF) +test_from_string("#11223344", 0x11223344) -- k-d-tree local vectors = {}