[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-talk
Subject:    Re: boolean and logging
From:       "Robert Klemme" <shortcutter () googlemail ! com>
Date:       2008-03-31 15:56:29
Message-ID: 9e3fd2c80803310856p5e54955m6f719f02b3bfcd7f () mail ! gmail ! com
[Download RAW message or body]

2008/3/31, testautomated6@googlemail.com <testautomated6@googlemail.com>:
> On Mar 28, 9:28 am, Robert Klemme <shortcut...@googlemail.com> wrote:
>
> > On 28.03.2008 15:58, testautomat...@googlemail.com wrote:
>  >
>  > > Hi,
>  >
>  > > I use Ruby and Watir
>  >
>  > > I have a method:
>  >
>  > >   def does_the_html_include(target)
>  > >      puts "HTML text of #{target} is being verified"
>  > >      if target.kind_of? String
>  > >        return $browser.text.include?(target)
>  > >      elsif target.kind_of? Regexp
>  > >        return $browser.text.match(target)
>  > >      end
>  > >    end
>  >
>  > >  I wrap this up in a logger
>  >
>  > >     def test_results(result, *msg)
>  > >       #make true explicit, everything else I am seeing as a failure
>  > >       if result == true
>  >
>  > This is a very bad idea, as only false and nil are false.  Your code
>  > above will especially break with the test because the regexp match will
>  > either return nil or a MatchData object - which both will make "result
>  > == true" false.
>  >
>
>
>   Good point.
>
>
>  >
>  > >         test_status = @test.add_element 'teststatus'
>  > >         test_status.text = 'PASS'
>  > >       else
>  > >         fail = @test.add_element 'teststatus'
>  > >         fail.text = 'FAIL'
>  > >         fail_msg = @test.add_element 'failmessage'
>  > >         fail_msg.text = msg
>  > >       end
>  > >    end
>  >
>  > > However, when I don't want HTML text to appear, eg: an error. I want
>  > > to do something better than this
>  >
>  > > boolean = does_the_html_include('You appear to have an active
>  > > account')
>  > > $test.test_results(!boolean, 'already have registered account')
>  >
>  > I am not sure what exactly it is that you want to improve.  Do you
>  > dislike the local variable?
>
>   Yes. I am writing two lines when I should be writing one.

Well, if that's all that bothers you - you can easily inline it:

$test.test_results(!does_the_html_include('You..'), 'already have
registered account')

>  > def test_results(msg)
>  >    if yield
>  >      # test ok
>  >    else
>  >      # not ok
>  >    end
>  > end
>  >
>  > test_results "foo" { does_the_html_include('You appear to have an active
>  > account') }
>
>   Could you give a brief explanation of this code please?

The method invokes the block and uses the result to determine what to
do (if or else).

Does that help?

Kind regards

robert

-- 
use.inject do |as, often| as.you_can - without end

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic