191 lines
3.1 KiB
Lua
191 lines
3.1 KiB
Lua
require 'pl'
|
|
asserteq = require 'pl.test'.asserteq
|
|
|
|
function testconfig(test,tbl,cfg)
|
|
local f = stringio.open(test)
|
|
local c = config.read(f,cfg)
|
|
f:close()
|
|
if not tbl then
|
|
print(pretty.write(c))
|
|
else
|
|
asserteq(c,tbl)
|
|
end
|
|
end
|
|
|
|
testconfig ([[
|
|
; comment 2 (an ini file)
|
|
[section!]
|
|
bonzo.dog=20,30
|
|
config_parm=here we go again
|
|
depth = 2
|
|
[another]
|
|
felix="cat"
|
|
]],{
|
|
section_ = {
|
|
bonzo_dog = { -- comma-sep values get split by default
|
|
20,
|
|
30
|
|
},
|
|
depth = 2,
|
|
config_parm = "here we go again"
|
|
},
|
|
another = {
|
|
felix = "\"cat\""
|
|
}
|
|
})
|
|
|
|
|
|
testconfig ([[
|
|
# this is a more Unix-y config file
|
|
fred = 1
|
|
alice = 2
|
|
home.dog = /bonzo/dog/etc
|
|
]],{
|
|
home_dog = "/bonzo/dog/etc", -- note the default is {variablilize = true}
|
|
fred = 1,
|
|
alice = 2
|
|
})
|
|
|
|
-- backspace line continuation works, thanks to config.lines function
|
|
testconfig ([[
|
|
foo=frodo,a,c,d, \
|
|
frank, alice, boyo
|
|
]],
|
|
{
|
|
foo = {
|
|
"frodo",
|
|
"a",
|
|
"c",
|
|
"d",
|
|
"frank",
|
|
"alice",
|
|
"boyo"
|
|
}
|
|
}
|
|
)
|
|
|
|
------ options to control default behaviour -----
|
|
|
|
-- want to keep key names as is!
|
|
testconfig ([[
|
|
alpha.dog=10
|
|
# comment here
|
|
]],{
|
|
["alpha.dog"]=10
|
|
},{variabilize=false})
|
|
|
|
-- don't convert strings to numbers
|
|
testconfig ([[
|
|
alpha.dog=10
|
|
; comment here
|
|
]],{
|
|
alpha_dog="10"
|
|
},{convert_numbers=false})
|
|
|
|
-- don't split comma-lists by setting the list delimiter to something else
|
|
testconfig ([[
|
|
extra=10,'hello',42
|
|
]],{
|
|
extra="10,'hello',42"
|
|
},{list_delim='@'})
|
|
|
|
-- Unix-style password file
|
|
testconfig([[
|
|
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
|
|
mail:x:8:8:mail:/var/mail:/bin/sh
|
|
news:x:9:9:news:/var/spool/news:/bin/sh
|
|
]],
|
|
{
|
|
{
|
|
"lp",
|
|
"x",
|
|
7,
|
|
7,
|
|
"lp",
|
|
"/var/spool/lpd",
|
|
"/bin/sh"
|
|
},
|
|
{
|
|
"mail",
|
|
"x",
|
|
8,
|
|
8,
|
|
"mail",
|
|
"/var/mail",
|
|
"/bin/sh"
|
|
},
|
|
{
|
|
"news",
|
|
"x",
|
|
9,
|
|
9,
|
|
"news",
|
|
"/var/spool/news",
|
|
"/bin/sh"
|
|
}
|
|
},
|
|
{list_delim=':'})
|
|
|
|
-- Unix updatedb.conf is in shell script form, but config.read
|
|
-- copes by extracting the variables as keys and the export
|
|
-- commands as the array part; there is an option to remove quotes
|
|
-- from values
|
|
testconfig([[
|
|
# Global options for invocations of find(1)
|
|
FINDOPTIONS='-ignore_readdir_race'
|
|
export FINDOPTIONS
|
|
]],{
|
|
"export FINDOPTIONS",
|
|
FINDOPTIONS = "-ignore_readdir_race"
|
|
},{trim_quotes=true})
|
|
|
|
-- Unix fstab format. No key/value assignments so use `ignore_assign`;
|
|
-- list values are separated by a number of spaces
|
|
testconfig([[
|
|
# <file system> <mount point> <type> <options> <dump> <pass>
|
|
proc /proc proc defaults 0 0
|
|
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
|
|
]],
|
|
{
|
|
{
|
|
"proc",
|
|
"/proc",
|
|
"proc",
|
|
"defaults",
|
|
0,
|
|
0
|
|
},
|
|
{
|
|
"/dev/sda1",
|
|
"/",
|
|
"ext3",
|
|
"defaults,errors=remount-ro",
|
|
0,
|
|
1
|
|
}
|
|
},
|
|
{list_delim='%s+',ignore_assign=true}
|
|
)
|
|
|
|
|
|
-- altho this works, rather use pl.data.read for this kind of purpose.
|
|
testconfig ([[
|
|
# this is just a set of comma-separated values
|
|
1000,444,222
|
|
44,555,224
|
|
]],{
|
|
{
|
|
1000,
|
|
444,
|
|
222
|
|
},
|
|
{
|
|
44,
|
|
555,
|
|
224
|
|
}
|
|
})
|
|
|
|
|
|
|