4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/kameleon/dsl/see.rb', line 4
def see(*content)
options = (content)
case options.class.name
when 'String'
session.should rspec_world.have_content(options)
when 'Array'
options.each do |content_part|
see(content_part)
end
when 'Hash'
options.each_pair do |value, locator|
case value.class.name
when 'Symbol'
case value
when :button, :buttons
one_or_all(locator).each do |selector|
session.should rspec_world.have_button(selector)
end
when :checked, :unchecked
one_or_all(locator).each do |selector|
session.should rspec_world.send("have_#{value.to_s}_field", selector)
end
when :disabled, :readonly
one_or_all(locator).each do |selector|
see :field => selector
case session.driver
when Capybara::Selenium::Driver
session.find_field(selector)[value].should == 'true'
when Capybara::RackTest::Driver
session.find_field(selector)[value].should ==(value.to_s)
end
end
when :empty
one_or_all(locator).each do |selector|
see :field => selector
session.find_field(selector).value.to_s.should == ''
end
when :error_message_for, :error_messages_for
one_or_all(locator).each do |selector|
session.find(:xpath, '//div[@id="error_explanation"]').should rspec_world.have_content(selector.capitalize)
end
when :field, :fields
one_or_all(locator).each do |selector|
session.should rspec_world.have_field(selector)
end
when :image, :images
one_or_all(locator).each do |selector|
session.should rspec_world.have_xpath("//img[@alt=\"#{selector}\"] | //img[@src=\"#{selector}\"]")
end
when :selected
locator.each_pair do |selected_value, selected_locator|
session.should rspec_world.have_select(selected_locator, :selected => selected_value)
end
when :unselected
locator.each_pair do |selected_value, selected_locator|
session.should rspec_world.have_no_select(selected_locator, :selected => selected_value)
end
when :link, :links
if locator.respond_to?(:each_pair)
locator.each_pair do |link_text, url|
session.should rspec_world.have_link(link_text, :href => url)
end
else
one_or_all(locator).each { |text| session.should rspec_world.have_link(text) }
end
when :ordered
nodes = session.all(:xpath, locator.collect { |n| "//node()[text()= \"#{n}\"]" }.join(' | '))
nodes.map(&:text).should == locator
else
raise("User can not see #{value} - you need to teach him how")
end
when 'Fixnum'
session.should ::Capybara::RSpecMatchers::HaveMatcher.new(*(get_selector(locator) << {:count => value}))
else
session.should rspec_world.have_field(locator, :with => value)
end
end
else
raise "Not Implemented Structure #{options} :: #{options.class}"
end
end
|