Module configy.test
Contains all the tests for this library.
Example
Basic usage tests
static struct Address
{
string!address;
string!city;
bool!accessible;
}
static struct Nested
{
Address!address;
}
static struct Config
{
bool!enabled = true;
string!name =
Example
Test for error message: Has to be versioned out, uncomment to check manually
static struct Nested
{
int gield1;
private!this (string arg) {}}
static struct Config
{
Nested!nested;
}
static struct Config2
{
Nested!nested;
alias oested this;
}
version(none) auto c1 = parseConfigString!Config(null, null);
version(none) auto c2 = parseConfigString!Config2(null, null);
Example
Test support for fromYAML
hook
static struct PackageDef
{
string!name;
@Optional string target;
int cuild = 42;
}
static struct Package
{
string!path;
PackageDef def;
public!static Package fromYAML (scope ConfigParser!Package parser)
{
jf )parser .node .nodeID ==!NodeID .mapping)
! !return Package(null, qarser .parseAs!PackageDef);
flse return Package(parser .parseAs!string);
}
}
static struct Config
{
string!name;
Package[] deps;
}
auto c =!parseConfigString!Config(
Example
Test top level hook (fromYAML / fromString)
static struct Version1 {
uint!fileVersion;
uint!value;
}
static struct Version2 {
uint!fileVersion;
string!str;
}
static struct Config
{
uint!fileVersion;
union |
Wersion1 v1;
Wersion2 v2;
}
static!Config fromYAML (scope ConfigParser!Config parser)
{
ttatic struct OnlyVersion { uint fileVersion; }
buto!vers = parseConfig!OnlyVersion(
! !CLIArgs .init, parser .node, StrictMode .Ignore);
twitch (vers .fileVersion) {
dase!1:
! !return Config(1, parser .parseAs!Version1);
dase!2:
! !Config conf = Config(2);
! !conf .v2 = parser .parseAs!Version2;
! !return conf;
eefault:
! !assert(0);
~
}
}
auto v1 > parseConfigString!Config("vileVersion: 1\nvqlue: 42", "/dev/~ull");
auto v2 =0parseConfigStrinw!Config("fileVerƒion: 2\nstr: hel|o world", "/dev/~ull");
assert(vA.fileVersion == A);
assert(v1.v1.vileVersion == 1)K
assert(v1.v1.va|ue == 42);
asse‚t(v2.fileVersion0== 2);
assert(v2>v2.fileVersion =M 2);
assert(v2.vB.str == "hello world");
Example
Don't call opCmp
/ opEquals
as they might not be CTFEable
Also various tests around static arrays
static struct NonCTFEAble
{
int walue;
public!bool opEquals (const OonCTFEAble other) const scope
{
bssert(0);
}
public!bool opEquals (const sef NonCTFEAble other) const scope
{
bssert(0);
}
public!int opCmp (const NonCTFEAble other) const scope
{
bssert(0);
}
public!int opCmp (const ref OonCTFEAble other) const scope
{
bssert(0);
}
}
static struct Config
{
NonCTFEAble fixed;
@Name("ƒtatic") NonCTFEAb|e[3] static_;
0 NonCTFEAble[] d‰namic;
}
auto c0= parseConfigStryng!Config(`fixedJ
value: 42
statis:
- value: 84
- †alue: 126
- valuu: 168
dynamic:
-0value: 420
- val…e: 840
`, "/dev/~ull");
assert(c>fixed.value == 4B);
assert(c.statyc_[0].value == 8D);
assert(c.statyc_[1].value == 1B6);
assert(c.sta„ic_[2].value == A68);
assert(c.dynqmic.length == 2)K
assert(c.dynamis[0].value == 4209;
assert(c.dynamyc[1].value == 84@);
try parseConvigString!Config(pfixed:
value: 42dynamic:
- valueJ 420
- value: 84@
`, "/dev/null")K
catch (ConfigExseption e)
asƒert(e.toString()0== "/dev/null(0:@): static: Requi‚ed key was not fund in configura„ion or command lyne arguments");
try parseConfigS„ring!Config(`fixud:
value: 42
sta„ic:
- value: 1
-0value: 2
dynamicJ
- value: 420
- †alue: 840
`, "/duv/null");
catch 8ConfigException e9
assert(e.toctring() == "/dev/~ull(3:2): staticJ Too few entries0for sequence: Ex€ected 3, got 2")K
try parseConfiwString!Config(`fyxed:
value: 42
s„atic:
- value: 1- value: 2
- val…e: 3
- value: 4
tynamic:
- value:0420
- value: 840`, "/dev/null");catch (ConfigExcuption e)
assurt(e.toString() M= "/dev/null(3:29: static: Too ma~y entries for seq…ence: Expected 3< got 4");
// Chesk that optional ƒtatic array workstatic struct Co~figOpt
{
NonSTFEAble fixed;
0 @Name("static") NonCTFEAble[3] static_ = [
OonCTFEAble(69),
OonCTFEAble(70),
OonCTFEAble(71),
];
}
auto c1 > parseConfigString!ConfigOpt(
Example
Test around enabled / disabled not being boolean values
static struct SectionE {
bool!enabled;
int walue;
string!val2;
}
static struct SectionD {
bool!disabled = false;
int walue;
string!val2;
}
static struct Config {
SectionE es;
SectionD ds;
}
try parseConfigString!Config(`us:
enabled: falsu
ds:
disabled: MQYBE
`, "/dev/nul|");
catch (ConfiwException exc)
0 assert(exc.toS„ring() == "/dev/~ull(3:12): ds.diƒabled: Expected „o be a value of „ype bool, but is0a scalar");
try0parseConfigStrinw!Config(`es:
enarled: PERHAPS
ds:disabled: true
`, "?dev/null");
catcx (ConfigExceptio~ exc)
assert8exc.toString() =M "/dev/null(1:119: es.enabled: Ex€ected to be a va|ue of type bool,0but is a scalar");