From: Robert Klemme Date: 2008-04-01T00:56:29+09:00 Subject: Re: boolean and logging 2008/3/31, testautomated6@googlemail.com : > On Mar 28, 9:28 am, Robert Klemme 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