Boolean and logging

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
    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’)

Any ideas?

Cheers

Aidy

On 28.03.2008 15:58, [email protected] wrote:

 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.

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?

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’) }

Cheers

robert

On Mar 28, 9:28 am, Robert K. [email protected] wrote:

 if target.kind_of? String
  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.

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.

account’) }

Could you give a brief explanation of this code please?

Aidy

On 31 Mar, 16:56, Robert K. [email protected] wrote:

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

Does that help?

Surely does. Thanks Robert, your a linguist.

Aidy

2008/3/31, [email protected]
[email protected]:

def does_the_html_include(target)
def test_results(result, *msg)
Good point.
end
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’)

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

On 1 Apr, 14:23, Robert K. [email protected] wrote:

irb(main):007:1> end
from (irb):10
from :0
irb(main):011:0>

Kind regards

robert


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

Wasn’t ironic Robert, I studied #yield and blocks when you mentioned
them. It was exactly what I was looking for. Probably one of the most
powerful assets of Ruby and I missed it.

Cheers

Aidy

2008/4/1, aidy [email protected]:

On 31 Mar, 16:56, Robert K. [email protected] wrote:

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

Does that help?

Surely does. Thanks Robert, your a linguist.

Hm, not sure whether that was irony or not. :slight_smile:

Maybe this helps:

irb(main):001:0> def test(yes,no)
irb(main):002:1> if yield
irb(main):003:2> puts yes
irb(main):004:2> else
irb(main):005:2* puts no
irb(main):006:2> end
irb(main):007:1> end
=> nil
irb(main):008:0> test(“ok”, “not ok”) { 1 > 2 }
not ok
=> nil
irb(main):009:0> test(“ok”, “not ok”) { 1 < 2 }
ok
=> nil
irb(main):010:0> test(“ok”, “not ok”)
LocalJumpError: no block given
from (irb):2:in `test’
from (irb):10
from :0
irb(main):011:0>

Kind regards

robert

2008/4/2, aidy [email protected]:

On 1 Apr, 14:23, Robert K. [email protected] wrote:

2008/4/1,aidy[email protected]:

Surely does. Thanks Robert, your a linguist.

Hm, not sure whether that was irony or not. :slight_smile:

Wasn’t ironic Robert, I studied #yield and blocks when you mentioned
them. It was exactly what I was looking for. Probably one of the most
powerful assets of Ruby and I missed it.

Ah! I’m glad I could help. And, yes, blocks (anonymous functions) are
one of the best features in Ruby - totally agree.

Kind regards

robert