in reply to Test::More and is_array

IIRC, eq_array is not actually a test function, but instead returns a boolean which you pass manually to ok().

That said, the nested structure tests in Test::More are so-so at best (although they seem to be getting a little better). I would suggest using Test::Deep instead.

-stvn

Replies are listed 'Best First'.
Re^2: Test::More and is_array
by geektron (Curate) on Jun 09, 2005 at 20:34 UTC
    Test::Deep just to verify that the list is, in fact, a list? I'll have to look into it.
      Test::Deep just to verify that the list is, in fact, a list? I'll have to look into it.

      You seem to want to do more than just that. You updated the OP to say that you wanted this:

      ok( ref( $list ) eq 'ARRAY', 'returned a list' ); ok( scalar( @$list ), 'returned a populated list' ); ok( ref( $list->[0] ) eq 'HASH', 'first element is a hashref ...' );
      But that IMO is only minimally testing your structure. With Test::Deep you could do this:
      cmp_deeply( $list, all( isa('ARRAY'), array_each( all( isa('HASH'), { option => re(...), menu => ignore() } ) ) ) );
      This code would test that $list is an ARRAY reference, then that all the elements in it are HASH references, then it will check the structure of the hash (this part I made up as an example), to confirm that it has a key 'option' whose value matches a given reg-exp, and that it has a 'menu' key, but you can safely ignore the value in the test.

      With Test::Deep you can test the entire structure while only go as deeply as needed in the specifics of that structure. It's really powerful stuff IMO :)

      -stvn
        i do like that ... i was being a bit lazy with the testing, since i just realized i may have to change my class layout ...

        the "is each element a hashref" test was an afterthought, and i really didn't want to have to fetch out the options again just to "test" it, because it seemed to be ... more prone to error.

        this is my second attempt at "test-first" design, and it's making me beat my head against the wall BEFORE i have much code written, so i guess that's a good thing™