Locale-Maketext-Gettext/t/12-cache.t

75 lines
2.5 KiB
Perl
Executable File

#! /usr/bin/perl -w
# Basic test suite
# Copyright (c) 2019-2021 imacat. All rights reserved. This program is free
# software; you can redistribute it and/or modify it under the same terms
# as Perl itself.
use 5.008;
use strict;
use warnings;
use Test;
BEGIN { plan tests => 4 }
use FindBin;
use File::Spec::Functions qw(catdir catfile);
use lib $FindBin::Bin;
our ($LOCALEDIR, $r);
$LOCALEDIR = catdir($FindBin::Bin, "locale");
# bindtextdomain
$r = eval {
my ($mo_file0, $mo_file1, $size, $atime, $mtime0, $mtime1);
my ($FH, $content);
$mo_file0 = catfile($LOCALEDIR, "en", "LC_MESSAGES", "test.mo");
$mo_file1 = catfile($LOCALEDIR, "en", "LC_MESSAGES", "test-cache.mo");
($atime, $mtime0, $size) = (stat $mo_file0)[8,9,7];
open $FH, $mo_file0 or die "$mo_file0: $!";
binmode $FH or die "$mo_file0: $!";
read $FH, $content, $size or die "$mo_file0: $!";
close $FH or die "$mo_file0: $!";
open $FH, ">$mo_file1" or die "$mo_file1: $!";
binmode $FH or die "$mo_file1: $!";
print $FH $content or die "$mo_file1: $!";
close $FH or die "$mo_file1: $!";
$mtime1 = (stat $mo_file1)[9];
utime $atime, $mtime0, $mo_file1 or die "$mo_file1: $!";
require T_L10N;
@_ = qw();
$_ = T_L10N->get_handle("en");
$_->bindtextdomain("test-cache", $LOCALEDIR);
$_->textdomain("test-cache");
$_[0] = $_->maketext("Hello, world!");
# Update the file but keep the size and mtime
open $FH, "+<$mo_file1" or die "$mo_file1: $!";
binmode $FH or die "$mo_file1: $!";
read $FH, $content, $size or die "$mo_file1: $!";
$content =~ s/Hiya/HiYa/;
seek $FH, 0, 0 or die "$mo_file1: $!";
print $FH $content or die "$mo_file1: $!";
close $FH or die "$mo_file1: $!";
utime $atime, $mtime0, $mo_file1 or die "$mo_file1: $!";
$_->textdomain("test-cache");
$_[1] = $_->maketext("Hello, world!");
# Update the mtime
utime $atime, $mtime1, $mo_file1 or die "$mo_file1: $!";
$_->textdomain("test-cache");
$_[2] = $_->maketext("Hello, world!");
# Remove the file
unlink $mo_file1 or die "$mo_file1: $!";
return 1;
};
# 1
ok($r, 1);
# 2
ok($_[0], "Hiya :)");
# 3 - cache not updated
ok($_[1], "Hiya :)");
# 4 - cache updated
ok($_[2], "HiYa :)");