From: <chr...@us...> - 2006-05-09 23:37:23
|
Revision: 856 Author: chromatic Date: 2006-05-09 16:37:11 -0700 (Tue, 09 May 2006) ViewCVS: http://svn.sourceforge.net/everydevel/?rev=856&view=rev Log Message: ----------- r16551@windwheel: chromatic | 2006-05-09 16:36:57 -0700 Ported tests for nodeball node to Test::Class style. Modified Paths: -------------- trunk/ebase/MANIFEST trunk/ebase/lib/Everything/Node/nodeball.pm trunk/ebase/t/Node/nodeball.t Added Paths: ----------- trunk/ebase/lib/Everything/Node/Test/nodeball.pm Property Changed: ---------------- trunk/ebase/ Property changes on: trunk/ebase ___________________________________________________________________ Name: svk:merge - a6810612-c0f9-0310-9d3e-a9e4af8c5745:/ebase/offline:16549 + a6810612-c0f9-0310-9d3e-a9e4af8c5745:/ebase/offline:16551 Modified: trunk/ebase/MANIFEST =================================================================== --- trunk/ebase/MANIFEST 2006-05-08 22:10:47 UTC (rev 855) +++ trunk/ebase/MANIFEST 2006-05-09 23:37:11 UTC (rev 856) @@ -90,6 +90,7 @@ lib/Everything/Node/Test/dbtable.pm lib/Everything/Node/Test/htmlcode.pm lib/Everything/Node/Test/node.pm +lib/Everything/Node/Test/nodeball.pm lib/Everything/Node/Test/nodegroup.pm lib/Everything/Node/Test/nodetype.pm lib/Everything/Node/Test/setting.pm Added: trunk/ebase/lib/Everything/Node/Test/nodeball.pm =================================================================== --- trunk/ebase/lib/Everything/Node/Test/nodeball.pm (rev 0) +++ trunk/ebase/lib/Everything/Node/Test/nodeball.pm 2006-05-09 23:37:11 UTC (rev 856) @@ -0,0 +1,191 @@ +package Everything::Node::Test::nodeball; + +use strict; +use warnings; + +use base 'Everything::Node::Test::nodegroup'; + +use SUPER; +use Test::More; + +*Everything::Node::nodeball::SUPER = \&UNIVERSAL::SUPER; + +sub test_dbtables :Test( 2 ) +{ + my $self = shift; + my $module = $self->node_class(); + can_ok( $module, 'dbtables' ); + my @tables = $module->dbtables(); + is_deeply( \@tables, [ 'setting', 'node' ], + 'dbtables() should return node tables' ); +} + +sub test_extends :Test( +1 ) +{ + my $self = shift; + my $module = $self->node_class(); + ok( $module->isa( 'Everything::Node::nodegroup' ), + "$module should extend nodegroup" ); + $self->SUPER(); +} + +sub test_insert :Test( 10 ) +{ + my $self = shift; + my $node = $self->{node}; + my $db = $self->{mock_db}; + + $node->set_true( 'setVars' ) + ->set_series( SUPER => 0, 1, 0 ) + ->set_series( getVars => 1 ); + + $node->{title} = 'title!'; + + $db->set_series( getNode => '', $node ); + $self->{errors} = []; + + is( $node->insert( 'user' ), 0, + 'insert() should return 0 if SUPER() insert fails' ); + + like( $self->{errors}[0][0], qr/bad insert id:/, '... logging error' ); + ok( exists $node->{vars}, '... vivifying node "vars" field' ); + + is( $node->next_call(), 'getVars', '... and calling getVars() on node' ); + + my ($method, $args) = $node->next_call(); + is( $method, 'SUPER', '... calling super method' ); + is( $args->[1], 'user', '... and passing user' ); + + is( $node->insert( 2 ), 1, '... returning node_id if insert succeeds' ); + + ( $method, $args ) = $node->next_call(2); + is( $method, 'setVars', '... calling setVars()' ); + is_deeply( $args->[1], + { + author => 'ROOT', + version => '0.1.1', + description => 'No description', + }, '... with default vars' ); + + $node->clear(); + $node->insert(); + + ( $method, $args ) = $node->next_call(2); + is( $args->[1]->{author}, 'title!', + '... respecting given title when creating default vars' ); +} + +sub test_get_vars :Test( 2 ) +{ + my $self = shift; + my $node = $self->{node}; + + $node->set_always( getHash => 10 ); + + is( $node->getVars(), 10, 'getVars() should call getHash()' ); + my ( $method, $args ) = $node->next_call(); + is( $args->[1], 'vars', '... with appropriate arguments' ); +} + +sub test_set_vars :Test( 2 ) +{ + my $self = shift; + my $node = $self->{node}; + + $node->set_always( setHash => 11 ); + + is( $node->setVars( 12 ), 11, 'setVars() should call setHash()' ); + my ( $method, $args ) = $node->next_call(); + is( join( '-', @$args ), "$node-12-vars", '... with appropriate args' ); +} + +sub test_has_vars :Test( 1 ) +{ + my $self = shift; + my $node = $self->{node}; + + ok( $node->hasVars(), 'hasVars() should return true' ); +} + +sub test_field_to_XML :Test( 4 ) +{ + my $self = shift; + my $node = $self->{node}; + + my @saveargs; + local *Everything::Node::setting::fieldToXML; + *Everything::Node::setting::fieldToXML = sub { @saveargs = @_ }; + + my @args = ( 'doc', '', 1 ); + $node->set_always( SUPER => 4 ); + + is( $node->fieldToXML(@args), 4, + 'fieldToXML() should call SUPER() unless handling a "vars" field' ); + + my ($method, $args) = $node->next_call(); + is_deeply( $args, [ $node, @args ], '... passing all arguments' ); + + $args[1] = 'vars'; + is( $node->fieldToXML( @args ), 4, + '... delegating to setting nodetype if handling "vars" field' ); + is( "@saveargs", "$node @args", '... passing along its arguments' ); +} + +sub test_xml_tag :Test( 5 ) +{ + my $self = shift; + my $node = $self->{node}; + + my @saveargs; + local *Everything::Node::setting::xmlTag; + *Everything::Node::setting::xmlTag = sub { + @saveargs = @_; + }; + + $node->set_always( SUPER => 1 ) + ->set_series( getTagName => 0, 'vars' ); + + is( $node->xmlTag( $node ), 1, + 'xmlTag() should call SUPER() unless XMLifying a "vars" field' ); + + # handle these out of order + my $method = $node->next_call(); + (undef, my $args) = $node->next_call(); + is( $args->[1], $node, '... passing tag' ); + + is( $method, 'getTagName', '... calling getTagName() on tag' ); + + is( $node->xmlTag( $node ), 2, + '... delegating to settings node if passed "vars" field' ); + is( "$node $node", "@saveargs", '... passing node and tag' ); +} + + +sub test_apply_xml_fix :Test( 4 ) +{ + my $self = shift; + my $node = $self->{node}; + + my @saveargs; + local *Everything::Node::setting::applyXMLFix; + *Everything::Node::setting::applyXMLFix = sub { @saveargs = @_ }; + + my $fix = { fixBy => '' }; + my @args = ( $fix, 1 ); + + $node->set_always( SUPER => 18 ); + + is( $node->applyXMLFix( @args ), 18, + 'applyXMLFix() should call SUPER() unless fixing up "setting" node' ); + + my ($method, $args) = $node->next_call(); + is_deeply( $args, [ $node, $fix, 1 ], '... passing args' ); + + $fix->{fixBy} = 'setting'; + + is( $node->applyXMLFix( @args ), 3, + '... delegating to setting nodetype when fixing "setting" field' ); + is( "@saveargs", "$node @args", '... and should pass same arguments' ); +} + +1; Property changes on: trunk/ebase/lib/Everything/Node/Test/nodeball.pm ___________________________________________________________________ Name: svn:mime-type + text/plain; charset=UTF-8 Name: svn:eol-style + native Modified: trunk/ebase/lib/Everything/Node/nodeball.pm =================================================================== --- trunk/ebase/lib/Everything/Node/nodeball.pm 2006-05-08 22:10:47 UTC (rev 855) +++ trunk/ebase/lib/Everything/Node/nodeball.pm 2006-05-09 23:37:11 UTC (rev 856) @@ -37,10 +37,9 @@ sub insert { my ( $this, $USER ) = @_; - $this->{vars} ||= ''; + $this->{vars} ||= ''; + my $VARS = $this->getVars(); - my $VARS = $this->getVars(); - # If the node was not inserted with some vars, we need to set some. unless ($VARS) { @@ -59,7 +58,7 @@ $this->setVars( $VARS, $USER ); } - my $insert_id = $this->SUPER(); + my $insert_id = $this->SUPER( $USER ); return $insert_id if $insert_id; Everything::logErrors("Got bad insert id: $insert_id!"); @@ -97,20 +96,20 @@ return Everything::Node::setting::fieldToXML( $this, $DOC, $field, $indent ) if $field eq 'vars'; - return $this->SUPER(); + return $this->SUPER( $DOC, $field, $indent ); } sub xmlTag { my ( $this, $TAG ) = @_; - my $tagname = $TAG->getTagName(); + my $tagname = $TAG->getTagName(); # Since we derive from nodegroup, but also have some setting type # functionality, we need to use the setting stuff here. return Everything::Node::setting::xmlTag( $this, $TAG ) if $tagname =~ /vars/i; - return $this->SUPER(); + return $this->SUPER( $TAG ); } sub applyXMLFix @@ -120,7 +119,7 @@ return Everything::Node::setting::applyXMLFix( $this, $FIX, $printError ) if $FIX->{fixBy} eq 'setting'; - return $this->SUPER(); + return $this->SUPER( $FIX, $printError ); } 1; Modified: trunk/ebase/t/Node/nodeball.t =================================================================== --- trunk/ebase/t/Node/nodeball.t 2006-05-08 22:10:47 UTC (rev 855) +++ trunk/ebase/t/Node/nodeball.t 2006-05-09 23:37:11 UTC (rev 856) @@ -1,156 +1,4 @@ -#!/usr/bin/perl +#! perl -use strict; -use warnings; - -BEGIN -{ - chdir 't' if -d 't'; - use lib 'lib'; -} - -use Test::More tests => 29; -use Test::MockObject; - -my ( $method, $args, $result ); -my $mock = Test::MockObject->new(); - -my $module = 'Everything::Node::nodeball'; -use_ok( $module ) or exit; - -ok( $INC{'Everything.pm'}, 'nodeball should use Everything' ); - -ok( $module->isa( 'Everything::Node::nodegroup' ), - 'nodeball should extend nodegroup' ); - -can_ok( $module, 'dbtables' ); -my @tables = $module->dbtables(); -is_deeply( \@tables, [qw( setting node )], - 'dbtables() should return node tables' ); - -# insert() -{ - my ( $error, $vars ); - - local ( *Everything::logErrors, *insert ); - - *Everything::logErrors = sub { $error = shift }; - $mock->set_true('setVars')->set_series( SUPER => 0, 1, 0 )->set_series( - getNode => '', - bless { title => 'title' }, 'Everything::Node' - )->set_series( getVars => 1 ); - - *insert = \&Everything::Node::nodeball::insert; - - $mock->{DB} = $mock; - - is( insert($mock), 0, 'insert() should return 0 if SUPER() insert fails' ); - like( $error, qr/bad insert id:/, '... and should log error' ); - ok( exists $mock->{vars}, '... should vivify node "vars" field' ); - - is( $mock->next_call(), 'getVars', '... and call getVars() on node' ); - is( $mock->next_call(), 'SUPER', '... calling super method' ); - - is( insert( $mock, 2 ), 1, '... should return node_id if insert succeeds' ); - - ( $method, $args ) = $mock->next_call(3); - is( $method, 'setVars', '... calling setVars()' ); - is_deeply( - $args->[1], - { - author => 'ROOT', - version => '0.1.1', - description => 'No description', - }, - '... with default vars' - ); - - $mock->clear(); - - insert($mock); - ( $method, $args ) = $mock->next_call(3); - is( $args->[1]->{author}, - 'title', '... should respect given title when creating default vars' ); -} - -# getVars() -$mock->set_always( getHash => 10 )->clear(); - -is( Everything::Node::nodeball::getVars($mock), - 10, 'getVars() should call getHash()' ); -( $method, $args ) = $mock->next_call(); -is( $args->[1], 'vars', '... with appropriate arguments' ); - -# setVars() -$mock->set_always( setHash => 11 ); - -is( Everything::Node::nodeball::setVars( $mock, 12 ), - 11, 'setVars() should call setHash()' ); -( $method, $args ) = $mock->next_call(); -is( join( '-', @$args ), "$mock-12-vars", '... with appropriate arguments' ); - -# hasVars() -ok( Everything::Node::nodeball::hasVars(), 'hasVars() should return true' ); - -# fieldToXML() -{ - my @saveargs; - local *Everything::Node::setting::fieldToXML; - *Everything::Node::setting::fieldToXML = sub { - @saveargs = @_; - }; - - my @args = ( $mock, 'doc', '', 1 ); - $mock->set_always( SUPER => 4 )->clear(); - - is( Everything::Node::nodeball::fieldToXML(@args), - 4, 'fieldToXML() should call SUPER() unless handling a "vars" field' ); - - $args[2] = 'vars'; - is( scalar Everything::Node::nodeball::fieldToXML(@args), - 4, '... should delegate to setting nodetype if handling "vars" field' ); - is( "@saveargs", "@args", '... passing along its arguments' ); -} - -# xmlTag() -{ - my @saveargs; - local *Everything::Node::setting::xmlTag; - *Everything::Node::setting::xmlTag = sub { - @saveargs = @_; - }; - - $mock->set_always( SUPER => 1 )->set_series( getTagName => 0, 'vars' ) - ->clear(); - - is( Everything::Node::nodeball::xmlTag( $mock, $mock ), - 1, 'xmlTag() should call SUPER() unless XMLifying a "vars" field' ); - is( $mock->next_call(), 'getTagName', '... calling getTagName() on tag' ); - - is( scalar Everything::Node::nodeball::xmlTag( $mock, $mock ), - 2, '... should delegate to settings node if passed "vars" field' ); - is( "$mock $mock", "@saveargs", '... passing node and tag' ); -} - -# applyXMLFix() -{ - my @saveargs; - local *Everything::Node::setting::applyXMLFix; - *Everything::Node::setting::applyXMLFix = sub { - @saveargs = @_; - }; - - my $fix = { fixBy => '' }; - my @args = ( $mock, $fix, 1 ); - - $mock->set_always( SUPER => 18 ); - - is( Everything::Node::nodeball::applyXMLFix(@args), - 18, - 'applyXMLFix() should call SUPER() unless fixing up "setting" field' ); - $fix->{fixBy} = 'setting'; - is( scalar Everything::Node::nodeball::applyXMLFix(@args), - 3, - '... should delegate to setting nodetype when fixing "setting" field' ); - is( "@args", "@saveargs", '... and should pass same arguments' ); -} +use Everything::Node::Test::nodeball; +Everything::Node::Test::nodeball->runtests(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |