initialized kettu on gitorious
[kettu:kettu.git] / features / step_definitions / common_culerity_steps.rb
1 require 'culerity'
2
3 When /I press "(.*)"/ do |button|
4   button = [$browser.button(:text, button), $browser.button(:id, button)].find(&:exist?)
5   button.click
6   When 'I wait for the AJAX call to finish'
7 end
8
9 When /I click "(.*)"/ do |link|
10   When "I follow \"#{link}\""
11 end
12
13 When /I follow "(.*)"/ do |link|
14   _link = [[:text, /^#{Regexp.escape(link)}$/], [:id, link], [:title, link]].map{|args| $browser.link(*args)}.find{|__link| __link.exist?}
15   raise "link \"#{link}\" not found" unless _link
16   _link.click
17   When 'I wait for the AJAX call to finish'
18 end
19
20 When /I follow \/(.*)\// do |link|
21   $browser.link(:text, /#{link}/).click
22   When 'I wait for the AJAX call to finish'
23 end
24
25 When /I fill in "(.*)" with "(.*)"/ do |field, value|
26   find_by_label_or_id(:text_field, field).set value
27 end
28
29 When /I attach "(.*)" to "(.*)"/ do |value, field|
30   $browser.file_field(:id, find_label(field).for).set(value)
31 end
32
33 When /I check "(.*)"/ do |field|
34   find_by_label_or_id(:check_box, field).set true
35 end
36
37 def find_by_label_or_id(element, field)
38   begin
39     $browser.send(element, :id, find_label(/#{field}/).for)
40   rescue #Celerity::Exception::UnknownObjectException
41     $browser.send element, :id, field
42   end
43 end
44
45 When /^I uncheck "(.*)"$/ do |field|
46   $browser.check_box(:id, find_label(field).for).set(false)
47 end
48
49 When /^I select "([^"]+)" from "([^"]+)"$/ do |value, field|
50   find_by_label_or_id(:select_list, field).select value
51 end
52
53 When /^I select "([^\"]*)"$/ do |value|
54   $browser.option(:text => value).select
55 end
56
57 When /I choose "(.*)"/ do |field|
58   $browser.radio(:id, find_label(field).for).set(true)
59 end
60
61 When /I go to the (.+)/ do |path|
62   $browser.goto host + path_to(path)
63   When 'I wait for the AJAX call to finish'
64 end
65
66 When /^I wait for the AJAX call to finish$/ do
67   # puts 'waiting for the AJAX call ...'
68   $browser.wait_while do
69     begin
70       count = $browser.execute_script("window.running_ajax_calls").to_i
71       count.to_i > 0
72     rescue => e
73       if e.message.include?('HtmlunitCorejsJavascript::Undefined')
74         raise "For 'I wait for the AJAX call to finish' to work please include culerity.js after including jQuery. If you don't use jQuery please rewrite culerity.js accordingly."
75       else
76         raise(e)
77       end
78     end
79   end
80   sleep 0.5
81 end
82
83 When /^I visit "([^\"]+)"$/ do |url|
84   $browser.goto host + url
85 end
86
87 Then /^I should see "([^\"]*)"$/ do |text|
88   Then "I should see /#{Regexp.escape(text)}/"
89 end
90
91 Then /^I should see \/(.*)\/$/ do |text|
92   # if we simply check for the browser.html content we don't find content that has been added dynamically, e.g. after an ajax call
93   div = $browser.div(:text, /#{text}/)
94   begin
95     div.html
96   rescue
97     raise("div with '#{text}' not found")
98   end
99 end
100
101 Then /I should not see "(.*)"/ do |text|  
102   div_nil = false 
103   if ($browser.div(:text, /#{text}/) rescue nil)
104     div_nil = true 
105   else 
106     if $browser.div(:text, /#{text}/).style.match(/-9999px/)
107       div_nil = true
108     end
109   end
110   div_nil.should be_true
111 end
112
113 Then /I should see the text "(.*)"/ do |text|
114   $browser.html.should include(text)
115 end
116
117 Then /I should not see the text "(.*)"/ do |text|
118   $browser.html.should_not include(text)
119 end
120
121 Then /I should see no link "([^\"]+)"/ do |text|
122   $browser.link(:text => text).should_not exist
123 end
124
125 Then /I should not find the page "([^\"]+)"/ do |url|
126   no_exception = false
127   begin
128     $browser.goto host + url
129     no_exception = true
130   rescue => e
131     e.message.should =~ /404/
132   end
133   no_exception.should be_false
134 end
135
136 Then /^"([^\"]*)" should be chosen$/ do |field|
137   find_by_label_or_id(:radio, field).should be_checked
138 end
139
140 Then /^"([^\"]*)" should be checked$/ do |field|
141   find_by_label_or_id(:check_box, field).should be_checked
142 end
143
144 Then /^"([^\"]*)" should not be checked$/ do |field|
145   find_by_label_or_id(:check_box, field).should_not be_checked
146 end
147
148 Then /^"([^\"]*)" should be selected$/ do |selection|
149   $browser.option(:text => selection).should be_selected
150 end
151
152 When 'show response' do
153   p $browser.url
154   open_response_in_browser
155 end
156
157
158 def find_label(text)
159   $browser.label :text, text
160 end
161
162 def open_response_in_browser
163   tmp_file = '/tmp/culerity_results.html'
164   FileUtils.rm_f tmp_file
165   File.open(tmp_file, 'w') do |f|
166     f << $browser.div(:id, 'container').html
167   end
168   `open #{tmp_file}`
169 end