NAME

Test::JSON::Type - Test JSON data with types.

SYNOPSIS

use Test::JSON::Type;

cmp_json_types($json, $json_expected, $test_name);
is_json_type($json, $expected_type_hr, $test_name);

SUBROUTINES

cmp_json_types

cmp_json_types($json, $json_expected, $test_name);

This decodes $json and $json_expected JSON strings to Perl structure and return data type structure defined by Cpanel::JSON::XS::Type. And compare these structures, if are same.

Result is success or failure of this comparison. In case of failure print difference in test.

is_json_type

is_json_type($json, $expected_type_hr, $test_name);

This decoded $json JSON string to Perl structure and return data type structure defined by Cpanel::JSON::XS::Type. Compare this structure with $expected_type_hr, if are same.

Result is success or failure of this comparison. In case of failure print difference in test.

ERRORS

cmp_json_types():
        JSON string isn't valid.
                Error: %s
        JSON string to compare is required.
        Expected JSON string isn't valid.
                Error: %s
        Expected JSON string to compare is required.
is_json_type():
        JSON string isn't valid.
                Error: %s
        JSON string to compare is required.

EXAMPLE1

use strict;
use warnings;

use Test::JSON::Type;
use Test::More 'tests' => 2;

my $json_blank1 = '{}';
my $json_blank2 = '{}';
cmp_json_types($json_blank1, $json_blank2, 'Blank JSON strings.');

my $json_struct1 = <<'END';
{
  "bool": true,
  "float": 0.23,
  "int": 1,
  "null": null,
  "string": "bar"
}
END
my $json_struct2 = <<'END';
{
  "bool": false,
  "float": 1.23,
  "int": 2,
  "null": null,
  "string": "foo"
}
END
cmp_json_types($json_struct1, $json_struct2, 'Structured JSON strings.');

# Output:
# 1..2
# ok 1 - Blank JSON strings.
# ok 2 - Structured JSON strings.

EXAMPLE2

use strict;
use warnings;

use Test::JSON::Type;
use Test::More 'tests' => 1;

my $json_struct_err1 = <<'END';
{
  "int": 1,
  "string": "1"
}
END
my $json_struct_err2 = <<'END';
{
  "int": 1,
  "string": 1
}
END
cmp_json_types($json_struct_err1, $json_struct_err2, 'Structured JSON strings with error.');

# Output:
# 1..1
# not ok 1 - Structured JSON strings with error.
# #   Failed test 'Structured JSON strings with error.'
# #   at ./ex2.pl line 21.
# # +----+--------------------------------+-----------------------------+
# # | Elt|Got                             |Expected                     |
# # +----+--------------------------------+-----------------------------+
# # |   0|{                               |{                            |
# # |   1|  int => 'JSON_TYPE_INT',       |  int => 'JSON_TYPE_INT',    |
# # *   2|  string => 'JSON_TYPE_STRING'  |  string => 'JSON_TYPE_INT'  *
# # |   3|}                               |}                            |
# # +----+--------------------------------+-----------------------------+
# # Looks like you failed 1 test of 1.

EXAMPLE3

use strict;
use warnings;

use Test::JSON::Type;
use Test::More 'tests' => 1;

my $json_struct_err1 = <<'END';
{
  "int": 1,
  "array": ["1", 1]
}
END
my $json_struct_err2 = <<'END';
{
  "int": 1,
  "array": 1
}
END
cmp_json_types($json_struct_err1, $json_struct_err2, 'Structured JSON strings with error.');

# Output:
# 1..1
# not ok 1 - Structured JSON strings with error.
# #   Failed test 'Structured JSON strings with error.'
# #   at ./ex3.pl line 21.
# # +----+--------------------------+----+-----------------------------+
# # | Elt|Got                       | Elt|Expected                     |
# # +----+--------------------------+----+-----------------------------+
# # |   0|{                         |   0|{                            |
# # *   1|  array => [              *   1|  array => 'JSON_TYPE_INT',  *
# # *   2|    'JSON_TYPE_STRING',   *    |                             |
# # *   3|    'JSON_TYPE_INT'       *    |                             |
# # *   4|  ],                      *    |                             |
# # |   5|  int => 'JSON_TYPE_INT'  |   2|  int => 'JSON_TYPE_INT'     |
# # |   6|}                         |   3|}                            |
# # +----+--------------------------+----+-----------------------------+
# # Looks like you failed 1 test of 1.

EXAMPLE4

use strict;
use warnings;

use Cpanel::JSON::XS::Type;
use Test::JSON::Type;
use Test::More 'tests' => 2;

my $json_struct1 = <<'END';
{
  "bool": true,
  "float": 0.23,
  "int": 1,
  "null": null,
  "string": "bar"
}
END
my $json_struct2 = <<'END';
{
  "bool": false,
  "float": 1.23,
  "int": 2,
  "null": null,
  "string": "foo"
}
END
my $expected_type_hr = {
  'bool' => JSON_TYPE_BOOL,
  'float' => JSON_TYPE_FLOAT,
  'int' => JSON_TYPE_INT,
  'null' => JSON_TYPE_NULL,
  'string' => JSON_TYPE_STRING,
};
is_json_type($json_struct1, $expected_type_hr, 'Test JSON type #1.');
is_json_type($json_struct2, $expected_type_hr, 'Test JSON type #2.');

# Output:
# 1..2
# ok 1 - Test JSON type \#1.
# ok 2 - Test JSON type \#2.

EXAMPLE5

use strict;
use warnings;

use Cpanel::JSON::XS::Type;
use Test::JSON::Type;
use Test::More 'tests' => 2;

my $json_struct = <<'END';
{
  "array": [1,2,3]
}
END
my $expected_type1_hr = {
  'array' => json_type_arrayof(JSON_TYPE_INT),
};
my $expected_type2_hr = {
  'array' => [
    JSON_TYPE_INT,
    JSON_TYPE_INT,
    JSON_TYPE_INT,
  ],
};
is_json_type($json_struct, $expected_type1_hr, 'Test JSON type (multiple integers).');
is_json_type($json_struct, $expected_type2_hr, 'Test JSON type (three integers)');

# Output:
# 1..2
# ok 1 - Test JSON type (multiple integers).
# ok 2 - Test JSON type (three integers)

DEPENDENCIES

Cpanel::JSON::XS, Cpanel::JSON::XS::Type, English, Error::Pure, Readonly, Test::Builder::Module, Test::Differences.

SEE ALSO

Test::JSON

Test JSON data

Test::JSON::More

JSON Test Utility

REPOSITORY

https://github.com/michal-josef-spacek/Test-JSON-Type

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© 2021-2022 Michal Josef Špaček

BSD 2-Clause License

VERSION

0.04