Software /
code /
prosody
File
spec/util_json_spec.lua @ 13146:771eb453e03a
util.sqlite3: Deduplicate query methods
There were 3 very similar methods:
- :execute()
- :execute_query()
- :execute_update()
The first one returns the prepared statement and is mainly used
internally in the library for CREATE statements.
The later two only really differ in how the results are returned.
Those two are one main method and one small one that only picks out the
iterator.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 10 Jun 2023 22:02:15 +0200 |
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);