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
LICENSE AND COPYRIGHT
© 2021-2022 Michal Josef Špaček
BSD 2-Clause License
VERSION
0.04