Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[perl #41812] [PATCH 6/6] [lib] Test::More - add isa_ok()

7 views
Skip to first unread message

Sam Vilain

unread,
Mar 13, 2007, 7:20:28 PM3/13/07
to bugs-bi...@rt.perl.org
# New Ticket Created by Sam Vilain
# Please include the string: [perl #41812]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=41812 >


---
runtime/parrot/library/Test/More.pir | 80 ++++++++++++++++++++++++
++++++++++
t/library/test_more.t | 38 ++++++++++++++++-
2 files changed, 117 insertions(+), 1 deletions(-)

diff --git a/runtime/parrot/library/Test/More.pir b/runtime/parrot/
library/Test/More.pir
index f9f6673..7a1d18d 100644
--- a/runtime/parrot/library/Test/More.pir
+++ b/runtime/parrot/library/Test/More.pir
@@ -19,6 +19,7 @@ Test::More - Parrot extension for testing modules
.IMPORT( 'Test::More', 'isnt', _ )
.IMPORT( 'Test::More', 'is_deeply', _ )
.IMPORT( 'Test::More', 'like', _ )
+ .IMPORT( 'Test::More', 'isa_ok', _ )

# set a test plan
plan( 13 )
@@ -47,6 +48,11 @@ Test::More - Parrot extension for testing modules
like( 'foo', 'f o**{2}', 'passing regex compare with diagnostic' )
.end

+ $P0 = getclass "Moose"
+ $P0.new()
+
+ isa_ok($P0, "Moose", "new Moose")
+
=head1 DESCRIPTION

C<Test::More> is a pure-Parrot library for testing modules. It
provides
@@ -943,6 +949,80 @@ actually skipped. Arguments are optional.
test.'skip'()
.end

+=item C<isa_ok( pmc, class, name )>
+
+Pass if the pmc passed "isa" class. The "name" passed in is a
+description of what it is you've passed in, not a comment. It is
+presented as "name isa class" in the description.
+
+Good input: "C<new MyObject>", "C<return from bar()>"
+
+Bad input: "C<test that the return from Foo is correct type>"
+
+=cut
+
+.sub isa_ok :multi(pmc, string)
+ .param pmc thingy
+ .param string class_name
+ .param string name :optional
+ .param int got_name :opt_flag
+
+ .local pmc test
+ find_global test, 'Test::More', '_test'
+
+ .local string _name
+ _name = name
+ if got_name goto great
+ _name = "object"
+great:
+ $S0 = _name . " isa "
+ $S0 = $S0 . class_name
+
+ $I0 = isa thingy, class_name
+ test.'ok'($I0, $S0)
+ if $I0 goto out
+ _isa_ok_diag(test, class_name, _name, thingy)
+out:
+.end
+
+.sub isa_ok :multi(pmc, pmc)
+ .param pmc thingy
+ .param pmc class
+ .param string name :optional
+ .param int got_name :opt_flag
+
+ .local pmc test
+ find_global test, 'Test::More', '_test'
+
+ .local string _name, class_name
+ _name = name
+ if got_name goto great
+ _name = "object"
+great:
+ $S0 = _name . " isa "
+ class_name = classname class
+ $S0 = $S0 . class_name
+
+ $I0 = isa thingy, class
+ test.'ok'($I0, $S0)
+ if $I0 goto out
+ _isa_ok_diag(test, class_name, _name, thingy)
+out:
+.end
+
+.sub _isa_ok_diag
+ .param pmc test
+ .param string class_name
+ .param string name
+ .param pmc thingy
+ $S0 = name . " isn't a "
+ $S0 = $S0 . class_name
+ $S0 = $S0 . " it's a "
+ $S1 = typeof thingy
+ $S0 = $S0 . $S1
+ test.'diag'($S0)
+.end
+
.sub _make_diagnostic
.param string received
.param string expected
diff --git a/t/library/test_more.t b/t/library/test_more.t
index b7aa317..17b0671 100644
--- a/t/library/test_more.t
+++ b/t/library/test_more.t
@@ -26,6 +26,7 @@
.IMPORT( 'Test::More', 'like' )
.IMPORT( 'Test::More', 'skip' )
.IMPORT( 'Test::More', 'is_deeply' )
+ .IMPORT( 'Test::More', 'isa_ok' )
.IMPORT( 'Test::Builder::Tester', 'plan' )
.IMPORT( 'Test::Builder::Tester', 'test_out' )
.IMPORT( 'Test::Builder::Tester', 'test_diag' )
@@ -33,7 +34,7 @@
.IMPORT( 'Test::Builder::Tester', 'test_pass' )
.IMPORT( 'Test::Builder::Tester', 'test_test' )

- plan( 55 )
+ plan( 60 )
test_skip()
test_ok()
test_is()
@@ -41,6 +42,7 @@
test_is_deeply()
test_diagnostics()
test_isnt()
+ test_isa_ok()

test.'finish'()
.end
@@ -411,3 +413,37 @@


.end
+
+.sub test_isa_ok
+ .local pmc dog, terrier, daschund, Spot, Sossy
+
+ dog = newclass "dog"
+ terrier = subclass dog, "terrier"
+ daschund = subclass dog, "daschund"
+
+ Spot = new "terrier"
+ Sossy = new "daschund"
+
+ test_pass( 'Spot isa terrier' )
+ isa_ok(Spot, "terrier", "Spot")
+ test_test( 'passing isa_ok for PMC/string (class =)' )
+
+ test_pass( 'Spot isa dog' )
+ isa_ok(Spot, "dog", "Spot")
+ test_test( 'passing isa_ok for PMC/string (super)')
+
+ test_pass( 'Sossy isa daschund' )
+ isa_ok(Sossy, "daschund", "Sossy")
+ test_test( 'passing isa_ok for PMC/PMC (class =)' )
+
+ test_pass( 'Sossy isa dog' )
+ isa_ok(Sossy, "dog", "Sossy")
+ test_test( 'passing isa_ok for PMC/PMC (super)')
+
+ test_fail( 'Spot isa daschund' )
+ test_diag( "Spot isn't a daschund it's a terrier" )
+ isa_ok(Spot, 'daschund', "Spot")
+ test_test( 'failing test isnt() for PMC/string')
+
+.end
+
--
1.5.0.759.g41ffe


0 new messages