chiark / gitweb /
TOML::Tiny::Faithful: Test local datetimes
[nailing-cargo.git] / t / faithful.t
1 use utf8;
2 use Test2::V0;
3 use Data::Dumper;
4 use DateTime;
5 use DateTime::Format::RFC3339;
6 use Math::BigInt;
7 use Math::BigFloat;
8 use TOML::Tiny::Faithful;
9
10 binmode STDIN,  ':encoding(UTF-8)';
11 binmode STDOUT, ':encoding(UTF-8)';
12
13 my $input = q{
14 datetime=2020-05-04T16:37:02.905408062+01:00
15 datetimes="2020-05-04T16:37:02.905408062+01:00"
16 float=3.14
17 floats="3.14"
18 uint=3
19 uints="3"
20 nint=-4
21 nints="-4"
22 bigint=1852528528562625752750
23 bigints="1852528528562625752750"
24 hex=0x12
25 oct=0o751
26 bin=0b11010110
27 boolf=false
28 boolt=true
29 boolfs="false"
30 boolts="true"
31 dtlocal=1979-05-27T00:32:00.643144312
32 dtlocals="1979-05-27T00:32:00.643144312"
33 };
34
35 sub norm ($) {
36   join "\n", (
37     sort
38     map {
39       s{=0o(\d+)$}{ '='.oct($1) }e;
40       s{=(0[xb]\w+)$}{ '='.eval($1) }e;
41       $_;
42     }
43     grep /./,
44     split /\n/, $_[0]
45   ), ''
46 }
47
48 my $parsed = from_toml($input);
49 my $actual = norm(to_toml($parsed));
50 my $expected = norm($input);
51
52 is($actual, $expected, 'round trip') or do{
53   diag 'EXPECTED:';
54   diag Dumper($expected);
55
56   diag 'ACTUAL:';
57   diag Dumper($actual);
58 };
59
60 done_testing;