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 8500ea2
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 20 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/os.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
include:
- { icon: 🐧, os: ubuntu, name: Linux }
- { icon: 🍎, os: macos, name: macOS }
- { icon: 🪟, os: windows, name: Windows }
# - { icon: 🪟, os: windows, name: Windows }
name: ${{ matrix.icon }} ${{ matrix.name }}
runs-on: ${{ matrix.os }}-latest
steps:
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
11 changes: 1 addition & 10 deletions bin/sqitch
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
#!perl -w -CAS

# VERSION
use POSIX qw(setlocale);
BEGIN {
if ($^O eq 'MSWin32') {
require Win32::Locale;
setlocale POSIX::LC_ALL, Win32::Locale::get_locale();
} else {
setlocale POSIX::LC_ALL, '';
}
}
use locale;
use App::Sqitch;

exit App::Sqitch->go;
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} = $ENV{LC_ALL} = "$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';
};
}
10 changes: 1 addition & 9 deletions t/sqitch
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
#!/usr/bin/env perl -CAS

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

0 comments on commit 8500ea2

Please sign in to comment.