Re: Object Introspection for Existence of Methods: How?
On Mon, Mar 23, 2015 at 7:04 AM, Tom Browder tom.brow...@gmail.com wrote: From your and Henk's comments, I think I need to learn a lot more about testing in general. Any recommendations for books on the subject? -Tom
Re: Object Introspection for Existence of Methods: How?
On Mar 23, 2015 3:19 AM, Moritz Lenz mor...@faui2k3.org wrote: That said, I wonder why tests need introspection at all. I mean, you test by doing example calls and comparing to expected example return values. No argument from me. I am at the point of trying to replicate, in Perl 6, somene else's test suite (done for a Perl 5 class) and I have not, in general, been questioning the need for each test. And I must admit I may have gone overboard doing some things just because they can be done in Perl 6 and seem to be in the spirit of the original author's intent. From your and Henk's comments, I think I need to learn a lot more about testing in general. Thanks. Best, -Tom
Re: Object Introspection for Existence of Methods: How?
On 23 Mar 2015, at 14:11, Tom Browder tom.brow...@gmail.com wrote: On Mon, Mar 23, 2015 at 7:04 AM, Tom Browder tom.brow...@gmail.com wrote: From your and Henk's comments, I think I need to learn a lot more about testing in general. Any recommendations for books on the subject? Perl Testing - A Developer’s notebook: http://shop.oreilly.com/product/9780596100926.do Liz
Re: Object Introspection for Existence of Methods: How?
On Mon, Mar 23, 2015 at 10:41 AM, Elizabeth Mattijsen l...@dijkmat.nl wrote: On 23 Mar 2015, at 14:11, Tom Browder tom.brow...@gmail.com wrote: Any recommendations for books on the subject? Perl Testing - A Developer’s notebook: Thanks, Liz--getting it! -Tom
Re: Object Introspection for Existence of Methods: How?
On Mar 23, 2015, at 8:11 AM, Tom Browder tom.brow...@gmail.com wrote: On Mon, Mar 23, 2015 at 7:04 AM, Tom Browder tom.brow...@gmail.com wrote: From your and Henk's comments, I think I need to learn a lot more about testing in general. Any recommendations for books on the subject? -Tom http://shop.oreilly.com/product/9780596100926.do Perl Testing: A Developer's Notebook by Ian Langworth and Chromatic From 2005, but still a fantastic primer on testing in Perl. — Hope this helps, Bruce Gray (Util of PerlMonks)
Re: Object Introspection for Existence of Methods: How?
As good as this book is, it's still Perl 5 specific. So watch out if you're coming from Perl 5 land and Heaven forbid you're looking to do traditional things, you might get scolded for asking a reasonable question. o_O. Brett On Mon, Mar 23, 2015 at 10:41 AM, Elizabeth Mattijsen l...@dijkmat.nl wrote: On 23 Mar 2015, at 14:11, Tom Browder tom.brow...@gmail.com wrote: On Mon, Mar 23, 2015 at 7:04 AM, Tom Browder tom.brow...@gmail.com wrote: From your and Henk's comments, I think I need to learn a lot more about testing in general. Any recommendations for books on the subject? Perl Testing - A Developer’s notebook: http://shop.oreilly.com/product/9780596100926.do Liz
Re: Object Introspection for Existence of Methods: How?
[...] From 2005, but still a fantastic primer on testing in Perl. Sorry Tom. I think you must read a book about OO. Unsubscribing from this list now, Regards, Henk
Re: Object Introspection for Existence of Methods: How?
(resending to p6u) Tom (), Henk (): That doesn't seem to work with private methods. Any trick to accomplish that? What part of 'private' did you mis? Henk, that's an unnecessarily harsh way to say Private methods are private and not visible or testable outside of the class. In my copious spare $dayjob, I teach. Any kind of teaching seems to involve taking both the teacher's stance (of knowing stuff and being able to phrase it right) and the learner's stance (trying to remember what it was like *not* to know something). Pulling that off, and being able to speedily convey people along all intermediate points from not-knowing to knowing, is a weirdly satisfying experience. Questioning the querent's knowledge sends the message (to the querent and to passive beginner onlookers) that it's somehow a bad idea to ask direct questions. It's also a non-constructive response, putting the focus on how much someone knows or doesn't know, rather than the subject matter. The querent responded very well in this case (I think I need to learn a lot more about testing in general.), but lesser provocations than yours have led to flame wars online. (A) Private methods are private and not visible or testable outside of the class. is only the most proximal answer to the question. There's also (B) You can do most things using the MOP, including finding private methods. (Pointed out by moritz++.) $ perl6 -e 'class C { method !foo {} }; say C.^find_private_method(foo)' foo Or how about (C) The underlying reason we only test on the public interface is so that the internal bits of an object can change freely without breaking the test. as a response? Or maybe even (D) There are ways to test just on the *consequences* of a (public) message-send, such that you don't even *want* to introspect the private parts. (Which leads to a more BDD-y style of testing.) Either of these answers helps convey the querent to a better understanding. Teaching is about compassion. Literally feeling with the querent. If you find yourself unable to do that when replying, consider whether you're simply having a bad day. If the problem persists, ask yourself whether your reply is representative of the people on p6u who enjoy helping scurry people forwards along the learning curve. // Carl
Re: Object Introspection for Existence of Methods: How?
On Mon, Mar 23, 2015 at 11:28 AM, B. Estrade estr...@gmail.com wrote: As good as this book is, it's still Perl 5 specific. So watch out if you're coming from Perl 5 land and Heaven forbid you're looking to do traditional things, you might get scolded for asking a reasonable question. o_O. Roger! Thanks, Brett. -Tom
Re: Object Introspection for Existence of Methods: How?
On Mon, Mar 23, 2015 at 5:25 PM, Henk van Oers h...@signature.nl wrote: From 2005, but still a fantastic primer on testing in Perl. Sorry Tom. I think you must read a book about OO. I will go back and review OO, Henk. Thanks. Best, -Tom
Re: Object Introspection for Existence of Methods: How?
On Sun, 22 Mar 2015, Tom Browder wrote: On Fri, Mar 20, 2015 at 2:02 PM, Tom Browder tom.brow...@gmail.com wrote: On Mar 20, 2015 1:51 PM, Tobias Leich em...@froggs.de wrote: if $obj.^can($method_name) {... That doesn't seem to work with private methods. Any trick to accomplish that? What part of 'private' did you mis? If you write private methods you do not need introspection. -- Henk
Re: Object Introspection for Existence of Methods: How?
On Sun, 22 Mar 2015, Tom Browder wrote: On Sun, Mar 22, 2015 at 7:13 PM, Henk van Oers h...@signature.nl wrote: On Sun, 22 Mar 2015, Tom Browder wrote: I'm trying to write a test. To test what? Your own typo's? The tests are for a public Perl 6 module translated from an existing Perl 5 module. Do Perl 6 modules not need tests? Yes they need tests. If so, which ones do they need? The public interface. and which can be left off? The private stuff. You can not test for 'random_name'. This is not about Perl. It's OO-programming. -- Henk
Re: Object Introspection for Existence of Methods: How?
On Fri, Mar 20, 2015 at 2:02 PM, Tom Browder tom.brow...@gmail.com wrote: On Mar 20, 2015 1:51 PM, Tobias Leich em...@froggs.de wrote: if $obj.^can($method_name) {... That doesn't seem to work with private methods. Any trick to accomplish that? -Tom
Re: Object Introspection for Existence of Methods: How?
On Sun, Mar 22, 2015 at 7:13 PM, Henk van Oers h...@signature.nl wrote: On Sun, 22 Mar 2015, Tom Browder wrote: I'm trying to write a test. To test what? Your own typo's? The tests are for a public Perl 6 module translated from an existing Perl 5 module. Do Perl 6 modules not need tests? If so, which ones do they need? and which can be left off? -Tom
Re: Object Introspection for Existence of Methods: How?
On Sun, 22 Mar 2015, Tom Browder wrote: On Sun, Mar 22, 2015 at 6:22 PM, Henk van Oers h...@signature.nl wrote: On Sun, 22 Mar 2015, Tom Browder wrote: On Fri, Mar 20, 2015 at 2:02 PM, Tom Browder tom.brow...@gmail.com wrote: On Mar 20, 2015 1:51 PM, Tobias Leich em...@froggs.de wrote: if $obj.^can($method_name) {... That doesn't seem to work with private methods. Any trick to accomplish that? What part of 'private' did you mis? If you write private methods you do not need introspection. I'm trying to write a test. To test what? Your own typo's? -- Henk
Re: Object Introspection for Existence of Methods: How?
if $obj.^can($method_name) {... Am 20.03.2015 um 19:38 schrieb Tom Browder: I am trying to create a testing subroutine to detect if a class object has a certain method. I want it to look something like this: my $obj = Foo.new(); can_ok($obj, 'method1'); sub can_ok($obj, Str $method_name) { if $obj.{$method_name}:exists { say ok; return True; } else { say not ok; return False; } } A similar function can detect valid attributes, but this or variants I've tried don't. How can I test for the existence of a method? Thanks. Cheers! -Tom
Re: Object Introspection for Existence of Methods: How?
class bar { method foo () {}} my bar $a = bar.new(); say so $a.can(foo); True my Int $b; say so $b.can(foo); False I'm not sure this warrants a new _ok method. On Fri, Mar 20, 2015 at 2:38 PM, Tom Browder tom.brow...@gmail.com wrote: I am trying to create a testing subroutine to detect if a class object has a certain method. I want it to look something like this: my $obj = Foo.new(); can_ok($obj, 'method1'); sub can_ok($obj, Str $method_name) { if $obj.{$method_name}:exists { say ok; return True; } else { say not ok; return False; } } A similar function can detect valid attributes, but this or variants I've tried don't. How can I test for the existence of a method? Thanks. Cheers! -Tom -- Will Coke Coleda
Re: Object Introspection for Existence of Methods: How?
On Mar 20, 2015 1:51 PM, Tobias Leich em...@froggs.de wrote: if $obj.^can($method_name) {... Thanks, Tobias. Cheers! -Tom
Re: Object Introspection for Existence of Methods: How?
use Test; class bar { method foo () {}} ok bar.can(foo), stuff; ok 1 - stuff On Fri, Mar 20, 2015 at 3:00 PM, Tom Browder tom.brow...@gmail.com wrote: On Mar 20, 2015 1:50 PM, Will Coleda w...@coleda.com wrote: class bar { method foo () {}} my bar $a = bar.new(); say so $a.can(foo); Great! I'm not sure this warrants a new _ok method. How would you do it with an existing test? Thanks, Will. Cheers! -Tom -- Will Coke Coleda
Re: Object Introspection for Existence of Methods: How?
On Mar 20, 2015 2:07 PM, Will Coleda w...@coleda.com wrote: use Test; class bar { method foo () {}} ok bar.can(foo), stuff; ok 1 - stuff Oops (I say as I slap my forehead)! Thanks, Will. -Tom