334 lines
8.1 KiB
Plaintext
334 lines
8.1 KiB
Plaintext
|
module Test_Toml =
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
String value *)
|
||
|
test Toml.norec get "\"foo\"" = { "string" = "foo" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Integer value *)
|
||
|
test Toml.norec get "42" = { "integer" = "42" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Positive integer value *)
|
||
|
test Toml.norec get "+42" = { "integer" = "+42" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Negative integer value *)
|
||
|
test Toml.norec get "-42" = { "integer" = "-42" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Large integer value *)
|
||
|
test Toml.norec get "5_349_221" = { "integer" = "5_349_221" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Hexadecimal integer value *)
|
||
|
test Toml.norec get "0xDEADBEEF" = { "integer" = "0xDEADBEEF" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Octal integer value *)
|
||
|
test Toml.norec get "0o755" = { "integer" = "0o755" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Binary integer value *)
|
||
|
test Toml.norec get "0b11010110" = { "integer" = "0b11010110" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Float value *)
|
||
|
test Toml.norec get "3.14" = { "float" = "3.14" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Positive float value *)
|
||
|
test Toml.norec get "+3.14" = { "float" = "+3.14" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Negative float value *)
|
||
|
test Toml.norec get "-3.14" = { "float" = "-3.14" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Complex float value *)
|
||
|
test Toml.norec get "-3_220.145_223e-34" = { "float" = "-3_220.145_223e-34" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Inf float value *)
|
||
|
test Toml.norec get "-inf" = { "float" = "-inf" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Nan float value *)
|
||
|
test Toml.norec get "-nan" = { "float" = "-nan" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Bool value *)
|
||
|
test Toml.norec get "true" = { "bool" = "true" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Datetime value *)
|
||
|
test Toml.norec get "1979-05-27T07:32:00Z" =
|
||
|
{ "datetime" = "1979-05-27T07:32:00Z" }
|
||
|
test Toml.norec get "1979-05-27 07:32:00.999999" =
|
||
|
{ "datetime" = "1979-05-27 07:32:00.999999" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Date value *)
|
||
|
test Toml.norec get "1979-05-27" =
|
||
|
{ "date" = "1979-05-27" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Time value *)
|
||
|
test Toml.norec get "07:32:00" =
|
||
|
{ "time" = "07:32:00" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
String value with newline *)
|
||
|
test Toml.norec get "\"bar\nbaz\"" =
|
||
|
{ "string" = "bar\nbaz" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Multiline value *)
|
||
|
test Toml.norec get "\"\"\"\nbar\nbaz\n \"\"\"" =
|
||
|
{ "string_multi" = "bar\nbaz" }
|
||
|
|
||
|
(* Test: Toml.norec
|
||
|
Literal string value *)
|
||
|
test Toml.norec get "'bar\nbaz'" =
|
||
|
{ "string_literal" = "bar\nbaz" }
|
||
|
|
||
|
(* Test: Toml.array_norec
|
||
|
Empty array *)
|
||
|
test Toml.array_norec get "[ ]" =
|
||
|
{ "array" {} }
|
||
|
|
||
|
(* Test: Toml.array_norec
|
||
|
Array of strings *)
|
||
|
test Toml.array_norec get "[ \"foo\", \"bar\" ]" =
|
||
|
{ "array" {}
|
||
|
{ "string" = "foo" } {}
|
||
|
{ "string" = "bar" } {} }
|
||
|
|
||
|
(* Test: Toml.array_norec
|
||
|
Array of arrays *)
|
||
|
test Toml.array_rec get "[ [ \"foo\", [ 42, 43 ] ], \"bar\" ]" =
|
||
|
{ "array" {}
|
||
|
{ "array" {}
|
||
|
{ "string" = "foo" } {}
|
||
|
{ "array" {}
|
||
|
{ "integer" = "42" } {}
|
||
|
{ "integer" = "43" } {} } {} } {}
|
||
|
{ "string" = "bar" } {} }
|
||
|
|
||
|
(* Test: Toml.lns
|
||
|
Global parameters *)
|
||
|
test Toml.lns get "# Globals
|
||
|
foo = \"bar\"\n" =
|
||
|
{ "#comment" = "Globals" }
|
||
|
{ "entry" = "foo" { "string" = "bar" } }
|
||
|
|
||
|
(* Test: Toml.lns
|
||
|
Simple section/value *)
|
||
|
test Toml.lns get "[foo]
|
||
|
bar = \"baz\"\n" =
|
||
|
{ "table" = "foo" { "entry" = "bar" { "string" = "baz" } } }
|
||
|
|
||
|
(* Test: Toml.lns
|
||
|
Subsections *)
|
||
|
test Toml.lns get "[foo]
|
||
|
title = \"bar\"
|
||
|
[foo.one]
|
||
|
hello = \"world\"\n" =
|
||
|
{ "table" = "foo"
|
||
|
{ "entry" = "title" { "string" = "bar" } } }
|
||
|
{ "table" = "foo.one"
|
||
|
{ "entry" = "hello" { "string" = "world" } } }
|
||
|
|
||
|
(* Test: Toml.lns
|
||
|
Nested subsections *)
|
||
|
test Toml.lns get "[foo]
|
||
|
[foo.one]
|
||
|
[foo.one.two]
|
||
|
bar = \"baz\"\n" =
|
||
|
{ "table" = "foo" }
|
||
|
{ "table" = "foo.one" }
|
||
|
{ "table" = "foo.one.two"
|
||
|
{ "entry" = "bar" { "string" = "baz" } } }
|
||
|
|
||
|
(* Test: Toml.lns
|
||
|
Arrays of tables *)
|
||
|
test Toml.lns get "[[products]]
|
||
|
name = \"Hammer\"
|
||
|
sku = 738594937
|
||
|
|
||
|
[[products]]
|
||
|
|
||
|
[[products]]
|
||
|
name = \"Nail\"
|
||
|
sku = 284758393
|
||
|
color = \"gray\"\n" =
|
||
|
{ "@table" = "products"
|
||
|
{ "entry" = "name"
|
||
|
{ "string" = "Hammer" } }
|
||
|
{ "entry" = "sku"
|
||
|
{ "integer" = "738594937" } }
|
||
|
{ }
|
||
|
}
|
||
|
{ "@table" = "products"
|
||
|
{ }
|
||
|
}
|
||
|
{ "@table" = "products"
|
||
|
{ "entry" = "name"
|
||
|
{ "string" = "Nail" } }
|
||
|
{ "entry" = "sku"
|
||
|
{ "integer" = "284758393" } }
|
||
|
{ "entry" = "color"
|
||
|
{ "string" = "gray" } }
|
||
|
}
|
||
|
|
||
|
(* Test: Toml.entry
|
||
|
Empty inline table *)
|
||
|
test Toml.entry get "name = { }\n" =
|
||
|
{ "entry" = "name"
|
||
|
{ "inline_table"
|
||
|
{ } } }
|
||
|
|
||
|
(* Test: Toml.entry
|
||
|
Inline table *)
|
||
|
test Toml.entry get "name = { first = \"Tom\", last = \"Preston-Werner\" }\n" =
|
||
|
{ "entry" = "name"
|
||
|
{ "inline_table" {}
|
||
|
{ "entry" = "first"
|
||
|
{ "string" = "Tom" } } {}
|
||
|
{ "entry" = "last"
|
||
|
{ "string" = "Preston-Werner" } } {} } }
|
||
|
|
||
|
(* Test: Toml.entry
|
||
|
Array value in inline_table *)
|
||
|
test Toml.entry get "foo = { bar = [\"baz\"] }\n" =
|
||
|
{ "entry" = "foo"
|
||
|
{ "inline_table" {}
|
||
|
{ "entry" = "bar"
|
||
|
{ "array"
|
||
|
{ "string" = "baz" } } } {} } }
|
||
|
|
||
|
|
||
|
(* Variable: example
|
||
|
The example from https://github.com/mojombo/toml *)
|
||
|
let example = "# This is a TOML document. Boom.
|
||
|
|
||
|
title = \"TOML Example\"
|
||
|
|
||
|
[owner]
|
||
|
name = \"Tom Preston-Werner\"
|
||
|
organization = \"GitHub\"
|
||
|
bio = \"GitHub Cofounder & CEO\nLikes tater tots and beer.\"
|
||
|
dob = 1979-05-27T07:32:00Z # First class dates? Why not?
|
||
|
|
||
|
[database]
|
||
|
server = \"192.168.1.1\"
|
||
|
ports = [ 8001, 8001, 8002 ]
|
||
|
connection_max = 5000
|
||
|
enabled = true
|
||
|
|
||
|
[servers]
|
||
|
|
||
|
# You can indent as you please. Tabs or spaces. TOML don't care.
|
||
|
[servers.alpha]
|
||
|
ip = \"10.0.0.1\"
|
||
|
dc = \"eqdc10\"
|
||
|
|
||
|
[servers.beta]
|
||
|
ip = \"10.0.0.2\"
|
||
|
dc = \"eqdc10\"
|
||
|
country = \"中国\" # This should be parsed as UTF-8
|
||
|
|
||
|
[clients]
|
||
|
data = [ [\"gamma\", \"delta\"], [1, 2] ] # just an update to make sure parsers support it
|
||
|
|
||
|
# Line breaks are OK when inside arrays
|
||
|
hosts = [
|
||
|
\"alpha\",
|
||
|
\"omega\"
|
||
|
]
|
||
|
|
||
|
# Products
|
||
|
|
||
|
[[products]]
|
||
|
name = \"Hammer\"
|
||
|
sku = 738594937
|
||
|
|
||
|
[[products]]
|
||
|
name = \"Nail\"
|
||
|
sku = 284758393
|
||
|
color = \"gray\"
|
||
|
"
|
||
|
|
||
|
test Toml.lns get example =
|
||
|
{ "#comment" = "This is a TOML document. Boom." } { }
|
||
|
{ "entry" = "title"
|
||
|
{ "string" = "TOML Example" } } { }
|
||
|
{ "table" = "owner"
|
||
|
{ "entry" = "name"
|
||
|
{ "string" = "Tom Preston-Werner" } }
|
||
|
{ "entry" = "organization"
|
||
|
{ "string" = "GitHub" } }
|
||
|
{ "entry" = "bio"
|
||
|
{ "string" = "GitHub Cofounder & CEO
|
||
|
Likes tater tots and beer." }
|
||
|
}
|
||
|
{ "entry" = "dob"
|
||
|
{ "datetime" = "1979-05-27T07:32:00Z" }
|
||
|
{ "#comment" = "First class dates? Why not?" } } { } }
|
||
|
{ "table" = "database"
|
||
|
{ "entry" = "server"
|
||
|
{ "string" = "192.168.1.1" } }
|
||
|
{ "entry" = "ports"
|
||
|
{ "array" { }
|
||
|
{ "integer" = "8001" } { }
|
||
|
{ "integer" = "8001" } { }
|
||
|
{ "integer" = "8002" } { } } }
|
||
|
{ "entry" = "connection_max"
|
||
|
{ "integer" = "5000" } }
|
||
|
{ "entry" = "enabled"
|
||
|
{ "bool" = "true" } } { } }
|
||
|
{ "table" = "servers" { }
|
||
|
{ "#comment" = "You can indent as you please. Tabs or spaces. TOML don't care." } }
|
||
|
{ "table" = "servers.alpha"
|
||
|
{ "entry" = "ip"
|
||
|
{ "string" = "10.0.0.1" } }
|
||
|
{ "entry" = "dc"
|
||
|
{ "string" = "eqdc10" } } { } }
|
||
|
{ "table" = "servers.beta"
|
||
|
{ "entry" = "ip"
|
||
|
{ "string" = "10.0.0.2" } }
|
||
|
{ "entry" = "dc"
|
||
|
{ "string" = "eqdc10" } }
|
||
|
{ "entry" = "country"
|
||
|
{ "string" = "中国" }
|
||
|
{ "#comment" = "This should be parsed as UTF-8" } } { } }
|
||
|
{ "table" = "clients"
|
||
|
{ "entry" = "data"
|
||
|
{ "array" { }
|
||
|
{ "array"
|
||
|
{ "string" = "gamma" } { }
|
||
|
{ "string" = "delta" } } { }
|
||
|
{ "array"
|
||
|
{ "integer" = "1" } { }
|
||
|
{ "integer" = "2" } } { } }
|
||
|
{ "#comment" = "just an update to make sure parsers support it" } } { }
|
||
|
{ "#comment" = "Line breaks are OK when inside arrays" }
|
||
|
{ "entry" = "hosts"
|
||
|
{ "array" { }
|
||
|
{ "string" = "alpha" } { }
|
||
|
{ "string" = "omega" } { } } } { }
|
||
|
{ "#comment" = "Products" } { } }
|
||
|
{ "@table" = "products"
|
||
|
{ "entry" = "name"
|
||
|
{ "string" = "Hammer" } }
|
||
|
{ "entry" = "sku"
|
||
|
{ "integer" = "738594937" } } { } }
|
||
|
{ "@table" = "products"
|
||
|
{ "entry" = "name"
|
||
|
{ "string" = "Nail" } }
|
||
|
{ "entry" = "sku"
|
||
|
{ "integer" = "284758393" } }
|
||
|
{ "entry" = "color"
|
||
|
{ "string" = "gray" } } }
|
||
|
|