Software /
code /
prosody
File
spec/util_json_spec.lua @ 12885:3a6dae39c70e 0.12
net.http.server: Add new API to get HTTP request from a connection
This information is sometimes necessary in the context where we have a
connection that we know (or believe to be) associated with an incoming HTTP
request.
For example, it can be used to retrieve the IP address of a request (which may
differ from the IP address of the connection, due to X-Forwarded-For and co).
Thanks to the Jitsi team for highlighting this gap in the API.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 16 Feb 2023 15:59:26 +0000 |
parent | 10591:d78c5c9b0cf6 |
line wrap: on
line source
local json = require "util.json"; local array = require "util.array"; describe("util.json", function() describe("#encode()", function() it("should work", function() local function test(f, j, e) if e then assert.are.equal(f(j), e); end assert.are.equal(f(j), f(json.decode(f(j)))); end test(json.encode, json.null, "null") test(json.encode, {}, "{}") test(json.encode, {a=1}); test(json.encode, {a={1,2,3}}); test(json.encode, {1}, "[1]"); end); end); describe("#decode()", function() it("should work", function() local empty_array = json.decode("[]"); assert.are.equal(type(empty_array), "table"); assert.are.equal(#empty_array, 0); assert.are.equal(next(empty_array), nil); end); end); describe("testcases", function() local valid_data = {}; local invalid_data = {}; local skip = "fail1.json fail9.json fail18.json fail15.json fail13.json fail25.json fail26.json fail27.json fail28.json fail17.json pass1.json"; setup(function() local lfs = require "lfs"; local path = "spec/json"; for name in lfs.dir(path) do if name:match("%.json$") then local f = assert(io.open(path.."/"..name)); local content = assert(f:read("*a")); assert(f:close()); if skip:find(name) then --luacheck: ignore 542 -- Skip elseif name:match("^pass") then valid_data[name] = content; elseif name:match("^fail") then invalid_data[name] = content; end end end end) it("should pass valid testcases", function() for name, content in pairs(valid_data) do local parsed, err = json.decode(content); assert(parsed, name..": "..tostring(err)); end end); it("should fail invalid testcases", function() for name, content in pairs(invalid_data) do local parsed, err = json.decode(content); assert(not parsed, name..": "..tostring(err)); end end); end) describe("util.array integration", function () it("works", function () assert.equal("[]", json.encode(array())); assert.equal("[1,2,3]", json.encode(array({1,2,3}))); assert.equal(getmetatable(array()), getmetatable(json.decode("[]"))); end); end); end);