1) ../bin/TestRunner.pl:44 - test_tmpl_form_notext_params(InitFormTests)
Assertion failed!
at /home/twiki/TWIKI4/lib/Assert.pm line 91
Assert::ASSERT('') called at /home/twiki/TWIKI4/lib/TWiki.pm line 2559
TWiki::handleCommonTags('TWiki=HASH(0xd4ef494)', '<style type=\'text/css\' media=\'all\'>\x{a} @import url(\'%PUBU...', 'TestWeb', '') called at /home/twiki/TWIKI4/lib/TWiki.pm line 2627
TWiki::addToHEAD('TWiki=HASH(0xd4ef494)', 'JSCALENDAR_HEAD', '<style type=\'text/css\' media=\'all\'>\x{a} @import url(\'%PUBU...') called at /home/twiki/TWIKI4/lib/TWiki/Func.pm line 1554
TWiki::Func::addToHEAD('JSCALENDAR_HEAD', '<style type=\'text/css\' media=\'all\'>\x{a} @import url(\'%PUBU...') called at /home/twiki/TWIKI4/lib/TWiki/Contrib/JSCalendarContrib.pm line 34
TWiki::Contrib::JSCalendarContrib::addHEAD('twiki') called at /home/twiki/TWIKI4/lib/TWiki/Plugins/DateFieldPlugin.pm line 49
TWiki::Plugins::DateFieldPlugin::beforeEditHandler('', '', 'TestWeb', 'TWiki::Meta=HASH(0xd3901b4)') called at /home/twiki/TWIKI4/lib/TWiki/Plugin.pm line 246
TWiki::Plugin::invoke('TWiki::Plugin=HASH(0xd43d010)', 'beforeEditHandler', '', '', 'TestWeb', 'TWiki::Meta=HASH(0xd3901b4)') called at /home/twiki/TWIKI4/lib/TWiki/Plugins.pm line 333
TWiki::Plugins::_dispatch('TWiki::Plugins=HASH(0xd367590)', 'beforeEditHandler', '', '', 'TestWeb', 'TWiki::Meta=HASH(0xd3901b4)') called at /home/twiki/TWIKI4/lib/TWiki/Plugins.pm line 621
TWiki::Plugins::beforeEditHandler('TWiki::Plugins=HASH(0xd367590)', '', '', 'TestWeb', 'TWiki::Meta=HASH(0xd3901b4)') called at /home/twiki/TWIKI4/lib/TWiki/UI/Edit.pm line 306
TWiki::UI::Edit::init_edit('TWiki=HASH(0xd4ef494)', 'myedit') called at /home/twiki/TWIKI4/test/unit/InitFormTests.pm line 189
InitFormTests::setup_formtests('InitFormTests=HASH(0x8d519d4)', 'TestWeb', '', 'formtemplate="TestWeb.InitTestForm" templatetopic="TestWeb.In...') called at /home/twiki/TWIKI4/test/unit/InitFormTests.pm line 325
InitFormTests::test_tmpl_form_notext_params('InitFormTests=HASH(0x8d519d4)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestCase.pm line 75
Test::Unit::TestCase::run_test('InitFormTests=HASH(0x8d519d4)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestCase.pm line 61
Test::Unit::TestCase::__ANON__() called at /home/twiki/TWIKI4/lib/CPAN/lib//Error.pm line 372
eval {...} called at /home/twiki/TWIKI4/lib/CPAN/lib//Error.pm line 371
Error::subs::try('CODE(0xd540b90)', 'HASH(0xd4f0f80)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestCase.pm line 66
Test::Unit::TestCase::run_bare('InitFormTests=HASH(0x8d519d4)') called at /usr/local/share/perl/5.8.8/Test/Unit/Result.pm line 103
Test::Unit::Result::__ANON__() called at /usr/local/share/perl/5.8.8/Test/Unit/Result.pm line 119
Test::Unit::Result::__ANON__() called at /home/twiki/TWIKI4/lib/CPAN/lib//Error.pm line 379
eval {...} called at /home/twiki/TWIKI4/lib/CPAN/lib//Error.pm line 371
Error::subs::try('CODE(0xa50f6e4)', 'HASH(0xd313958)') called at /usr/local/share/perl/5.8.8/Test/Unit/Result.pm line 133
Test::Unit::Result::run_protected('Test::Unit::Result=HASH(0x8a416d8)', 'InitFormTests=HASH(0x8d519d4)', 'CODE(0xac5d21c)') called at /usr/local/share/perl/5.8.8/Test/Unit/Result.pm line 107
Test::Unit::Result::run('Test::Unit::Result=HASH(0x8a416d8)', 'InitFormTests=HASH(0x8d519d4)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestCase.pm line 51
Test::Unit::TestCase::run('InitFormTests=HASH(0x8d519d4)', 'Test::Unit::Result=HASH(0x8a416d8)', 'Test::Unit::TestRunner=HASH(0x8151c28)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestSuite.pm line 278
Test::Unit::TestSuite::run('Test::Unit::TestSuite=HASH(0x8d39d4c)', 'Test::Unit::Result=HASH(0x8a416d8)', 'Test::Unit::TestRunner=HASH(0x8151c28)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestSuite.pm line 278
Test::Unit::TestSuite::run('TWikiUnitTestsSuite=HASH(0x8a41594)', 'Test::Unit::Result=HASH(0x8a416d8)', 'Test::Unit::TestRunner=HASH(0x8151c28)') called at /usr/local/share/perl/5.8.8/Test/Unit/TestRunner.pm line 54
Test::Unit::TestRunner::do_run('Test::Unit::TestRunner=HASH(0x8151c28)', 'TWikiUnitTestsSuite=HASH(0x8a41594)', 0) called at /usr/local/share/perl/5.8.8/Test/Unit/TestRunner.pm line 183
Test::Unit::TestRunner::start('Test::Unit::TestRunner=HASH(0x8151c28)', 'TWikiSuite.pm') called
Test was not successful.
Looks like the TWiki object has not topic defined (undef ->{topicName})
CC
Funny. They pass OK on my test computer
KJL
You probably don't have asserts enabled. The test definitely fails.
CC
And how do I enable asserts? This is beyond what my knowledge covers.
What did I miss in
TWiki:Codev.TestCasesTutorial?
KJL
As described in
TWiki:Codev.TestCasesTutorial (now)
CC
Hmm. Strange.
You write in the new text in the tutorial that the unit test case enables asserts automatically.
And it does look like that when running the test.
# perl ../bin/TestRunner.pl InitFormTests.pm
exporting TWIKI_ASSERTS=1 for extra checking; disable by exporting TWIKI_ASSERTS=0
Assert checking on 1
..........
Time: 2 wallclock secs ( 1.34 usr 0.47 sys + 0.08 cusr 0.48 csys = 2.37 CPU)
OK (10 tests)
But I went ahead and added the
$ENV{TWIKI_ASSERTS}=1;
to the top of
LocalLib.cfg.
and then I get a similar error output like you.
There was 1 error:
1) ../bin/TestRunner.pl:44 - test_tmpl_form_notext_params(InitFormTests)
Assertion failed!
at /var/www/twiki/lib/Assert.pm line 92
Assert::ASSERT('') called at /var/www/twiki/lib/TWiki.pm line 2560
TWiki::handleCommonTags('TWiki=HASH(0x920d3e8)', '%FORMFIELDS%\x{a}', 'TestWeb', '') called at /var/www/twiki/lib/TWiki/UI/Edit.pm line 319
TWiki::UI::Edit::init_edit('TWiki=HASH(0x920d3e8)', 'myedit') called at /var/www/MAIN/test/unit/InitFormTests.pm line 189
InitFormTests::setup_formtests('InitFormTests=HASH(0x8d9c088)', 'TestWeb', '', 'formtemplate="TestWeb.InitTestForm" templatetopic="TestWeb.In...') called at /var/www/MAIN/test/unit/InitFormTests.pm line 325
InitFormTests::test_tmpl_form_notext_params('InitFormTests=HASH(0x8d9c088)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestCase.pm line 75
Test::Unit::TestCase::run_test('InitFormTests=HASH(0x8d9c088)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestCase.pm line 61
Test::Unit::TestCase::__ANON__() called at /var/www/twiki/lib/CPAN/lib//Error.pm line 372
eval {...} called at /var/www/twiki/lib/CPAN/lib//Error.pm line 371
Error::subs::try('CODE(0x9928bf4)', 'HASH(0x8ef6d20)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestCase.pm line 66
Test::Unit::TestCase::run_bare('InitFormTests=HASH(0x8d9c088)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/Result.pm line 103
Test::Unit::Result::__ANON__() called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/Result.pm line 119
Test::Unit::Result::__ANON__() called at /var/www/twiki/lib/CPAN/lib//Error.pm line 379
eval {...} called at /var/www/twiki/lib/CPAN/lib//Error.pm line 371
Error::subs::try('CODE(0x96f3f4c)', 'HASH(0x96f50f8)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/Result.pm line 133
Test::Unit::Result::run_protected('Test::Unit::Result=HASH(0x8d9c118)', 'InitFormTests=HASH(0x8d9c088)', 'CODE(0x96f3ee0)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/Result.pm line 107
Test::Unit::Result::run('Test::Unit::Result=HASH(0x8d9c118)', 'InitFormTests=HASH(0x8d9c088)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestCase.pm line 51
Test::Unit::TestCase::run('InitFormTests=HASH(0x8d9c088)', 'Test::Unit::Result=HASH(0x8d9c118)', 'Test::Unit::TestRunner=HASH(0x8d83c20)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestSuite.pm line 278
Test::Unit::TestSuite::run('Test::Unit::TestSuite=HASH(0x96f3348)', 'Test::Unit::Result=HASH(0x8d9c118)', 'Test::Unit::TestRunner=HASH(0x8d83c20)') called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestRunner.pm line 54
Test::Unit::TestRunner::do_run('Test::Unit::TestRunner=HASH(0x8d83c20)', 'Test::Unit::TestSuite=HASH(0x96f3348)', 0) called at /usr/lib/perl5/site_perl/5.8.5/Test/Unit/TestRunner.pm line 183
Test::Unit::TestRunner::start('Test::Unit::TestRunner=HASH(0x8d83c20)', 'InitFormTests.pm') called
So something to fix - yes.
And maybe also later find out why running the unit tests does not enable asserts.
KJL
That's easy: The unit tests do everything to convince you that they enable asserts by printing
exporting TWIKI_ASSERTS=1 for extra checking; disable by exporting TWIKI_ASSERTS=0
Assert checking on 1
...but that's a plain lie.
There's a line in
test/bin/TestRunner.pl
just before these print statements which is responsible for the behaviour:
use TWiki; # If you take this out then TestRunner.pl will fail on IndigoPerl
...but if you
use TWiki
, then that happens at compile time,
before the environment variable is set at runtime.
TWiki.pm
uses
Assert.pm
without $ENV{TWiki_ASSERTS}
set if you don't do it manually.
If you comment out that line then assertions work as they should. For IndigoPerl another route should be investigated.
--
HJ
On the actual problem.
I do not have a solution but I see where things go wrong.
It starts at
InitFormTests.pm line line 325.
my $text = setup_formtests( $this, $testweb, "", "formtemplate=\"$testweb.$testform\" templatetopic=\"$testweb.$testtmpl\" IssueName=\"My first defect\" IssueDescription=\"Simple description of problem\" IssueType=\"Enhancement\" History1=\"%ATTACHURL%\" History2=\"%ATTACHURL%\" History3=\"\$percntATTACHURL%\" History4=\"\$percntATTACHURL%\" text=\"\"" );
Note the 3rd parameter is ""
The setup_formtests starts like this (line 173)..
sub setup_formtests {
my ( $this, $web, $topic, $params ) = @_;
$twiki->{webName} = $web;
$twiki->{topicName} = $topic;
So the topic is never set!
And a little further down in line 189
my ( $text, $tmpl ) = TWiki::UI::Edit::init_edit( $twiki, 'myedit' );
So we rush to lib/UI/Edit.pm and find the init_edit sub and it starts like
sub init_edit {
my ( $session, $templateName ) = @_;
my $query = $session->{cgiQuery};
my $webName = $session->{webName};
my $topic = $session->{topicName};
my $user = $session->{user};
So the $topic is never set.
$topic is used quite many places in init_edit and it does not seem like this sub is supposed to work without a $topic defined. If it is it is not documented in any comments.
At line 319 we get ready for the kill. We call
$tmpl = $session->handleCommonTags( $tmpl, $webName, $topic );
So we rush to lib/TWiki.pm where we find at line 2555
sub handleCommonTags {
my( $this, $text, $theWeb, $theTopic ) = @_;
ASSERT($this->isa( 'TWiki')) if DEBUG;
ASSERT($theWeb) if DEBUG;
ASSERT($theTopic) if DEBUG;
So no $theTopic and we have the error.
What I cannot see is why the author of the unit test case tried to call the function without a topic name defined.
But it seems like this is a test case error more than a code error to me.
Last step in the analysis is to blame it on someone with svn blame.
12444 ThomasWeigert my $text = setup_formtests( $this, $testweb, "", "formtemplate=\"$testweb.$testform\" templatetopic=\"$testweb.$testtmpl\" IssueName=\"My first defect\" IssueDescription=\"Simple description of problem\" IssueType=\"Enhancement\" History1=\"%ATTACHURL%\" History2=\"%ATTACHURL%\" History3=\"\$percntATTACHURL%\" History4=\"\$percntATTACHURL%\" text=\"\"" );
KJL
Based on my analysis above I am not considering this a release blocker. Downgrading to normal.
KJL
Sorry, did not notice this excitement... will handle..... --
TW
Look at the analysis above....
I am not sure why you think this is a problem. Based on my experience, I don't think it is required that a
$web
or
$topic
are passed to
handleCommonTags
. Maybe these ASSERT are a little to overzelous? --
TW
They are presented in the documentation as required parameters. so you should honour that. They are required for a good reason; they are used in expanding tags, and if you don't provide values, some tag will expand incorrectly. They are also passed on to plugins, which may go belly-up if they are not present.
CC
As of 13599, these tests pass, so closing this.
CC