Skip Menu |

This queue is for tickets about the Carp-REPL CPAN distribution.

Report information
The Basics
Id: 103414
Status: resolved
Priority: 0/
Queue: Carp-REPL

People
Owner: ether [...] cpan.org
Requestors: asarch [...] hotmail.com
DAKKAR [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: 0.18



Subject: Test failures with latest Test::Expect
Test::Expect fixed a long-standing bug: if you called expect_send with a string that included regex meta-characters, the subsequent expect_like was unreliable. In particular, expect_like would match what you sent, not just what the program under test printed. So, for example, in Carp::REPL's t/04-scope.t: expect_send('$post_local'); expect_like(qr/^\s*\$post_local\s*$/m); would pass because the $post_local in the expect_like would match the $post_local just sent. In fact, the REPL didn't print anything. With the fixed Test::Expect, lots of tests fail (example: http://www.cpantesters.org/cpan/report/cbce3aa8-da94-11e4-b53a-d28bde9d2db9 ) I'd like to fix either the code or the tests, but I can't understand a few things: * what is Carp::REPL supposed to do when asked to print an undeclared, not-fully-qualified variable? currently it prints nothing and prompts again * what is the purpose of testing for undeclared variables in the tests? * I suspect Devel::REPL::Plugin::LexEnv interacts with Devel::REPL::Plugin::Carp::REPL's mangle_line method, in the sense that both declare the same variables, and I'm not sure it makes sense Can anyone help?
The attached patch makes the tests pass under Test::Expect 0.30, 0.31, 0.32 I still have very little clue about what the tests are doing, though...
Subject: 0001-ugly-fixes-for-failing-tests.patch
From 6433c616be895c6572661e4d4b373e24e5b90d9b Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli <gianni.ceccarelli@net-a-porter.com> Date: Thu, 9 Apr 2015 11:35:42 +0100 Subject: [PATCH] ugly fixes for failing tests this works with Test::Expect 0.30 (like it did before) and 0.31 0.32 (which failed) note that I'm not sure what the tests are doing! they may well be testing meaningless stuff --- t/04-scope.t | 65 +++++++++++++++------------------------------------ t/07-frame.t | 26 ++++++++------------- t/09-args.t | 8 +++---- t/11-warn.t | 8 +++---- t/lib/TestHelpers.pm | 22 +++++++++++++++++ t/lib/TestHelpers.pm~ | 21 +++++++++++++++++ 6 files changed, 80 insertions(+), 70 deletions(-) create mode 100644 t/lib/TestHelpers.pm create mode 100644 t/lib/TestHelpers.pm~ diff --git a/t/04-scope.t b/t/04-scope.t index 030f6e1..9cf066d 100644 --- a/t/04-scope.t +++ b/t/04-scope.t @@ -3,6 +3,8 @@ use strict; use warnings; use Test::More tests => 37; use Test::Expect; +use lib 't/lib'; +use TestHelpers qw(e_value e_defined); expect_run ( @@ -14,54 +16,25 @@ expect_run expect_send('1 + 1'); expect_like(qr/\b2\b/, 'in the REPL'); -expect_send('$pre_lexical'); -expect_like(qr/\balpha\b/); +e_value('$pre_lexical','alpha'); +e_value('$pre_global_safe','sheep'); +e_value('$inner_lexical','parking'); +e_value('$inner_global','to'); +e_value('$pre_global','shadow stabbing'); +e_value('$post_global','go'); +e_value('$main::post_global','go'); -expect_send('$pre_global_safe'); -expect_like(qr/\bsheep\b/); +e_defined('$post_local',0); +e_defined('$postcall_local',0); +e_defined('$postcall_global',0); +e_defined('$other_lexical',0); -expect_send('$inner_lexical'); -expect_like(qr/\bparking\b/); +e_value('$other_global','long jacket'); +e_value('$main::other_global','long jacket'); -expect_send('$inner_global'); -expect_like(qr/\bto\b/); +e_defined('$birds',0); +e_defined('$window',0); -expect_send('$pre_global'); -expect_like(qr/\bshadow stabbing\b/); - -expect_send('$post_global'); -expect_like(qr/\bgo\b/); - -expect_send('$main::post_global'); -expect_like(qr/\bgo\b/); - -expect_send('$post_local'); -expect_like(qr/^\s*\$post_local\s*$/m); - -expect_send('$postcall_local'); -expect_like(qr/^\s*\$postcall_local\s*$/m); - -expect_send('$postcall_global'); -expect_like(qr/^\s*\$postcall_global\s*$/m); - -expect_send('$other_lexical'); -expect_like(qr/^\s*\$other_lexical\s*$/m); - -expect_send('$other_global'); -expect_like(qr/\blong jacket\b/); - -expect_send('$main::other_global'); -expect_like(qr/\blong jacket\b/); - -expect_send('$birds'); -expect_like(qr/^\s*\$birds\s*$/m); - -expect_send('$window'); -expect_like(qr/^\s*\$window\s*$/m); - -expect_send('$Mr::Mastodon::Farm::birds'); -expect_like(qr/\bfall\b/); - -expect_send('$Mr::Mastodon::Farm::window'); -expect_is('$Mr::Mastodon::Farm::window', 'output was exactly what we gave to the repl, meaning the output was undef'); +e_value('$Mr::Mastodon::Farm::birds','fall'); +e_defined('$Mr::Mastodon::Farm::window',0); diff --git a/t/07-frame.t b/t/07-frame.t index 73c607f..937ebdf 100644 --- a/t/07-frame.t +++ b/t/07-frame.t @@ -3,6 +3,8 @@ use strict; use warnings; use Test::More tests => 55; use Test::Expect; +use lib 't/lib'; +use TestHelpers qw(e_value e_defined); expect_run ( @@ -25,38 +27,32 @@ expect_like(qr{^main::fib\(5\) called at t/scripts/07-frame\.pl line 12}m); expect_send('1 + 1'); expect_like(qr/\b2\b/, 'in the REPL'); -expect_send('$n'); -expect_like(qr/-1\b/); +e_value('$n',-1); expect_send(':u'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:9 \(frame 1\)\.}); -expect_send('$n'); -expect_like(qr/\b0\b/); +e_value('$n',0); expect_send(':up'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:9 \(frame 2\)\.}); -expect_send('$n'); -expect_like(qr/\b1\b/); +e_value('$n',1); expect_send(':d'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:9 \(frame 1\)\.}); -expect_send('$n'); -expect_like(qr/\b0\b/); +e_value('$n',0); expect_send(':down'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:8 \(frame 0\)\.}); -expect_send('$n'); -expect_like(qr/-1\b/); +e_value('$n',-1); expect_send(':d'); expect_like(qr{\bYou're already at the bottom frame\.}); -expect_send('$n'); -expect_like(qr/-1\b/); +e_value('$n',-1); expect_send('my $m = 10'); expect_like(qr/\b10\b/); @@ -64,8 +60,7 @@ expect_like(qr/\b10\b/); expect_send(':u'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:9 \(frame 1\)\.}); -expect_send('$m'); -expect_like(qr/^\s*\$m\s*$/m); +e_value('$m',10); expect_send(':t'); # examine the stack trace @@ -81,8 +76,7 @@ expect_like(qr{main::fib\(5\) called at t/scripts/07-frame\.pl line 12}m); expect_send(':bottom'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:8 \(frame 0\)\.}); -expect_send('$m'); -expect_like(qr/^\s*\$m\s*$/m); +e_value('$m',10); expect_send(':top'); expect_like(qr{\bNow at t/scripts/07-frame\.pl:12 \(frame 7\)\.}); diff --git a/t/09-args.t b/t/09-args.t index 463aaba..254c9dc 100644 --- a/t/09-args.t +++ b/t/09-args.t @@ -38,10 +38,10 @@ expect_send('@$_a'); expect_like(qr/\bI I\b/); expect_send(':u'); -expect_send('@$_a'); -expect_like(qr/\bI\b/); +expect_send('"<@$_a>"'); +expect_like(qr/^<I>$/m); expect_send(':u'); -expect_send('@$_a'); -expect_like(qr/\A\@\$_a\Z/); +expect_send('"<@$_a>"'); +expect_like(qr/^<>$/m); diff --git a/t/11-warn.t b/t/11-warn.t index f840778..34b06e1 100644 --- a/t/11-warn.t +++ b/t/11-warn.t @@ -3,6 +3,8 @@ use strict; use warnings; use Test::More tests => 7; use Test::Expect; +use lib 't/lib'; +use TestHelpers qw(e_value e_defined); expect_run ( @@ -14,9 +16,7 @@ expect_run expect_send('1 + 1'); expect_like(qr/2/); -expect_send('$a'); -expect_like(qr/\b4\b/); +e_value('$a',4); -expect_send('$b'); -expect_like(qr/\A\s*\$b\s*\Z/); +e_defined('$b',0); diff --git a/t/lib/TestHelpers.pm b/t/lib/TestHelpers.pm new file mode 100644 index 0000000..995e5c0 --- /dev/null +++ b/t/lib/TestHelpers.pm @@ -0,0 +1,22 @@ +package TestHelpers; +use strict; +use warnings; +use 5.006000; +use Test::Expect; +use Sub::Exporter -setup => { + exports => [qw(e_value e_defined)], +}; + +sub e_value { + my ($name,$expected,$note) = @_; + expect_send($name); + expect_like(qr/^\Q$expected\E$/m,$note); +} +sub e_defined { + my ($name,$defined,$note) = @_; + expect_send("defined($name)?'ok':'not'"); + my $r = $defined ? qr/^ok$/m : qr/^not$/m; + expect_like($r,$note); +} + +1; diff --git a/t/lib/TestHelpers.pm~ b/t/lib/TestHelpers.pm~ new file mode 100644 index 0000000..60351e8 --- /dev/null +++ b/t/lib/TestHelpers.pm~ @@ -0,0 +1,21 @@ +package TestHelpers; +use strict; +use warnings; +use 5.006000; +use Sub::Exporter -setup => { + exports => [qw(e_value e_defined)], +}; + +sub e_value { + my ($name,$expected,$note) = @_; + expect_send($name); + expect_like(qr/\b\Q$expected\E\b/,$note); +} +sub e_defined { + my ($name,$defined,$note) = @_; + expect_send("defined($name)?:'ok':'not'"); + my $r = $defined ? qr/\bok\b/ : qr/\bnot\b/; + expect_like($r,$note); +} + +1; -- 2.0.5
On Thu Apr 09 06:43:06 2015, DAKKAR wrote: Show quoted text
> The attached patch makes the tests pass under Test::Expect 0.30, 0.31, 0.32 > > I still have very little clue about what the tests are doing, though...
Yeah it looks like test::Expect suddenly got a new maintainer and the did a change after 6+ years that is breaking code :) I can verify that downgrading test::expect works but I think we have no choice but to upgrade code to match. looks to me like the proposed patch is good, FWIW. Let me know if you need a commainter (this is stopping Task::Catalyst from installing)
On Thu Apr 09 06:43:06 2015, DAKKAR wrote: Show quoted text
> The attached patch makes the tests pass under Test::Expect 0.30, 0.31, 0.32 > > I still have very little clue about what the tests are doing, though...
Yeah it looks like test::Expect suddenly got a new maintainer and the did a change after 6+ years that is breaking code :) I can verify that downgrading test::expect works but I think we have no choice but to upgrade code to match. looks to me like the proposed patch is good, FWIW. Let me know if you need a commainter (this is stopping Task::Catalyst from installing)
Added JJNAPIORK to co-maintainers of Carp::REPL. :)
Subject: Failed tests in Carp::REPL 0.17
Date: Sat, 16 May 2015 21:11:11 -0500
To: bug-Carp-REPL [...] rt.cpan.org
From: Alef Sheridan Ariel Ramírez Chiñas <asarch [...] hotmail.com>
cpan Task::Catalyst CPAN: Storable loaded ok (v2.41) Reading '/root/.cpan/Metadata' Database was generated on Thu, 23 Apr 2015 02:17:02 GMT Running install for module 'Task::Catalyst' Running make for B/BO/BOBTFISH/Task-Catalyst-4.02.tar.gz CPAN: LWP::UserAgent loaded ok (v6.13) Fetching with LWP: http://cpan.belfry.net/authors/id/B/BO/BOBTFISH/Task-Catalyst-4.02.tar.gz CPAN: YAML loaded ok (v1.14) CPAN: Digest::SHA loaded ok (v5.84_01) Fetching with LWP: http://cpan.belfry.net/authors/id/B/BO/BOBTFISH/CHECKSUMS CPAN: Compress::Zlib loaded ok (v2.06) Checksum for /root/.cpan/sources/authors/id/B/BO/BOBTFISH/Task-Catalyst-4.02.tar.gz ok CPAN: File::Temp loaded ok (v0.23) CPAN: Parse::CPAN::Meta loaded ok (v1.4414) CPAN: CPAN::Meta loaded ok (v2.150001) CPAN: Module::CoreList loaded ok (v2.96) CPAN.pm: Building B/BO/BOBTFISH/Task-Catalyst-4.02.tar.gz Warning: prerequisite CatalystX::REPL 0 not found. Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Task::Catalyst Writing MYMETA.yml and MYMETA.json Show quoted text
---- Unsatisfied dependencies detected during ---- ---- BOBTFISH/Task-Catalyst-4.02.tar.gz ---- CatalystX::REPL [requires] Running make test Delayed until after prerequisites Running make install Delayed until after prerequisites Running install for module 'CatalystX::REPL' Running make for F/FL/FLORA/CatalystX-REPL-0.04.tar.gz Fetching with LWP: http://cpan.belfry.net/authors/id/F/FL/FLORA/CatalystX-REPL-0.04.tar.gz Fetching with LWP: http://cpan.belfry.net/authors/id/F/FL/FLORA/CHECKSUMS Checksum for /root/.cpan/sources/authors/id/F/FL/FLORA/CatalystX-REPL-0.04.tar.gz ok CPAN.pm: Building F/FL/FLORA/CatalystX-REPL-0.04.tar.gz Warning: prerequisite Carp::REPL 0 not found. Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for CatalystX::REPL Writing MYMETA.yml and MYMETA.json
---- Unsatisfied dependencies detected during ---- ---- FLORA/CatalystX-REPL-0.04.tar.gz ---- Carp::REPL [requires] Running make test Delayed until after prerequisites Running make install Delayed until after prerequisites Running install for module 'Carp::REPL' Running make for T/TS/TSIBLEY/Carp-REPL-0.17.tar.gz Fetching with LWP: http://cpan.belfry.net/authors/id/T/TS/TSIBLEY/Carp-REPL-0.17.tar.gz Fetching with LWP: http://cpan.belfry.net/authors/id/T/TS/TSIBLEY/CHECKSUMS Checksum for /root/.cpan/sources/authors/id/T/TS/TSIBLEY/Carp-REPL-0.17.tar.gz ok CPAN.pm: Building T/TS/TSIBLEY/Carp-REPL-0.17.tar.gz Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Carp::REPL Writing MYMETA.yml and MYMETA.json cp lib/Devel/REPL/Plugin/Carp/REPL.pm blib/lib/Devel/REPL/Plugin/Carp/REPL.pm cp lib/Carp/REPL.pm blib/lib/Carp/REPL.pm Manifying 2 pod documents TSIBLEY/Carp-REPL-0.17.tar.gz /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 "/usr/bin/perl5.18.1" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t # Carp::REPL 0.17 # Devel::REPL 1.003026 # Perl 5.018001, /usr/bin/perl5.18.1 t/00-load.t ...... ok t/01-trivial.t ... ok t/02-lexicals.t .. ok t/03-subs.t ...... ok # Failed test at t/04-scope.t line 39. # '' # doesn't match '(?^m:^\s*\$post_local\s*$)' # Failed test at t/04-scope.t line 42. # '' # doesn't match '(?^m:^\s*\$postcall_local\s*$)' # Failed test at t/04-scope.t line 45. # '' # doesn't match '(?^m:^\s*\$postcall_global\s*$)' # Failed test at t/04-scope.t line 48. # '' # doesn't match '(?^m:^\s*\$other_lexical\s*$)' # Failed test at t/04-scope.t line 57. # '' # doesn't match '(?^m:^\s*\$birds\s*$)' # Failed test at t/04-scope.t line 60. # '' # doesn't match '(?^m:^\s*\$window\s*$)' # Failed test 'output was exactly what we gave to the repl, meaning the output was undef' # at t/04-scope.t line 66. # got: '' # expected: '$Mr::Mastodon::Farm::window' # Looks like you failed 7 tests of 37. t/04-scope.t ..... Dubious, test returned 7 (wstat 1792, 0x700) Failed 7/37 subtests t/05-interact.t .. ok t/06-remember.t .. ok # Failed test at t/07-frame.t line 68. # '10' # doesn't match '(?^m:^\s*\$m\s*$)' # Failed test at t/07-frame.t line 85. # '10' # doesn't match '(?^m:^\s*\$m\s*$)' # Looks like you failed 2 tests of 55. t/07-frame.t ..... Dubious, test returned 2 (wstat 512, 0x200) Failed 2/55 subtests t/08-alias.t ..... ok # Failed test at t/09-args.t line 46. # '' # doesn't match '(?^:\A\@\$_a\Z)' # Looks like you failed 1 test of 26. t/09-args.t ...... Dubious, test returned 1 (wstat 256, 0x100) Failed 1/26 subtests t/10-nodie.t ..... ok # Failed test at t/11-warn.t line 21. # '' # doesn't match '(?^:\A\s*\$b\s*\Z)' # Looks like you failed 1 test of 7. t/11-warn.t ...... Dubious, test returned 1 (wstat 256, 0x100) Failed 1/7 subtests t/12-env.t ....... ok t/13-list.t ...... ok t/99-bug.t ....... ok Test Summary Report ------------------- t/04-scope.t (Wstat: 1792 Tests: 37 Failed: 7) Failed tests: 19, 21, 23, 25, 31, 33, 37 Non-zero exit status: 7 t/07-frame.t (Wstat: 512 Tests: 55 Failed: 2) Failed tests: 40, 53 Non-zero exit status: 2 t/09-args.t (Wstat: 256 Tests: 26 Failed: 1) Failed test: 26 Non-zero exit status: 1 t/11-warn.t (Wstat: 256 Tests: 7 Failed: 1) Failed test: 7 Non-zero exit status: 1 Files=15, Tests=375, 21 wallclock secs ( 0.31 usr 0.03 sys + 20.59 cusr 0.92 csys = 21.85 CPU) Result: FAIL Failed 4/15 test programs. 11/375 subtests failed. make: *** [test_dynamic] Error 255 TSIBLEY/Carp-REPL-0.17.tar.gz /usr/bin/make test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports TSIBLEY/Carp-REPL-0.17.tar.gz Running make install make test had returned bad status, won't install without force Running make for F/FL/FLORA/CatalystX-REPL-0.04.tar.gz Has already been unwrapped into directory /root/.cpan/build/CatalystX-REPL-0.04-UWpzA3 CPAN.pm: Building F/FL/FLORA/CatalystX-REPL-0.04.tar.gz Warning: Prerequisite 'Carp::REPL => 0' for 'FLORA/CatalystX-REPL-0.04.tar.gz' failed when processing 'TSIBLEY/Carp-REPL-0.17.tar.gz' with 'make_test => NO'. Continuing, but chances to succeed are limited. cp lib/CatalystX/REPL.pm blib/lib/CatalystX/REPL.pm Manifying 1 pod document FLORA/CatalystX-REPL-0.04.tar.gz /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 "/usr/bin/perl5.18.1" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t Expect::Simple: Expect::Simple: couldn't find prompt at /usr/local/share/perl5/Test/Expect.pm line 42. # Looks like your test exited with 5 before it could output anything. t/basic.t ................. Dubious, test returned 5 (wstat 1280, 0x500) Failed 5/5 subtests t/release-pod-coverage.t .. skipped: these tests are for release candidate testing t/release-pod-syntax.t .... skipped: these tests are for release candidate testing Test Summary Report ------------------- t/basic.t (Wstat: 1280 Tests: 0 Failed: 0) Non-zero exit status: 5 Parse errors: Bad plan. You planned 5 tests but ran 0. Files=3, Tests=0, 2 wallclock secs ( 0.06 usr 0.01 sys + 2.09 cusr 0.09 csys = 2.25 CPU) Result: FAIL Failed 1/3 test programs. 0/0 subtests failed. make: *** [test_dynamic] Error 255 FLORA/CatalystX-REPL-0.04.tar.gz one dependency not OK (Carp::REPL); additionally test harness failed /usr/bin/make test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports FLORA/CatalystX-REPL-0.04.tar.gz Running make install make test had returned bad status, won't install without force Running make for B/BO/BOBTFISH/Task-Catalyst-4.02.tar.gz Has already been unwrapped into directory /root/.cpan/build/Task-Catalyst-4.02-zi74kD CPAN.pm: Building B/BO/BOBTFISH/Task-Catalyst-4.02.tar.gz Warning: Prerequisite 'CatalystX::REPL => 0' for 'BOBTFISH/Task-Catalyst-4.02.tar.gz' failed when processing 'FLORA/CatalystX-REPL-0.04.tar.gz' with 'make_test => NO one dependency not OK (Carp::REPL); additionally test harness failed'. Continuing, but chances to succeed are limited. cp lib/Task/Catalyst.pm blib/lib/Task/Catalyst.pm Manifying 1 pod document BOBTFISH/Task-Catalyst-4.02.tar.gz /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 "/usr/bin/perl5.18.1" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/release-pod-coverage.t .. skipped: these tests are for release candidate testing t/release-pod-syntax.t .... skipped: these tests are for release candidate testing t/task-bogus.t ............ ok All tests successful. Files=3, Tests=1, 0 wallclock secs ( 0.06 usr 0.01 sys + 0.14 cusr 0.02 csys = 0.23 CPU) Result: PASS BOBTFISH/Task-Catalyst-4.02.tar.gz Tests succeeded but one dependency not OK (CatalystX::REPL) BOBTFISH/Task-Catalyst-4.02.tar.gz [dependencies] -- NA Running make install make test had returned bad status, won't install without force
On 2015-05-16 22:11:42, asarch@hotmail.com wrote: [...] According to http://analysis.cpantesters.org/solved?distv=Carp-REPL-0.17#meta%3Adate tests started to fail in April 2015. There's also evidence that Test::Expect 0.33 is causing the failures, see http://analysis.cpantesters.org/reports_by_field?distv=Carp-REPL-0.17;field=mod%3ATest%3A%3AExpect
From: ppisar [...] redhat.com
See for the same bug report CPAN RT#103414. Fix is included there.
On 2015-04-28 06:41:29, JJNAPIORK wrote: Show quoted text
> On Thu Apr 09 06:43:06 2015, DAKKAR wrote:
> > The attached patch makes the tests pass under Test::Expect 0.30, > > 0.31, 0.32 > > > > I still have very little clue about what the tests are doing, > > though...
> > > Yeah it looks like test::Expect suddenly got a new maintainer and the > did a change after 6+ years that is breaking code :) I can verify > that downgrading test::expect works but I think we have no choice but > to upgrade code to match. looks to me like the proposed patch is > good, FWIW. Let me know if you need a commainter (this is stopping > Task::Catalyst from installing)
I'll look at doing a release fix tonight.
RT-Send-CC: ppisar [...] redhat.com, asarch [...] hotmail.com
Fixed in 0.18.