File: basic.t

package info (click to toggle)
libstring-errf-perl 0.009-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 176 kB
  • sloc: perl: 328; makefile: 2
file content (101 lines) | stat: -rw-r--r-- 2,084 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
use strict;
use warnings;

use Test::More;

use Date::Format qw(time2str);
use JSON::MaybeXS;
use String::Errf
  errf => (),
  errf => { -as => 'errf_u', on_undef => sub { '((undef))' } },
  errf => { -as => 'errf_f', on_undef => sub {
    Carp::croak("undef passed to $_[1]{literal}") } };

sub errf_is {
  my ($format, $value, $want, $desc) = @_;

  my $have = errf($format, { x => $value });

  $desc ||= "$format <- $value ==> $want";
  is($have, $want, $desc);
}

my %local_time = (
  secs => 1280530906,
  full => '2010-07-30 19:01:46',
  time => '19:01:46',
  date => '2010-07-30',
);

my $tests = do {
  use autodie;
  my $json = do {
    open my $fh, '<', 't/tests.json';
    local $/;
    <$fh>;
  };

  decode_json($json);
};

my $skip_local = scalar(localtime 1280530906) ne 'Fri Jul 30 19:01:46 2010';

subtest "tests from json file" => sub {
  plan tests => 0 + @$tests;

  for my $test (@$tests) {
    # TOTALLY AWFUL HACK:
    local $TODO = 'figure out time zone tests'
      if $skip_local and $test->[1] == 1280530906 and $test->[0] !~ /UTC/;

    errf_is(@$test);
  }
};

subtest "misc. one-off tests" => sub {
  is(
    errf(
      "%{booze}s and %{mixer}s", {
      booze => 'gin',
      mixer => 'tonic',
    }),
    "gin and tonic",
    "gin and tonic",
  );

  {
    local $TODO = 'figure out time zone tests' if $skip_local;
    is(
      errf(
        "at %{lunch_time}t, %{user}s tried to eat %{dogs;hot dog}n",
        {
          user => 'rjbs',
          dogs => 5,
          lunch_time => $local_time{secs},
        },
      ),
      "at $local_time{full}, rjbs tried to eat 5 hot dogs",
      "simple test for %t, %s, %n",
    );
  }

  is(
    errf("There %{lights;is+are}N %{lights;light}n.", { lights => 1 }),
    "There is 1 light.",
    "some inflections",
  );
};

subtest "undef handling" => sub {
  is(
    errf_u("best pie: %{pie}s", { pie => undef }),
    "best pie: ((undef))",
  );

  my $error;
  eval { errf_f("this will die: %{foo}t", { foo => undef }); };
  $error = $@;
  like($error, qr/undef passed to %\{foo\}t/);
};

done_testing;