boolean and logging

T

testautomated6

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
 
R

Robert Klemme

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.
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?

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
 
T

testautomated6

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.
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.
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?

Aidy
 
R

Robert Klemme

2008/3/31 said:
Good point.



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
 
R

Robert Klemme

2008/4/1 said:
Surely does. Thanks Robert, your a linguist.

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

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
 
A

aidy

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

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

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
 
R

Robert Klemme

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top