[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

boolean and logging

testautomated6

3/28/2008 2:59:00 PM

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
7 Answers

Robert Klemme

3/28/2008 4:28:00 PM

0

On 28.03.2008 15:58, testautomated6@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.

> 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

testautomated6

3/31/2008 2:31:00 PM

0

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.

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

Robert Klemme

3/31/2008 3:56:00 PM

0

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

aidy

4/1/2008 11:04:00 AM

0

On 31 Mar, 16:56, Robert Klemme <shortcut...@googlemail.com> 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

Robert Klemme

4/1/2008 1:23:00 PM

0

2008/4/1, aidy <aidy.lewis@googlemail.com>:
> On 31 Mar, 16:56, Robert Klemme <shortcut...@googlemail.com> 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. :-)

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

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

aidy

4/2/2008 12:12:00 PM

0

On 1 Apr, 14:23, Robert Klemme <shortcut...@googlemail.com> wrote:
> 2008/4/1,aidy<aidy.le...@googlemail.com>:
>
> > On 31 Mar, 16:56, Robert Klemme <shortcut...@googlemail.com> 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. :-)
>
> 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
>
> --
> 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

Robert Klemme

4/2/2008 3:12:00 PM

0

2008/4/2, aidy <aidy.lewis@googlemail.com>:
> On 1 Apr, 14:23, Robert Klemme <shortcut...@googlemail.com> wrote:
> > 2008/4/1,aidy<aidy.le...@googlemail.com>:

> > > Surely does. Thanks Robert, your a linguist.
> >
> > Hm, not sure whether that was irony or not. :-)

> 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

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