summaryrefslogtreecommitdiff
path: root/Data/Libraries/Penlight/tests/test-config.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/Libraries/Penlight/tests/test-config.lua')
-rw-r--r--Data/Libraries/Penlight/tests/test-config.lua320
1 files changed, 320 insertions, 0 deletions
diff --git a/Data/Libraries/Penlight/tests/test-config.lua b/Data/Libraries/Penlight/tests/test-config.lua
new file mode 100644
index 0000000..13fc1ac
--- /dev/null
+++ b/Data/Libraries/Penlight/tests/test-config.lua
@@ -0,0 +1,320 @@
+local config = require 'pl.config'
+local stringio = require 'pl.stringio'
+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})
+
+-- convert strings to booleans
+testconfig ([[
+alpha.dog=false
+alpha.cat=true
+; comment here
+]],{
+ alpha_dog=false,
+ alpha_cat=true
+},{convert_boolean=true})
+
+-- 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}
+)
+
+-- Linux procfs 'files' often use ':' as the key/pair separator;
+-- a custom convert_numbers handles the units properly!
+-- Here is the first two lines from /proc/meminfo
+testconfig([[
+MemTotal: 1024748 kB
+MemFree: 220292 kB
+]],
+{ MemTotal = 1024748, MemFree = 220292 },
+{
+ keysep = ':',
+ convert_numbers = function(s)
+ s = s:gsub(' kB$','')
+ return tonumber(s)
+ end
+ }
+)
+
+-- 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
+ }
+})
+
+--- new with 1.0.3: smart configuration file reading
+-- handles a number of common Unix file formats automatically
+
+function smart(f)
+ f = stringio.open(f)
+ return config.read(f,{smart=true})
+end
+
+-- /etc/fstab
+asserteq (smart[[
+# /etc/fstab: static file system information.
+#
+# Use 'blkid -o value -s UUID' to print the universally unique identifier
+# for a device; this may be used with UUID= as a more robust way to name
+# devices that works even if disks are added and removed. See fstab(5).
+#
+# <file system> <mount point> <type> <options> <dump> <pass>
+proc /proc proc nodev,noexec,nosuid 0 0
+/dev/sdb2 / ext2 errors=remount-ro 0 1
+/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
+]],{
+ proc = {
+ "/proc",
+ "proc",
+ "nodev,noexec,nosuid",
+ 0,
+ 0
+ },
+ ["/dev/sdb2"] = {
+ "/",
+ "ext2",
+ "errors=remount-ro",
+ 0,
+ 1
+ },
+ ["/dev/fd0"] = {
+ "/media/floppy0",
+ "auto",
+ "rw,user,noauto,exec,utf8",
+ 0,
+ 0
+ }
+})
+
+-- /proc/XXXX/status
+asserteq (smart[[
+Name: bash
+State: S (sleeping)
+Tgid: 30071
+Pid: 30071
+PPid: 1587
+TracerPid: 0
+Uid: 1000 1000 1000 1000
+Gid: 1000 1000 1000 1000
+FDSize: 256
+Groups: 4 20 24 46 105 119 122 1000
+VmPeak: 6780 kB
+VmSize: 6716 kB
+]],{
+ Pid = 30071,
+ VmSize = 6716,
+ PPid = 1587,
+ Tgid = 30071,
+ State = "S (sleeping)",
+ Uid = "1000 1000 1000 1000",
+ Name = "bash",
+ Gid = "1000 1000 1000 1000",
+ Groups = "4 20 24 46 105 119 122 1000",
+ FDSize = 256,
+ VmPeak = 6780,
+ TracerPid = 0
+})
+
+-- ssh_config
+asserteq (smart[[
+Host *
+# ForwardAgent no
+# ForwardX11 no
+# Tunnel no
+# TunnelDevice any:any
+# PermitLocalCommand no
+# VisualHostKey no
+ SendEnv LANG LC_*
+ HashKnownHosts yes
+ GSSAPIAuthentication yes
+ GSSAPIDelegateCredentials no
+]],{
+ Host = "*",
+ GSSAPIAuthentication = "yes",
+ SendEnv = "LANG LC_*",
+ HashKnownHosts = "yes",
+ GSSAPIDelegateCredentials = "no"
+})
+
+-- updatedb.conf
+asserteq (smart[[
+PRUNE_BIND_MOUNTS="yes"
+# PRUNENAMES=".git .bzr .hg .svn"
+PRUNEPATHS="/tmp /var/spool /media"
+PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"
+]],{
+ PRUNEPATHS = "/tmp /var/spool /media",
+ PRUNE_BIND_MOUNTS = "yes",
+ PRUNEFS = "NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"
+})