run/locale.t: silence shell warnings
authorDavid Mitchell <davem@iabyn.com>
Mon, 14 Apr 2014 14:26:18 +0000 (15:26 +0100)
committerDavid Mitchell <davem@iabyn.com>
Mon, 14 Apr 2014 14:37:17 +0000 (15:37 +0100)
A couple of tests do

    local $ENV{LC_ALL} = "invalid";
    fresh_perl_is(...);

this causes a shell to be invoked with an invalid locale. Some shells
such as bash, become very noisy in this case:

    $ LC_ALL=invalid /bin/sh -c 'echo yes'
    /bin/sh: warning: setlocale: LC_ALL: cannot change locale (invalid): No such file or directory
    yes
    $

Silence these warnings by temporarily closing STDERR. Since the
fresh_perl_is() scripts themselves are run with STDERR set to /dev/null
anyway, this isn't a hardship.

t/run/locale.t

index f522e0f..8287214 100644 (file)
@@ -200,6 +200,15 @@ EOF
        "Uses the above test to verify that on Windows the system default locale has lower priority than LC_NUMERIC");
     }
 
+
+    # within this block, STDERR is closed. This is because fresh_perl_is()
+    # forks a shell, and some shells (like bash) can complain noisily when
+    #LC_ALL or similar is set to an invalid value
+
+    {
+        open my $saved_stderr, ">&STDERR" or die "Can't dup STDERR: $!";
+        close STDERR;
+
     for ($different) {
         local $ENV{LC_ALL} = "invalid";
        local $ENV{LC_NUMERIC} = "invalid";
@@ -239,6 +248,9 @@ EOF
         }
     }
 
+    open STDERR, ">&", $saved_stderr or die "Can't dup \$saved_stderr: $!";
+    }
+
     for ($different) {
        local $ENV{LC_NUMERIC} = $_;
        local $ENV{LC_ALL}; # so it never overrides LC_NUMERIC