Jacode
view release on metacpan or search on metacpan
t/9080_cheatsheets.t view on Meta::CPAN
if (opendir(DOC_DIR, $doc_dir)) {
@found = grep { /^jacode_cheatsheet\.[A-Z]{2}\.txt$/ } readdir(DOC_DIR);
closedir(DOC_DIR);
}
ok( scalar(@found) == $n_files,
"CS30 doc/ contains exactly $n_files jacode_cheatsheet.XX.txt files (found " . scalar(@found) . ")" );
}
#---------------------------------------------------------------------
# Per-file checks CS1-CS29
#---------------------------------------------------------------------
for my $lang (@LANG_CODES) {
my $fname = "jacode_cheatsheet.$lang.txt";
my $path = "$doc_dir/$fname";
#------------------------------------------------------------------
# CS2: filename pattern
#------------------------------------------------------------------
ok( $fname =~ /^jacode_cheatsheet\.[A-Z]{2}\.txt$/,
"$lang CS2 filename pattern jacode_cheatsheet.XX.txt" );
#------------------------------------------------------------------
# CS3: known language code
#------------------------------------------------------------------
my %known = map { $_ => 1 } @LANG_CODES;
ok( $known{$lang},
"$lang CS3 language code '$lang' is in known-languages list" );
#------------------------------------------------------------------
# Read file (binary for CS1, then UTF-8 decode for the rest)
#------------------------------------------------------------------
my $raw = '';
my $content = '';
my $file_ok = 0;
if (open(CS_FH, $path)) {
binmode(CS_FH);
local $/ = undef;
$raw = <CS_FH>;
close(CS_FH);
$file_ok = 1;
}
#------------------------------------------------------------------
# CS1: valid UTF-8 (no illegal byte sequences)
# Strategy: try to match the entire file as a sequence of valid
# UTF-8 code points. Works on Perl 5.005_03 without Encode.
#------------------------------------------------------------------
{
my $copy = $raw;
# Remove all valid UTF-8 sequences; anything left is invalid.
$copy =~ s/[\x00-\x7F]//g; # US-ASCII
$copy =~ s/[\xC2-\xDF][\x80-\xBF]//g; # 2-byte
$copy =~ s/[\xE0-\xEF][\x80-\xBF]{2}//g; # 3-byte
$copy =~ s/[\xF0-\xF4][\x80-\xBF]{3}//g; # 4-byte
ok( $file_ok && length($copy) == 0,
"$lang CS1 file is valid UTF-8" );
}
# Decode raw bytes as UTF-8 string for text checks
# (simple: treat as Latin-1 overlay; exact match strings are ASCII
# or will be embedded as UTF-8 literals in this source file)
$content = $raw;
#------------------------------------------------------------------
# CS4: header line 2 contains "(XX)"
#------------------------------------------------------------------
{
my @lines = split /\n/, $content;
my $line2 = defined($lines[1]) ? $lines[1] : '';
ok( $line2 =~ /\(\Q$lang\E\)/,
"$lang CS4 header line 2 contains ($lang)" );
}
#------------------------------------------------------------------
# CS5: metacpan URL
#------------------------------------------------------------------
ok( $content =~ m{metacpan\.org/dist/Jacode},
"$lang CS5 metacpan URL present" );
#------------------------------------------------------------------
# CS6: author credit
#------------------------------------------------------------------
ok( $content =~ /INABA Hitoshi/,
"$lang CS6 author 'INABA Hitoshi' present" );
#------------------------------------------------------------------
# CS7: author email
#------------------------------------------------------------------
ok( $content =~ /ina\.cpan\@gmail\.com/,
"$lang CS7 author email 'ina.cpan\@gmail.com' present" );
#------------------------------------------------------------------
# CS8: install command
#------------------------------------------------------------------
ok( $content =~ /cpanm Jacode/,
"$lang CS8 install command 'cpanm Jacode' present" );
#------------------------------------------------------------------
# CS9: use Jacode
#------------------------------------------------------------------
ok( $content =~ /use Jacode/,
"$lang CS9 'use Jacode' present" );
#------------------------------------------------------------------
# CS10: Jacode::convert
#------------------------------------------------------------------
ok( $content =~ /Jacode::convert/,
"$lang CS10 Jacode::convert present" );
#------------------------------------------------------------------
# CS11: Jacode::getcode
#------------------------------------------------------------------
ok( $content =~ /Jacode::getcode/,
"$lang CS11 Jacode::getcode present" );
#------------------------------------------------------------------
# CS12: Jacode::jis_inout
#------------------------------------------------------------------
ok( $content =~ /Jacode::jis_inout/,
"$lang CS12 Jacode::jis_inout present" );
( run in 1.227 second using v1.01-cache-2.11-cpan-df04353d9ac )