Added yajl_allow_json5 config flag, pass it around. Added -5 option to yajl_test and yajlTestConverter.pl
102 lines
2.3 KiB
Perl
Executable File
102 lines
2.3 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
#
|
|
# This script converts the parsing test cases from the yajl release tree
|
|
# into the yajlTestCases module as used by libCom/test/yajlTest.plt
|
|
#
|
|
# Re-do this conversion and commit after checking out a new version of yajl
|
|
# from https://github.com/lloyd/yajl as follows:
|
|
# $ cd <base>/src/libCom/test
|
|
# $ perl yajlTestConverter.pl /path/to/yajl
|
|
# The tests are saved into the file yajlTestCases.pm in the src/libCom/test
|
|
# directory which will be read by the yajlTest.t test script.
|
|
|
|
use Data::Dumper;
|
|
|
|
my $yajl = shift @ARGV
|
|
or die "Usage: $0 /path/to/yajl\n";
|
|
|
|
my @files = glob "$yajl/test/parsing/cases/*.json";
|
|
|
|
my $caseFile = 'yajlTestCases.pm';
|
|
|
|
my @cases;
|
|
|
|
for my $file (@files) {
|
|
$file =~ m|/([afn][5cgmp]_)?([^/]*)\.json$|;
|
|
my $allow = $1;
|
|
my $name = $2;
|
|
next if $name eq '';
|
|
|
|
my $case = { name => $name };
|
|
|
|
if ($allow eq 'a5_') {
|
|
$case->{opts} = ['-5'];
|
|
}
|
|
elsif ($allow eq 'ac_') {
|
|
$case->{opts} = ['-c'];
|
|
}
|
|
elsif ($allow eq 'ag_') {
|
|
$case->{opts} = ['-g'];
|
|
}
|
|
elsif ($allow eq 'am_') {
|
|
$case->{opts} = ['-m'];
|
|
}
|
|
elsif ($allow eq 'ap_') {
|
|
$case->{opts} = ['-p'];
|
|
}
|
|
else {
|
|
$case->{opts} = [];
|
|
}
|
|
|
|
my $input = slurp($file);
|
|
my @input = split "\n", $input;
|
|
push @input, '' if $input =~ m/\n$/;
|
|
$case->{input} = \@input;
|
|
|
|
my @gives = split "\n", slurp("$file.gold");
|
|
$case->{gives} = \@gives;
|
|
|
|
push @cases, $case;
|
|
}
|
|
|
|
# Configure Dumper() output
|
|
$Data::Dumper::Pad = ' ';
|
|
$Data::Dumper::Indent = 1;
|
|
$Data::Dumper::Useqq = 1;
|
|
$Data::Dumper::Quotekeys = 0;
|
|
$Data::Dumper::Sortkeys = sub { return ['name', 'opts', 'input', 'gives'] };
|
|
|
|
my $data = Dumper(\@cases);
|
|
|
|
open my $out, '>', $caseFile
|
|
or die "Can't open/create $caseFile: $@\n";
|
|
print $out <<"EOF";
|
|
# Parser test cases from https://github.com/lloyd/yajl
|
|
#
|
|
# This file is generated, DO NOT EDIT!
|
|
#
|
|
# See comments in yajlTestConverter.pl for instructions on
|
|
# how to regenerate this file from the original yajl sources.
|
|
|
|
sub cases {
|
|
my$data
|
|
return \@{\$VAR1};
|
|
}
|
|
|
|
1;
|
|
EOF
|
|
|
|
close $out
|
|
or die "Problem writing $caseFile: $@\n";
|
|
|
|
exit 0;
|
|
|
|
|
|
sub slurp {
|
|
my ($file) = @_;
|
|
open my $in, '<', $file
|
|
or die "Can't open file $file: $!\n";
|
|
my $contents = do { local $/; <$in> };
|
|
return $contents;
|
|
}
|