Re: Object Introspection for Existence of Methods: How?

2015-03-23 Thread Tom Browder
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?

2015-03-23 Thread Tom Browder
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?

2015-03-23 Thread Elizabeth Mattijsen
 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?

2015-03-23 Thread Tom Browder
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?

2015-03-23 Thread Bruce Gray

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?

2015-03-23 Thread B. Estrade
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?

2015-03-23 Thread Henk van Oers


[...]

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?

2015-03-23 Thread Carl Mäsak
(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?

2015-03-23 Thread Tom Browder
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?

2015-03-23 Thread Tom Browder
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?

2015-03-22 Thread Henk van Oers


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?

2015-03-22 Thread Henk van Oers


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?

2015-03-22 Thread Tom Browder
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?

2015-03-22 Thread Tom Browder
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?

2015-03-22 Thread Henk van Oers


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?

2015-03-20 Thread Tobias Leich
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?

2015-03-20 Thread Will Coleda
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?

2015-03-20 Thread Tom Browder
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?

2015-03-20 Thread Will Coleda
 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?

2015-03-20 Thread Tom Browder
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