Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: 'true'

- uses: hishamhm/gh-actions-lua@master
with:
luaVersion: "5.4"

- uses: luarocks/gh-actions-luarocks@master
with:
luaRocksVersion: "3.12.2"

- name: Build
run: "luarocks build"

- name: Test
run: "luarocks test"

4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@
path = spec/kdl-org
url = git@github.com:kdl-org/kdl
branch = kdl-v2
[submodule "spec/v1/kdl-org"]
path = spec/v1/kdl-org
url = git@github.com:kdl-org/kdl.git
branch = release/v1
9 changes: 6 additions & 3 deletions kdlua-dev-1.rockspec → kdlua-1.0.0-0.rockspec
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package = "kdlua"
version = "dev-1"
version = "1.0.0-0"
rockspec_format = "3.0"
source = {
url = "git://github.com/danini-the-pamini/kdlua"
Expand All @@ -20,7 +20,10 @@ build = {
["kdl.parser"] = "src/parser.lua",
["kdl.tokenizer"] = "src/tokenizer.lua",
["kdl.stringdumper"] = "src/stringdumper.lua",
["kdl.util"] = "src/util.lua"
["kdl.util"] = "src/util.lua",
["kdl.v1.parser"] = "src/v1/parser.lua",
["kdl.v1.tokenizer"] = "src/v1/tokenizer.lua",
["kdl.v1.util"] = "src/v1/util.lua"
}
}
test = {
Expand All @@ -31,4 +34,4 @@ dependencies = {
}
test_dependencies = {
"luafilesystem >= 1.8.0 < 2.0.0"
}
}
2 changes: 1 addition & 1 deletion spec/kdl-org
Submodule kdl-org updated 213 files
32 changes: 23 additions & 9 deletions spec/kdl_spec.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,25 @@
local lfs = require "lfs"
local kdl = require "kdl"
require "spec.support"

describe("kdl", function()
local lfs = require "lfs"
local kdl = require "kdl"
it("detects version", function()
-- parses either v1 or v2
assert.valid_kdl("node foo #true", "node foo #true")
assert.valid_kdl("node \"foo\" true", "node foo #true")

-- chooses parser based on version directive
assert.valid_kdl("/- kdl-version 1\nnode \"foo\" true", "node foo #true")
assert.valid_kdl("/- kdl-version 2\nnode foo #true", "node foo #true")

-- fails parsing if syntax does not match version directive
assert.is_not.valid_kdl("/- kdl-version 1\nnode foo #true", "Expected EQUALS, got WS (2:9)")
assert.is_not.valid_kdl("/- kdl-version 2\nnode \"foo\" true", "Identifier cannot be a literal (2:12)")

-- fails parsing mixed syntax
assert.is_not.valid_kdl("node foo true", "Expected EQUALS, got WS (1:9)")
assert.is_not.valid_kdl("node r\"foo\" #true", "Expected EQUALS, got EOF (1:18)")
end)

local function exists(name)
local f=io.open(name,"r")
Expand All @@ -14,23 +33,18 @@ describe("kdl", function()
return s
end

local function parse(str)
local ok, r = xpcall(kdl.parse_document, debug.traceback, str)
if ok then return r else error(r) end
end

local TEST_CASES = "spec/kdl-org/tests/test_cases"
for file in lfs.dir(TEST_CASES.."/input") do
if file ~= "." and file ~= ".." then
local input = TEST_CASES.."/input/"..file
local expected = TEST_CASES.."/expected_kdl/"..file
if exists(expected) then
it("parses "..input, function()
assert.equals(readfile(expected), tostring(parse(readfile(input))))
assert.valid_kdl(readfile(input), readfile(expected), 2)
end)
else
it("does not parse "..input, function()
assert.has_error(function() kdl.parse_document(readfile(input)) end)
assert.is_not.valid_kdl(readfile(input), 2)
end)
end
end
Expand Down
710 changes: 389 additions & 321 deletions spec/parser_spec.lua

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions spec/support.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
local assert = require 'luassert.assert'
local util = require "luassert.util"
local say = require "say"
local kdl = require "kdl"

local function valid_kdl(state, args)
local expected = args[2]
local version = args[3]
args[3] = nil
args.nofmt = { true, true, true}
if not version and type(expected) == "number" then
version = expected
expected = nil
args[2] = nil
end
local success, result = pcall(kdl.parse_document, args[1], version)
local result_str = tostring(result)
if expected then
args[2] = tostring(expected)
if success then
table.insert(args, result_str)
if type(expected) == "string" then
if result_str == expected then return true end
local s, r = pcall(kdl.parse_document, expected, version)
if s then return util.deepcompare(result, r, true) end
return true
else
return util.deepcompare(result, expected, true) or
result_str == tostring(expected)
end
else
result_str = result_str:gsub('^.-:%d+: ', '', 1)
table.insert(args, result_str)
return result_str ~= tostring(expected)
end
else
if success then table.insert(args, "(error)")
else table.insert(args, "(no error)") end
table.insert(args, result_str)
end
return success
end

say:set("assertion.valid_kdl.positive", "Expected valid KDL.\nInput:\n%s\nExpected:\n%s\nActual:\n%s")
say:set("assertion.valid_kdl.negative", "Expected invalid KDL.\nInput:\n%s\nExpected:\n%s\nActual:\n%s")
assert:register("assertion", "valid_kdl", valid_kdl, "assertion.valid_kdl.positive", "assertion.valid_kdl.negative")
Loading
Loading