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 )