Skip to content

Commit

Permalink
Use locale pragma instead of POSIX::set_locale()
Browse files Browse the repository at this point in the history
The Pragma is more likely to do the right thing, as confirmed by new
tests, which fail with the use of the French locale when using
`set_locale` and now succeed with `use locale`.

Resolves #806.
  • Loading branch information
theory committed Dec 30, 2023
1 parent 7edc536 commit e3d3828
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 9 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/os.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
with: { perl-version: latest }
with: { perl-version: '5.34' }
- run: perl -V
- name: Cache CPAN Modules
uses: actions/cache@v3
Expand Down
3 changes: 3 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Revision history for Perl extension App::Sqitch
(#795)!
- Fixed Oracle and Firebird test failures due to incorrect use of `chmod`.
Thanks to Slaven Rezić for the report and the fix (#807)!
- Updated the locale configuration to fix issues in more recent versions
of Perl, and added tests to ensure that the sqitch CLI executes and
properly emits localized messages.

1.4.0 2023-08-01T23:37:30Z
- Fixed Snowflake warehouse and role setup to properly quote identifiers
Expand Down
7 changes: 3 additions & 4 deletions bin/sqitch
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#!perl -w -CAS

# VERSION
use POSIX qw(setlocale);
use locale;
BEGIN {
if ($^O eq 'MSWin32') {
require POSIX;
require Win32::Locale;
setlocale POSIX::LC_ALL, Win32::Locale::get_locale();
} else {
setlocale POSIX::LC_ALL, '';
POSIX::setlocale( POSIX::LC_ALL, Win32::Locale::get_locale() );
}
}
use App::Sqitch;
Expand Down
33 changes: 33 additions & 0 deletions t/cli.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/perl -w

use strict;
use warnings;
use 5.010;
use Test::More tests => 3;
use File::Spec;
use Capture::Tiny qw(:all);

# LANGUAGE=de_DE.UTF-8 perl -Ilib -CAS -I. bin/sqitch help
my @cli = (qw(-Ilib -CAS -I.), File::Spec->catfile(qw(bin sqitch)));

for my $tc (
{ lang => '', err => q{"nonesuch" is not a valid command} },
{ lang => 'en_US', err => q{"nonesuch" is not a valid command} },
{ lang => 'fr_FR', err => q{"nonesuch" n'est pas une commande valide} },
) {
subtest $tc->{lang} || 'default' => sub {
local $ENV{LANGUAGE} = "$tc->{lang}.UTF-8" if $tc->{lang};

# Test successful run.
my ($stdout, $stderr, $exit) = capture { system $^X, @cli, 'help' };
is $exit >> 8, 0, 'Should have exited normally';
like $stdout, qr/\AUsage\b/, 'Should have usage statement in STDOUT';
is $stderr, '', 'Should have no STDERR';

# Test localized error.
($stdout, $stderr, $exit) = capture { system $^X, @cli, 'nonesuch' };
is $stdout, '', 'Should have no STDOUT';
like $stderr, qr/\A\Q$tc->{err}/,
'Should have localized error message in STDERR';
};
}
7 changes: 3 additions & 4 deletions t/sqitch
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
#!/usr/bin/env perl -CAS

use POSIX qw(setlocale);
use locale;
BEGIN {
if ($^O eq 'MSWin32') {
require POSIX;
require Win32::Locale;
setlocale POSIX::LC_ALL, Win32::Locale::get_locale();
} else {
setlocale POSIX::LC_ALL, '';
POSIX::setlocale( POSIX::LC_ALL, Win32::Locale::get_locale() );
}
}
use FindBin;
Expand Down

0 comments on commit e3d3828

Please sign in to comment.