package tests::functional::I18NTest;
use strict;
use base qw/Lire::Test::FunctionalTestCase tests::functional::TestSchemaFixture/;
use Lire::Config;
use Lire::Config::Build qw/ac_info ac_path/;
use File::Basename qw/dirname/;
use File::Path qw/mkpath rmtree/;
use Lire::I18N;
use Lire::DlfStore;
use Lire::Config::SpecParser;
use Lire::Utils qw/file_content/;
use Time::Local;
use Cwd 'realpath';
use Carp;
#our @TESTS = qw//;
sub new {
my $self = shift->SUPER::new(@_);
$self->tests::functional::TestSchemaFixture::init();
$self->{'testsdir'} = realpath(dirname( __FILE__ ) . "/..");
$self->{'report_cfg'} = "$self->{'testsdir'}/data/test-utf8_cfg.xml";
$self->{'fr_LocaleData'} =
ac_info( 'LR_PERL5LIB' ) . "/LocaleData/fr/LC_MESSAGES";
return $self;
}
sub set_up {
my $self = $_[0];
$self->SUPER::set_up();
$self->set_up_test_schemas();
$self->set_up_test_specs();
$self->set_up_TestDlfConverter();
$self->set_up_test_analysers();
$self->set_up_test_store();
system( "cp $self->{'testsdir'}/po/fr.mo $self->{'fr_LocaleData'}/lire-test.mo" );
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
$self->tests::functional::TestSchemaFixture::tear_down();
unlink( $self->{'fr_LocaleData'} );
$self->locale( 'C' );
return;
}
sub set_up_i18n_import_job {
my ( $self, $cfg ) = @_;
my $job = $cfg->get( 'import_jobs' )->spec()->get( 'import_job' )->instance();
$cfg->get( 'import_jobs' )->append( $job );
$job->get( 'name' )->set( 'UTF8 Test' );
$job->get( 'period' )->set( 'daily' );
$job->get( 'service' )->set_plugin( 'test_newapi' );
$job->get( 'log_file' )->set( "$self->{'testsdir'}/data/test-utf8.dlf" );
$job->get( 'log_encoding' )->set( 'utf-8' );
return;
}
sub set_up_i18n_report_job {
my ( $self, $cfg ) = @_;
my $job = $cfg->get( 'report_jobs' )->spec()->get( 'report_job' )->instance();
$cfg->get( 'report_jobs' )->append( $job );
$job->get( 'name' )->set( 'i18n_test' );
my $sched = $job->get( 'schedules' )->spec()->get( 'schedule' )->instance();
$job->get( 'schedules' )->append( $sched );
$sched->get( 'period' )->set( 'daily' );
$sched->get( 'report_config' )->set( 'test_utf8' );
my $parser = new Lire::Config::SpecParser();
my $report_cfg = $parser->parsefile( $self->{'report_cfg'} )->get( 'test_utf8' )->instance();
$report_cfg->{'spec'} = $cfg->get( 'reports' )->spec()->get( 'report_cfg' );
$cfg->get( 'reports' )->append( $report_cfg );
return
}
# This validate the generation of XML reports in non-ASCII encoding.
# Log file is UTF-8
# Report configuration file is Latin1
# Report specification contains Latin1
sub test_report_with_encoding {
my $self = $_[0];
return unless $Lire::I18N::USE_ENCODING;
Lire::Config->init();
$self->locale( 'fr_CA.iso8859-1' );
# lr_cron is run the next day
my $time = timelocal( 0, 0, 3, 26, 0, 2003 );
my $store = Lire::DlfStore->open( $self->homedir() . "/a_test", 1 );
my $store_path = $store->path();
my $cfg = $store->config();
$self->set_up_i18n_import_job( $cfg );
$self->set_up_i18n_report_job( $cfg );
$cfg->save();
$store->close();
my $result = $self->lire_run( "lr_cron daily $store_path $time" );
$self->annotate( $result->stderr() );
$self->assert_num_equals( 0, $result->status() );
$self->assert( !$result->stdout(), "stdout should be empty" );
$self->assert_does_not_match( qr/ (crit|err|warning) /, $result->stderr(),
"There were warnings or error messages." );
my $report = "$store_path/daily_reports/i18n_test/200301/25.xml";
$self->assert( -f $report, "Report wasn't generated" );
$self->check_xml_report( "$self->{'testsdir'}/data/test-utf8.xml",
$report );
}
sub test_report_with_encoding_no_support {
my $self = $_[0];
return if $Lire::I18N::USE_ENCODING;
my $report_cfg = $self->rundir() . "/test.cfg";
$self->create_test_file( $report_cfg, <<NOENCODING_CFG );
=section Telechargements
user-downloads-utf8 users_to_show=5
NOENCODING_CFG
my $result = $self->lire_run( "lr_log2report -c $report_cfg -o xml test_newapi < $self->{'testsdir'}/data/test-utf8.dlf > report.xml" );
$self->annotate( $result->stderr() );
$self->assert_num_equals( 0, $result->status() );
$self->assert( !$result->stdout(), "stdout should be empty" );
$self->assert_does_not_match( qr/(ERROR|WARNING)/, $result->stderr(),
"There were warnings or error messages." );
$self->assert( -f $self->rundir() . "/report.xml",
"XML report wasn't created" );
$self->assert( -s $self->rundir() . "/report.xml",
"XML report is empty" );
$self->check_xml_report( "$self->{'testsdir'}/data/test-utf8-nosupport.xml",
$self->rundir() . "/report.xml" );
}
sub test_report_i18n {
my $self = $_[0];
$self->locale( 'fr_CA.iso8859-1' );
my $default_file =
ac_path( 'datadir', 'PACKAGE' ) . '/templates/test-l10n.xml';
$self->create_test_file( $default_file,
file_content( $self->tests_datadir() . "/test-l10n_cfg.xml" ) );
my $result = $self->lire_run( "lr_log2report --template test-l10n --output-format xml test_newapi $self->{'testsdir'}/data/test.dlf report.xml" );
$self->annotate( $result->stderr() );
$self->assert_num_equals( 0, $result->status() );
$self->assert( !$result->stdout(), "stdout should be empty" );
$self->assert_does_not_match( qr/(ERROR|WARNING)/, $result->stderr(),
"There were warnings or error messages." );
$self->assert( -f $self->rundir() . "/report.xml",
"XML report wasn't created" );
$self->assert( -s $self->rundir() . "/report.xml",
"XML report is empty" );
$self->check_xml_report( "$self->{'testsdir'}/data/test-l10n.xml",
$self->rundir() . "/report.xml" );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1