Software /
code /
prosody
File
spec/util_encodings_spec.lua @ 12254:5b0c8e499288
modulemanager: Add plugin load filter that reads module metadata from source
Metadata in modules is added using lines formatted as:
--% key: value
Where key is a valid identifier string, and value is also a string (leading
and trailing whitespace are trimmed during parsing).
The initial supported keys are:
--% requires_core_features: feature1, feature2, ...
--% conflicts_core_features: feature1, feature2. ...
These 'features' map to features reported by the new core.features module.
A benefit of this load-time metadata approach compared to e.g. something like
module:requires()/module:conflicts() is that we can continue to look in module
search paths for a suitable module. Aborting an already-loaded module due to
a version conflict would be too late.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 04 Feb 2022 14:20:00 +0000 |
parent | 8373:af7b41a0ec9e |
line wrap: on
line source
local encodings = require "util.encodings"; local utf8 = assert(encodings.utf8, "no encodings.utf8 module"); describe("util.encodings", function () describe("#encode()", function() it("should work", function () assert.is.equal(encodings.base64.encode(""), ""); assert.is.equal(encodings.base64.encode('coucou'), "Y291Y291"); assert.is.equal(encodings.base64.encode("\0\0\0"), "AAAA"); assert.is.equal(encodings.base64.encode("\255\255\255"), "////"); end); end); describe("#decode()", function() it("should work", function () assert.is.equal(encodings.base64.decode(""), ""); assert.is.equal(encodings.base64.decode("="), ""); assert.is.equal(encodings.base64.decode('Y291Y291'), "coucou"); assert.is.equal(encodings.base64.decode("AAAA"), "\0\0\0"); assert.is.equal(encodings.base64.decode("////"), "\255\255\255"); end); end); end); describe("util.encodings.utf8", function() describe("#valid()", function() it("should work", function() for line in io.lines("spec/utf8_sequences.txt") do local data = line:match(":%s*([^#]+)"):gsub("%s+", ""):gsub("..", function (c) return string.char(tonumber(c, 16)); end) local expect = line:match("(%S+):"); assert(expect == "pass" or expect == "fail", "unknown expectation: "..line:match("^[^:]+")); local valid = utf8.valid(data); assert.is.equal(valid, utf8.valid(data.." ")); assert.is.equal(valid, expect == "pass", line); end end); end); end);