Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fails with bleadperl since v5.21.3-773-g68567d2 #1

Closed
andk opened this issue Sep 26, 2014 · 7 comments
Closed

Fails with bleadperl since v5.21.3-773-g68567d2 #1

andk opened this issue Sep 26, 2014 · 7 comments

Comments

@andk
Copy link

andk commented Sep 26, 2014

As per subject. Sample fail report:

http://www.cpantesters.org/cpan/report/a062c992-415b-11e4-9916-426ae0bfc7aa

HTH&&Thanks,
(Disclaimer: this was discovered by statistical analysis, I'm not speaking as a user)

@ppisar
Copy link

ppisar commented Jun 17, 2015

The _get_diagnostics() function should convert the error message from

Global symbol "$kaboom" requires explicit package name

to

Global symbol "%s" requires explicit package name

I.e. replace the variable name with %s. The translation is performed by transmo() function which is an automatically constructed code from list of regular expressions. The generated transmo() differs between perl-5.22 and perl-5.18 and it cannot not translate the message on perl-5.22. Hence no diagnostic message is populated and the test fails.

@ppisar
Copy link

ppisar commented Jun 17, 2015

Also the tested input is not recognized by perl-5.22's splain. It is:

Global symbol "$kaboom" requires explicit package name at error.pl line 8.

it should be

Global symbol "$kaboom" requires explicit package name (did you forget to declare "my $kaboom"?) at error.pl line 8.

@ppisar
Copy link

ppisar commented Jun 17, 2015

And the other error is that perldiag POD lists the messages wrapped to more lines, and this breaks the translation from the POD =item titles to regular expressions.

@ppisar
Copy link

ppisar commented Jun 17, 2015

This patch fixes it:

From ecbaef9c24c50279ad0d9f96927f623998aa8555 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Wed, 17 Jun 2015 14:09:37 +0200
Subject: [PATCH] Adjust to perl-5.22
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Perl 5.22 changed diagnostic message about undeclard variable with
this ond other commits:

commit 68567d271d7bcc0392c9f9bdd834ad94db1e4773
Author: Father Chrysostomos <sprout@cpan.org>
Date:   Thu Sep 18 22:10:14 2014 -0700

    Update perldiag to reflect ‘Global symbol’ change

    Why didn’t t/porting/diag.t catch this?

This patch adujsts the test input and expected output to match perl 5.22
wording.

It's also fixes a bug when perldiag POD spanned the message to more
lines which broke translation into regular expressions. The new-line
character crept there.

<https://github.com/PadreIDE/Parse-ErrorString-Perl/issues/1>

Signed-off-by: Petr Písař <ppisar@redhat.com>
---
 lib/Parse/ErrorString/Perl.pm |  1 +
 t/04-perldiag.t               | 29 +++++++++++++++++++++++++++--
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/lib/Parse/ErrorString/Perl.pm b/lib/Parse/ErrorString/Perl.pm
index f259bf7..8fb6eb1 100644
--- a/lib/Parse/ErrorString/Perl.pm
+++ b/lib/Parse/ErrorString/Perl.pm
@@ -93,6 +93,7 @@ sub _prepare_diagnostics {
    my %errors;
    foreach my $item ( $pom->head1->[1]->over->[0]->item ) {
        my $header = $item->title;
+       $header =~ s/\n/ /g;

        my $content = $item->content;
        $content =~ s/\s*$//;
diff --git a/t/04-perldiag.t b/t/04-perldiag.t
index 3d6ed57..c5017b9 100644
--- a/t/04-perldiag.t
+++ b/t/04-perldiag.t
@@ -13,11 +13,36 @@ use Test::Differences;
 #
 # $hell;

-my $msg_compile = <<'ENDofMSG';
+my $msg_compile;
+
+if ( $] < 5.021004 ) {
+
+   $msg_compile = <<'ENDofMSG';
 Global symbol "$kaboom" requires explicit package name at error.pl line 8.
 Execution of error.pl aborted due to compilation errors.
 ENDofMSG

+} else {
+
+   $msg_compile = <<'ENDofMSG';
+Global symbol "$kaboom" requires explicit package name (did you forget to declare "my $kaboom"?) at error.pl line 8.
+Execution of error.pl aborted due to compilation errors.
+ENDofMSG
+
+}
+
+my $message;
+
+if ( $] < 5.021004 ) {
+
+   $message = q{Global symbol "$kaboom" requires explicit package name};
+
+} else {
+
+   $message = q{Global symbol "$kaboom" requires explicit package name (did you forget to declare "my $kaboom"?)};
+
+}
+
 my $diagnostics;

 if ( $] < 5.008009 ) {
@@ -56,7 +81,7 @@ $diagnostics =~ s/\s\n/\n/gs;

 my $parser         = Parse::ErrorString::Perl->new;
 my @errors_compile = $parser->parse_string($msg_compile);
-is( $errors_compile[0]->message, 'Global symbol "$kaboom" requires explicit package name', 'message' );
+is( $errors_compile[0]->message, $message, 'message' );

 #ok($errors_compile[0]->diagnostics eq $diagnostics, 'diagnostics');
 my $obtained_diagnostics = $errors_compile[0]->diagnostics;
-- 
2.1.0

@szabgab
Copy link
Contributor

szabgab commented Dec 1, 2015

Oh I just see there is a patch. Why didn't you send a pull request? It is so much simpler!

@szabgab
Copy link
Contributor

szabgab commented Dec 1, 2015

applied in ca6b762

@szabgab szabgab closed this as completed Dec 1, 2015
@szabgab
Copy link
Contributor

szabgab commented Dec 1, 2015

thanks

@szabgab szabgab mentioned this issue Dec 1, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants