1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 09:50:04 +08:00
SpaceVim/bundle/plenary.nvim/tests/plenary/json_spec.lua
2022-05-16 22:20:10 +08:00

71 lines
3.4 KiB
Lua

local json = require "plenary.json"
local eq = assert.are.same
describe("json", function()
it("replace comments with whitespace", function()
eq(json.json_strip_comments '//comment\n{"a":"b"}', ' \n{"a":"b"}')
eq(json.json_strip_comments '/*//comment*/{"a":"b"}', ' {"a":"b"}')
eq(json.json_strip_comments '{"a":"b"//comment\n}', '{"a":"b" \n}')
eq(json.json_strip_comments '{"a":"b"/*comment*/}', '{"a":"b" }')
eq(json.json_strip_comments '{"a"/*\n\n\ncomment\r\n*/:"b"}', '{"a" \n\n\n \r\n :"b"}')
eq(json.json_strip_comments '/*!\n * comment\n */\n{"a":"b"}', ' \n \n \n{"a":"b"}')
eq(json.json_strip_comments '{/*comment*/"a":"b"}', '{ "a":"b"}')
end)
it("remove comments", function()
local options = { whitespace = false }
eq(json.json_strip_comments('//comment\n{"a":"b"}', options), '\n{"a":"b"}')
eq(json.json_strip_comments('/*//comment*/{"a":"b"}', options), '{"a":"b"}')
eq(json.json_strip_comments('{"a":"b"//comment\n}', options), '{"a":"b"\n}')
eq(json.json_strip_comments('{"a":"b"/*comment*/}', options), '{"a":"b"}')
eq(json.json_strip_comments('{"a"/*\n\n\ncomment\r\n*/:"b"}', options), '{"a":"b"}')
eq(json.json_strip_comments('/*!\n * comment\n */\n{"a":"b"}', options), '\n{"a":"b"}')
eq(json.json_strip_comments('{/*comment*/"a":"b"}', options), '{"a":"b"}')
end)
it("doesn't strip comments inside strings", function()
eq(json.json_strip_comments '{"a":"b//c"}', '{"a":"b//c"}')
eq(json.json_strip_comments '{"a":"b/*c*/"}', '{"a":"b/*c*/"}')
eq(json.json_strip_comments '{"/*a":"b"}', '{"/*a":"b"}')
eq(json.json_strip_comments '{"\\"/*a":"b"}', '{"\\"/*a":"b"}')
end)
it("consider escaped slashes when checking for escaped string quote", function()
eq(json.json_strip_comments '{"\\\\":"https://foobar.com"}', '{"\\\\":"https://foobar.com"}')
eq(json.json_strip_comments '{"foo\\"":"https://foobar.com"}', '{"foo\\"":"https://foobar.com"}')
end)
it("line endings - no comments", function()
eq(json.json_strip_comments '{"a":"b"\n}', '{"a":"b"\n}')
eq(json.json_strip_comments '{"a":"b"\r\n}', '{"a":"b"\r\n}')
end)
it("line endings - single line comment", function()
eq(json.json_strip_comments '{"a":"b"//c\n}', '{"a":"b" \n}')
eq(json.json_strip_comments '{"a":"b"//c\r\n}', '{"a":"b" \r\n}')
end)
it("line endings - single line block comment", function()
eq(json.json_strip_comments '{"a":"b"/*c*/\n}', '{"a":"b" \n}')
eq(json.json_strip_comments '{"a":"b"/*c*/\r\n}', '{"a":"b" \r\n}')
end)
it("line endings - multi line block comment", function()
eq(json.json_strip_comments '{"a":"b",/*c\nc2*/"x":"y"\n}', '{"a":"b", \n "x":"y"\n}')
eq(json.json_strip_comments '{"a":"b",/*c\r\nc2*/"x":"y"\r\n}', '{"a":"b", \r\n "x":"y"\r\n}')
end)
it("line endings - works at EOF", function()
local options = { whitespace = false }
eq(json.json_strip_comments '{\r\n\t"a":"b"\r\n} //EOF', '{\r\n\t"a":"b"\r\n} ')
eq(json.json_strip_comments('{\r\n\t"a":"b"\r\n} //EOF', options), '{\r\n\t"a":"b"\r\n} ')
end)
it("handles weird escaping", function()
eq(
json.json_strip_comments [[{"x":"x \"sed -e \\\"s/^.\\\\{46\\\\}T//\\\" -e \\\"s/#033/\\\\x1b/g\\\"\""}]],
[[{"x":"x \"sed -e \\\"s/^.\\\\{46\\\\}T//\\\" -e \\\"s/#033/\\\\x1b/g\\\"\""}]]
)
end)
end)