Test-JSON-0.11/0000755000076500007650000000000011237512137011621 5ustar ovidovidTest-JSON-0.11/Build.PL0000444000076500007650000000104511237512137013113 0ustar ovidoviduse strict; use Module::Build; my $builder = Module::Build->new( module_name => 'Test::JSON', license => 'perl', dist_author => 'Curtis "Ovid" Poe ', dist_version_from => 'lib/Test/JSON.pm', requires => { 'JSON::Any' => 1.20, 'Test::Differences' => 0.47, 'Test::Simple' => 0.62, 'Test::Tester' => 0.107, }, add_to_cleanup => ['Test-JSON-*'], create_makefile_pl => 'traditional', ); $builder->create_build_script(); Test-JSON-0.11/Changes0000444000076500007650000000214311237512137013112 0ustar ovidovidRevision history for Test-JSON 0.11 2009-08-09 Upgrade Test::Tester dependency to 0.107. This fixes an intermittant test failure identified by Eric Wilhelm in http://rt.cpan.org/Public/Bug/Display.html?id=48509 0.10 2009-07-03 Need dependency on JSON::Any 1.20 or greater. This resolves rt #32957 Inherit from Test::Builder::Module instead of rolling my own exporter. 0.07 2009-06-29 Ensure that we can run with subtests by not having Test::Builder->new at the top of the script. Bump up minimum version of JSON::Any to minimize bugs. 0.06 2007-12-29 Minor documentation updates. 0.05 2007-12-29 Converted to JSON::Any. 0.04 2007-12-29 Took out all support for versions of JSON prior to 2.0 due to installation bugs. 0.03 2007-12-29 Updated to work with JSON 2.0 or earlier. Thanks to Makamaka Hannyaharamitu for a preliminary patch. 0.02 2005-11-15 Updated the level setting in is_json() to reflect the correct level. 0.01 2005-11-12 Easy JSON testing. Test-JSON-0.11/lib/0000755000076500007650000000000011237512137012367 5ustar ovidovidTest-JSON-0.11/lib/Test/0000755000076500007650000000000011237512137013306 5ustar ovidovidTest-JSON-0.11/lib/Test/JSON.pm0000444000076500007650000001043211237512137014413 0ustar ovidovidpackage Test::JSON; use strict; use Carp; use Test::Differences; use JSON::Any; use base 'Test::Builder::Module'; our @EXPORT = qw/is_json is_valid_json/; =head1 NAME Test::JSON - Test JSON data =head1 VERSION Version 0.11 =cut our $VERSION = '0.11'; my $JSON = JSON::Any->new; =head1 SYNOPSIS use Test::JSON; is_valid_json $json, '... json is well formed'; is_json $json, $expected_json, '... and it matches what we expected'; =head1 EXPORT =over 4 =item * is_valid_json =item * is_json =back =head1 DESCRIPTION JavaScript Object Notation (JSON) is a lightweight data interchange format. L makes it easy to verify that you have built valid JSON and that it matches your expected output. See L for more information. =head1 TESTS =head2 is_valid_json is_valid_json $json, '... json is well formed'; Test passes if the string passed is valid JSON. =head2 is_json is_json $json, $expected_json, '... and it matches what we expected'; Test passes if the two JSON strings are valid JSON and evaluate to the same data structure. L is used to provide easy diagnostics of why the JSON structures did not match. For example: Failed test '... and identical JSON should match' in t/10testjson.t at line 14. +----+---------------------------+---------------------------+ | Elt|Got |Expected | +----+---------------------------+---------------------------+ | 0|{ |{ | | 1| bool => '1', | bool => '1', | | 2| description => bless( { | description => bless( { | | 3| value => undef | value => undef | | 4| }, 'JSON::NotString' ), | }, 'JSON::NotString' ), | | 5| id => '1', | id => '1', | * 6| name => 'foo' | name => 'fo' * | 7|} |} | +----+---------------------------+---------------------------+ =cut sub is_valid_json ($;$) { my ( $input, $test_name ) = @_; croak "usage: is_valid_json(input,test_name)" unless defined $input; eval { $JSON->decode($input) }; my $test = __PACKAGE__->builder; if ( my $error = $@ ) { $test->ok( 0, $test_name ); $test->diag("Input was not valid JSON:\n\n\t$error"); return; } else { $test->ok( 1, $test_name ); return 1; } } sub is_json ($$;$) { my ( $input, $expected, $test_name ) = @_; croak "usage: is_json(input,expected,test_name)" unless defined $input && defined $expected; my %json_for; foreach my $item ( [ input => $input ], [ expected => $expected ] ) { my $json = eval { $JSON->decode( $item->[1] ) }; my $test = __PACKAGE__->builder; if ( my $error = $@ ) { $test->ok( 0, $test_name ); $test->diag("$item->[0] was not valid JSON: $error"); return; } else { $json_for{ $item->[0] } = $json; } } local $Test::Builder::Level = $Test::Builder::Level + 1; eq_or_diff( $json_for{input}, $json_for{expected}, $test_name ); } =head1 AUTHOR Curtis "Ovid" Poe, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SEE ALSO This test module uses L and L. =head1 ACKNOWLEDGEMENTS The development of this module was sponsored by Kineticode, L, the leading provider of services for the Bricolage content management system, L. Thanks to Makamaka Hannyaharamitu C for a patch to make this work with JSON 2.0. Thanks to Stevan Little for suggesting a switch to L. This makes it easier for this module to work with whatever JSON module you have installed. =head1 COPYRIGHT & LICENSE Copyright 2005-2007 Curtis "Ovid" Poe, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; Test-JSON-0.11/Makefile.PL0000444000076500007650000000103511237512137013570 0ustar ovidovid# Note: this file was auto-generated by Module::Build::Compat version 0.32 use ExtUtils::MakeMaker; WriteMakefile ( 'INSTALLDIRS' => 'site', 'NAME' => 'Test::JSON', 'EXE_FILES' => [], 'VERSION_FROM' => 'lib/Test/JSON.pm', 'PREREQ_PM' => { 'Test::Differences' => '0.47', 'Test::Tester' => '0.107', 'Test::Simple' => '0.62', 'JSON::Any' => '1.2' } ) ; Test-JSON-0.11/MANIFEST0000444000076500007650000000023611237512137012751 0ustar ovidovidBuild.PL Changes lib/Test/JSON.pm MANIFEST META.yml # Will be created by "make dist" README t/00-load.t t/10testjson.t t/pod-coverage.t t/pod.t Makefile.PL Test-JSON-0.11/META.yml0000444000076500007650000000067011237512137013073 0ustar ovidovid--- name: Test-JSON version: 0.11 author: - 'Curtis "Ovid" Poe ' abstract: Test JSON data license: perl resources: license: ~ requires: JSON::Any: 1.2 Test::Differences: 0.47 Test::Simple: 0.62 Test::Tester: 0.107 provides: Test::JSON: file: lib/Test/JSON.pm version: 0.11 generated_by: Module::Build version 0.32 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.2.html version: 1.2 Test-JSON-0.11/README0000444000076500007650000000055711237512137012506 0ustar ovidovidTest-JSON This module allows for easy testing of JSON data. INSTALLATION To install this module, run the following commands: perl Build.PL ./Build ./Build test ./Build install COPYRIGHT AND LICENCE Copyright (C) 2005 Curtis "Ovid" Poe This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Test-JSON-0.11/t/0000755000076500007650000000000011237512137012064 5ustar ovidovidTest-JSON-0.11/t/00-load.t0000444000076500007650000000021411237512137013400 0ustar ovidovid#!perl -T use Test::More tests => 1; BEGIN { use_ok( 'Test::JSON' ); } diag( "Testing Test::JSON $Test::JSON::VERSION, Perl $], $^X" ); Test-JSON-0.11/t/10testjson.t0000444000076500007650000000301311237512137014256 0ustar ovidovid#!perl use Test::Tester; use Test::JSON; use Test::More tests => 36; my $json = '{"bool":1,"name":"foo","id":1,"description":null}'; my $good = '{"bool":1,"name":"foo","id":1,"description":null}'; my $desc = 'identical JSON should match'; check_test( sub { is_json $json, $good, $desc }, { ok => 1, name => $desc, }, $desc ); $good = '{"bool":1,"id":1,"name":"foo","description":null}'; $desc = 'attribute order should not matter'; check_test( sub { is_json $json, $good, $desc }, { ok => 1, name => $desc, }, $desc ); # "null" is misspelled my $invalid = '{"bool":1,"name":"fo","id":1,"description":nul}'; $desc = 'Invalid json should fail'; check_test( sub { is_json $json, $invalid, $desc }, { ok => 0, name => $desc, }, $desc ); # "fo" should be "foo" my $not_the_same = '{"bool":1,"name":"fo","id":1,"description":null}'; $desc = 'Different JSON should fail'; check_test( sub { is_json $json, $not_the_same, $desc }, { ok => 0, name => $desc, }, $desc ); $json = '{"bool":1,"name":"fo","id":1,"description":null}'; $desc = 'Valid JSON should succeed'; check_test( sub { is_valid_json $json, $desc }, { ok => 1, name => $desc, }, $desc ); $invalid = '{"bool":1,"name":"fo","id":1,"description":nul}'; $desc = 'Invalid JSON should fail'; check_test( sub { is_valid_json $invalid, $desc }, { ok => 0, name => $desc, }, $desc ); Test-JSON-0.11/t/pod-coverage.t0000444000076500007650000000025411237512137014623 0ustar ovidovid#!perl -T use Test::More; eval "use Test::Pod::Coverage 1.04"; plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" if $@; all_pod_coverage_ok(); Test-JSON-0.11/t/pod.t0000444000076500007650000000021411237512137013026 0ustar ovidovid#!perl -T use Test::More; eval "use Test::Pod 1.14"; plan skip_all => "Test::Pod 1.14 required for testing POD" if $@; all_pod_files_ok();