mirror of
https://github.com/bartbes/inifile.git
synced 2024-11-15 23:54:23 +00:00
Add tests
This commit is contained in:
parent
f0b41a8a92
commit
441ce4877e
313
inifile_spec.lua
Normal file
313
inifile_spec.lua
Normal file
@ -0,0 +1,313 @@
|
||||
local inifile = require "inifile"
|
||||
|
||||
local function parse(text)
|
||||
return inifile.parse(text, "memory")
|
||||
end
|
||||
|
||||
local function save(data)
|
||||
return inifile.save("dummy", data, "memory")
|
||||
end
|
||||
|
||||
describe("Parsing", function()
|
||||
it("returns data per section", function()
|
||||
local data = parse[==[
|
||||
[Test1]
|
||||
Some=Data
|
||||
|
||||
[Test2]
|
||||
Some=Other data
|
||||
]==]
|
||||
|
||||
assert.are.equal("Data", data.Test1.Some)
|
||||
assert.are.equal("Other data", data.Test2.Some)
|
||||
end)
|
||||
|
||||
it("detects numbers", function()
|
||||
local data = parse[==[
|
||||
[Test]
|
||||
Value1=3.14
|
||||
]==]
|
||||
|
||||
assert.are.equal(3.14, data.Test.Value1)
|
||||
assert.are.equal("number", type(data.Test.Value1))
|
||||
end)
|
||||
|
||||
it("detects booleans", function()
|
||||
local data = parse[==[
|
||||
[Test]
|
||||
Value1=true
|
||||
Value2=false
|
||||
]==]
|
||||
|
||||
assert.is_true(data.Test.Value1)
|
||||
assert.are.equal("boolean", type(data.Test.Value1))
|
||||
assert.is_false(data.Test.Value2)
|
||||
assert.are.equal("boolean", type(data.Test.Value2))
|
||||
end)
|
||||
|
||||
it("handles values with = signs", function()
|
||||
local data = parse[==[
|
||||
[Test]
|
||||
Value=some=data
|
||||
]==]
|
||||
|
||||
assert.are.equal("some=data", data.Test.Value)
|
||||
end)
|
||||
|
||||
it("supports reopening sections", function()
|
||||
local data = parse[==[
|
||||
[Test1]
|
||||
A=1
|
||||
|
||||
[Test2]
|
||||
A=2
|
||||
B=2
|
||||
|
||||
[Test1]
|
||||
B=3
|
||||
]==]
|
||||
|
||||
assert.are.equal(1, data.Test1.A)
|
||||
assert.are.equal(2, data.Test2.A)
|
||||
assert.are.equal(2, data.Test2.B)
|
||||
assert.are.equal(3, data.Test1.B)
|
||||
end)
|
||||
|
||||
it("returns no extra data", function()
|
||||
local data = parse[==[
|
||||
[Test]
|
||||
Some=data
|
||||
Other=data
|
||||
]==]
|
||||
|
||||
assert.are.equal("data", data.Test.Some)
|
||||
assert.are.equal("data", data.Test.Other)
|
||||
|
||||
for section in pairs(data) do
|
||||
assert.are.equal("Test", section)
|
||||
end
|
||||
|
||||
for key in pairs(data.Test) do
|
||||
assert.is_true(key == "Some" or key == "Other")
|
||||
end
|
||||
end)
|
||||
|
||||
it("ignores comments", function()
|
||||
local data = parse[==[
|
||||
; Comment outside of section
|
||||
[Test]
|
||||
; Comment at start of section
|
||||
Some=data
|
||||
; Comment in middle of section
|
||||
Other=data
|
||||
; Comment at the end
|
||||
]==]
|
||||
|
||||
assert.are.equal("data", data.Test.Some)
|
||||
assert.are.equal("data", data.Test.Other)
|
||||
|
||||
for section in pairs(data) do
|
||||
assert.are.equal("Test", section)
|
||||
end
|
||||
|
||||
for key in pairs(data.Test) do
|
||||
assert.is_true(key == "Some" or key == "Other")
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("Saving", function()
|
||||
it("writes all data types", function()
|
||||
local toStringable = setmetatable({}, {
|
||||
__tostring = function()
|
||||
return "using __tostring"
|
||||
end
|
||||
})
|
||||
|
||||
local randomTable = {}
|
||||
|
||||
local ini = save{
|
||||
Test = {
|
||||
string = "abc",
|
||||
number = 1.23,
|
||||
boolean = true,
|
||||
toStringable = toStringable,
|
||||
randomTable = randomTable,
|
||||
}
|
||||
}
|
||||
|
||||
local expected_lines = {
|
||||
"string=abc",
|
||||
"number=1.23",
|
||||
"boolean=true",
|
||||
"toStringable=using __tostring",
|
||||
"randomTable=" .. tostring(randomTable)
|
||||
}
|
||||
|
||||
-- Skip header
|
||||
ini = ini:match("^.-\n(.+)$")
|
||||
|
||||
-- Parse all lines into a table
|
||||
local ini_lines = {}
|
||||
for line in ini:gmatch("(.-)\n") do
|
||||
table.insert(ini_lines, line)
|
||||
end
|
||||
|
||||
-- Sort both, for equality
|
||||
table.sort(expected_lines)
|
||||
table.sort(ini_lines)
|
||||
assert.are.same(expected_lines, ini_lines)
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("Formatting", function()
|
||||
describe("preserves order and comments", function()
|
||||
it("without modifications", function()
|
||||
local input = [==[
|
||||
; Comment outside of section
|
||||
|
||||
[Section1]
|
||||
; Comment in section
|
||||
Some=Value
|
||||
|
||||
[Section2]
|
||||
Some=Other value
|
||||
Second=value
|
||||
]==]
|
||||
|
||||
local output = save(parse(input))
|
||||
assert.are.equal(input, output)
|
||||
end)
|
||||
|
||||
it("moving comments to the start of a section", function()
|
||||
local input = [==[
|
||||
[Section]
|
||||
; Comment at start
|
||||
Some=Value
|
||||
; Comment in middle
|
||||
Other=Value
|
||||
; Comment at end
|
||||
]==]
|
||||
|
||||
local expected = [==[
|
||||
[Section]
|
||||
; Comment at start
|
||||
; Comment in middle
|
||||
; Comment at end
|
||||
Some=Value
|
||||
Other=Value
|
||||
]==]
|
||||
|
||||
local output = save(parse(input))
|
||||
assert.are.equal(expected, output)
|
||||
end)
|
||||
|
||||
it("skipping removed values", function()
|
||||
local input = [==[
|
||||
[Section]
|
||||
D=1
|
||||
C=2
|
||||
B=3
|
||||
A=4
|
||||
]==]
|
||||
|
||||
local expected = [==[
|
||||
[Section]
|
||||
D=1
|
||||
C=2
|
||||
A=4
|
||||
]==]
|
||||
|
||||
local parsed = parse(input)
|
||||
parsed.Section.B = nil
|
||||
local output = save(parsed)
|
||||
assert.are.equal(expected, output)
|
||||
end)
|
||||
|
||||
it("skipping removed sections", function()
|
||||
local input = [==[
|
||||
[D]
|
||||
Value=1
|
||||
|
||||
[C]
|
||||
Value=2
|
||||
|
||||
[B]
|
||||
Value=3
|
||||
|
||||
[A]
|
||||
Value=4
|
||||
]==]
|
||||
|
||||
local expected = [==[
|
||||
[D]
|
||||
Value=1
|
||||
|
||||
[C]
|
||||
Value=2
|
||||
|
||||
[A]
|
||||
Value=4
|
||||
]==]
|
||||
|
||||
local parsed = parse(input)
|
||||
parsed.B = nil
|
||||
local output = save(parsed)
|
||||
assert.are.equal(expected, output)
|
||||
end)
|
||||
|
||||
it("appending added values", function()
|
||||
local input = [==[
|
||||
[Section]
|
||||
A=1
|
||||
C=3
|
||||
D=4
|
||||
]==]
|
||||
|
||||
local expected = [==[
|
||||
[Section]
|
||||
A=1
|
||||
C=3
|
||||
D=4
|
||||
B=2
|
||||
]==]
|
||||
|
||||
local parsed = parse(input)
|
||||
parsed.Section.B = 2
|
||||
local output = save(parsed)
|
||||
assert.are.equal(expected, output)
|
||||
end)
|
||||
|
||||
it("appending added sections", function()
|
||||
local input = [==[
|
||||
[D]
|
||||
Value=1
|
||||
|
||||
[C]
|
||||
Value=2
|
||||
|
||||
[A]
|
||||
Value=4
|
||||
]==]
|
||||
|
||||
local expected = [==[
|
||||
[D]
|
||||
Value=1
|
||||
|
||||
[C]
|
||||
Value=2
|
||||
|
||||
[A]
|
||||
Value=4
|
||||
|
||||
[B]
|
||||
Value=3
|
||||
]==]
|
||||
|
||||
local parsed = parse(input)
|
||||
parsed.B = { Value = 3 }
|
||||
local output = save(parsed)
|
||||
assert.are.equal(expected, output)
|
||||
end)
|
||||
end)
|
||||
end)
|
Loading…
Reference in New Issue
Block a user