File: Helper.pm

package info (click to toggle)
libjson-validator-perl 3.06%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 616 kB
  • sloc: perl: 1,308; makefile: 6
file content (58 lines) | stat: -rw-r--r-- 1,887 bytes parent folder | download
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
package t::Helper;
use Mojo::Base -base;

use Mojo::JSON 'encode_json';
use Mojo::Util 'monkey_patch';
use JSON::Validator;
use Test::More;

$ENV{TEST_VALIDATOR_CLASS} = 'JSON::Validator';

sub dump_validator {
  my $class = shift;
  my $jv = shift || $class->validator;
  local $Data::Dumper::Indent = 1;
  local $jv->{ua} = 'Mojo::UserAgent';
  Test::More::note(Data::Dumper::Dumper($jv));
}

sub edj {
  return Mojo::JSON::decode_json(Mojo::JSON::encode_json(@_));
}

sub joi_ok {
  my ($data, $joi, @expected) = @_;
  my $description ||= @expected ? "errors: @expected" : "valid: " . encode_json($data);
  my @errors = JSON::Validator::joi($data, $joi);
  Test::More::is_deeply([map { $_->TO_JSON } sort { $a->path cmp $b->path } @errors],
    [map { $_->TO_JSON } sort { $a->path cmp $b->path } @expected], $description)
    or Test::More::diag(encode_json(\@errors));
}

sub validate_ok {
  my ($data, $schema, @expected) = @_;
  my $description ||= @expected ? "errors: @expected" : "valid: " . encode_json($data);
  my @errors = validator()->schema($schema)->validate($data);
  Test::More::is_deeply([map { $_->TO_JSON } sort { $a->path cmp $b->path } @errors],
    [map { $_->TO_JSON } sort { $a->path cmp $b->path } @expected], $description)
    or Test::More::diag(encode_json(\@errors));
}

sub validator { state $obj = $ENV{TEST_VALIDATOR_CLASS}->new }

sub import {
  my $class  = shift;
  my $caller = caller;

  strict->import;
  warnings->import;
  monkey_patch $caller => E            => \&JSON::Validator::E;
  monkey_patch $caller => done_testing => \&Test::More::done_testing;
  monkey_patch $caller => false        => \&Mojo::JSON::false;
  monkey_patch $caller => edj          => \&edj;
  monkey_patch $caller => true         => \&Mojo::JSON::true;
  monkey_patch $caller => validate_ok  => \&validate_ok;
  monkey_patch $caller => joi_ok       => \&joi_ok;
}

1;