cutara 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,60 @@
1
+ # -*- encoding : utf-8 -*-
2
+ def run_action_validator(action_name, check_value)
3
+ res = PageObjectWrapper.current_page.send action_name.to_action
4
+ res.should eq check_value
5
+ end
6
+
7
+ def run_action_with_args_validator(action_name, params_string, check_value)
8
+ args = params_string.to_params.values
9
+ res = PageObjectWrapper.current_page.send action_name.to_action, *args
10
+ res.should eq check_value
11
+ end
12
+
13
+ def complex_select_validator(find_in, t_name, find_by, value, check_value)
14
+ current_page = PageObjectWrapper.current_page
15
+ res = current_page.send t_name.to_select, find_in.to_label.to_sym, { find_by.to_label.to_sym => value }
16
+ res.text.should =~ /#{check_value}/
17
+ end
18
+
19
+ def complex_select_regexp_validator(find_in, t_name, find_by, value, check_value)
20
+ current_page = PageObjectWrapper.current_page
21
+ res = current_page.send t_name.to_select, find_in.to_label.to_sym, { find_by.to_label.to_sym => Regexp.new(value) }
22
+ res.text.should =~ /#{check_value}/
23
+ end
24
+
25
+ def select_by_row_num_validator(col_num, find_in, t_name, check_value)
26
+ current_page = PageObjectWrapper.current_page
27
+ res = current_page.send t_name.to_select, find_in.to_label.to_sym, :row => col_num.to_i
28
+ res.text.should =~ /#{check_value}/
29
+ end
30
+
31
+ Тогда(/^открывается страница "(.*?)"$/) do |arg1|
32
+ PageObjectWrapper.current_page? arg1.to_label.to_sym
33
+ end
34
+
35
+ Тогда(/^проверка "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
36
+ current_page = PageObjectWrapper.current_page
37
+ res = current_page.send arg1.to_validator
38
+ res.should eq arg2
39
+ end
40
+
41
+ Тогда(/^действие "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
42
+ run_action_validator(arg1, arg2)
43
+ end
44
+
45
+ Тогда(/^выполнение действия "(.*?)" с параметрами "(.*?)" вернет "(.*?)"$/) do |arg1, arg2, arg3|
46
+ run_action_with_args_validator(arg1, arg2, arg3)
47
+ end
48
+
49
+ Тогда(/^в "(.*?)" строке колонки "(.*?)" таблицы "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4|
50
+ select_by_row_num_validator(arg1, arg2, arg3, arg4)
51
+ end
52
+
53
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" равным "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
54
+ complex_select_validator(arg1, arg2, arg3, arg4, arg5)
55
+ end
56
+
57
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" похожим на "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
58
+ complex_select_regexp_validator(arg1, arg2, arg3, arg4, arg5)
59
+ end
60
+
@@ -0,0 +1,4 @@
1
+ language: language_of_your_specs # supported: [:en,:ru], please do pull request for other langs
2
+ username: tarantula_admin_login
3
+ password: tarantula_admin_password
4
+ server: http://localhost:8080
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "cutara"
8
+ gem.version = Cutara::VERSION
9
+ gem.authors = ["Evgeniy Khatko"]
10
+ gem.email = ["evgeniy.khatko@gmail.com"]
11
+ gem.description = %q{ Cutara is the bridge between Tarantula and Cucumber }
12
+ gem.summary = %q{ Cutara provides rake tasks for integration between Cucumber (test automation tool) and Taranula (test-management tool) }
13
+ gem.homepage = ""
14
+ gem.add_dependency "page_object_wrapper"
15
+ gem.add_dependency "rspec"
16
+ gem.add_dependency "babosa"
17
+ gem.add_dependency "cucumber"
18
+ gem.add_dependency "httparty"
19
+ gem.add_dependency "activerecord"
20
+ gem.add_dependency "rake"
21
+ gem.add_development_dependency "debugger"
22
+ gem.add_development_dependency "magic_encoding"
23
+
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
26
+ gem.test_files = gem.files.grep(%r{^(test|spec)/})
27
+ gem.require_paths = ["lib", "tasks", "generation"]
28
+ end
@@ -0,0 +1,20 @@
1
+ require 'PageElement'
2
+
3
+ module Cutara
4
+ class Action < PageElement
5
+ attr_accessor :params
6
+
7
+ def initialize label, params=nil
8
+ super label
9
+ @params = params
10
+ end
11
+
12
+ def to_snippet
13
+ if @params
14
+ return "\taction #{@label.inspect} do |#{params.join(", ")}|\n\tend\n\n"
15
+ else
16
+ return "\taction #{@label.inspect} do\n\tend\n\n"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,80 @@
1
+ require 'Page'
2
+ require 'Action'
3
+ require 'Eset'
4
+ require 'Input'
5
+ require 'Clickable'
6
+ require 'Table'
7
+ require 'Validator'
8
+ require 'Pagination'
9
+
10
+ module Cutara
11
+
12
+ class Application
13
+ attr_accessor :current_page
14
+
15
+ def initialize
16
+ @current_page = nil
17
+ end
18
+
19
+ def pages
20
+ Page.pages
21
+ end
22
+
23
+ def add_page label
24
+ p = Page.find_page(label) || Page.new(label)
25
+ (Page.pages << p).uniq!
26
+ @current_page = p
27
+ end
28
+
29
+ def add_action label, params=nil
30
+ a = @current_page.find_action(label) || Action.new(label, params)
31
+ (@current_page.actions << a).uniq!
32
+ end
33
+
34
+ def add_menu label
35
+ @current_page.inputs.each{ |i| i.menus << label; i.menus.uniq! }
36
+ @current_page.esets.each{ |e| e.menus << label; e.menus.uniq! }
37
+ end
38
+
39
+ def add_eset label, menu
40
+ eset = @current_page.find_eset(label) || Eset.new(label)
41
+ eset.menus << menu
42
+ (@current_page.esets << eset).uniq!
43
+ end
44
+
45
+ def add_input label
46
+ i = @current_page.find_input(label) || Input.new(label)
47
+ (@current_page.inputs << i).uniq!
48
+ end
49
+
50
+ def add_link label
51
+ c = @current_page.find_clickable(label, :link) || Clickable.new(label, :link)
52
+ (@current_page.clickables << c).uniq!
53
+ end
54
+
55
+ def add_button label
56
+ c = @current_page.find_clickable(label, :button) || Clickable.new(label, :button)
57
+ (@current_page.clickables << c).uniq!
58
+ end
59
+
60
+ def add_element label
61
+ c = @current_page.find_clickable(label, :element) || Clickable.new(label, :element)
62
+ (@current_page.clickables << c).uniq!
63
+ end
64
+
65
+ def add_table label
66
+ t = @current_page.find_table(label) || Table.new(label)
67
+ (@current_page.tables << t).uniq!
68
+ t
69
+ end
70
+
71
+ def add_validator label
72
+ v = @current_page.find_validator(label) || Validator.new(label)
73
+ (@current_page.validators << v).uniq!
74
+ end
75
+
76
+ def add_pagination
77
+ @current_page.pagination = :pagination
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,14 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Clickable < PageElement
4
+ attr_accessor :type
5
+ def initialize label, type
6
+ super label
7
+ @type = type
8
+ end
9
+
10
+ def to_snippet
11
+ "\t#{@type} #{@label.inspect} do\n\t\tlocator\n\tend\n\n"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Eset < PageElement
4
+ attr_accessor :menus
5
+ def initialize label
6
+ super label
7
+ @menus = []
8
+ end
9
+
10
+ def to_snippet
11
+ out = "\telements_set #{@label.inspect} do\n"
12
+ @menus.each{|menu|
13
+ out += "\t\tmenu #{menu.inspect}\n"
14
+ }
15
+ out += "\tend\n\n"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Input < PageElement
4
+ attr_accessor :menus
5
+ def initialize label
6
+ super label
7
+ @menus = []
8
+ end
9
+
10
+ def to_snippet
11
+ out = "\ttext_field #{@label.inspect} do\n\t\tlocator\n"
12
+ @menus.each{|menu|
13
+ out += "\t\tmenu #{menu.inspect}\n"
14
+ }
15
+ out += "\tend\n\n"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,62 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Page < PageElement
4
+ attr_accessor :label, :actions, :esets, :inputs, :clickables, :tables, :pagination, :validators
5
+ @@pages = []
6
+
7
+ def initialize label
8
+ @label = label
9
+ @actions = []
10
+ @esets = []
11
+ @inputs = []
12
+ @clickables = []
13
+ @tables = []
14
+ @validators = []
15
+ @pagination = nil
16
+ end
17
+
18
+ def self.pages
19
+ @@pages
20
+ end
21
+
22
+ def to_snippet
23
+ out = "PageObjectWrapper.define_page #{@label.inspect} do\n\tlocator\n"
24
+ @clickables.each{ |e| out += e.to_snippet }
25
+ @inputs.each{ |e| out += e.to_snippet }
26
+ @esets.each{ |e| out += e.to_snippet }
27
+ @tables.each{ |e| out += e.to_snippet }
28
+ @actions.each{ |e| out += e.to_snippet }
29
+ @validators.each{ |e| out += e.to_snippet }
30
+ out += "\tpagination :pagination do\n\tend\n" if @pagination
31
+ out += "end"
32
+ end
33
+
34
+ def self.find_page label
35
+ @@pages.select{|e| e.label == label}.first
36
+ end
37
+
38
+ def find_action label
39
+ @actions.select{|e| e.label == label}.first
40
+ end
41
+
42
+ def find_clickable label, type
43
+ @clickables.select{|e| e.label == label and e.type == type}.first
44
+ end
45
+
46
+ def find_eset label
47
+ @esets.select{|e| e.label == label}.first
48
+ end
49
+
50
+ def find_input label
51
+ @inputs.select{|e| e.label == label }.first
52
+ end
53
+
54
+ def find_table label
55
+ @tables.select{|e| e.label == label}.first
56
+ end
57
+
58
+ def find_validator label
59
+ @validators.select{|e| e.label == label}.first
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,11 @@
1
+ module Cutara
2
+ class PageElement
3
+ attr_accessor :label
4
+ def initialize label
5
+ @label = label
6
+ end
7
+
8
+ def to_snippet
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Table < PageElement
4
+ attr_accessor :columns
5
+ def initialize label
6
+ super label
7
+ @columns = []
8
+ end
9
+
10
+ def to_snippet
11
+ out = ""
12
+ out += "\ttable #{@label.inspect} do\n\t\tlocator\n"
13
+ out += "\t\theader #{@columns.inspect}\n"
14
+ out += "\tend\n\n"
15
+ end
16
+
17
+ def add_column label
18
+ @columns << label
19
+ @columns.uniq!
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ require 'PageElement'
2
+ module Cutara
3
+ class Validator < PageElement
4
+ def initialize label
5
+ super label
6
+ end
7
+
8
+ def to_snippet
9
+ "\tvalidator #{@label.inspect} do\n\tend\n\n"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'Application'
3
+ require 'Helper'
4
+ module Cutara
5
+ APP = Application.new
6
+ end
7
+
8
+ World{ Cutara }
9
+
10
+ at_exit do
11
+ Cutara::APP.pages.each{ |p|
12
+ file_name = "#{ROOT}/pages/#{p.label.to_s}.rb"
13
+ raise "directory #{ROOT}/pages not found, run rake cutara:build first" unless File.exist? "#{ROOT}/pages"
14
+ data = p.to_snippet
15
+ unless File.exist? file_name
16
+ File.open(file_name, "w") do |f|
17
+ f.puts "# -*- encoding : utf-8 -*-"
18
+ f.puts data
19
+ f.close
20
+ end
21
+ end
22
+ puts data
23
+ }
24
+ end
@@ -0,0 +1,205 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'Application'
3
+ include Cutara
4
+
5
+ # open_steps
6
+ Допустим /^открыта страница "(.*?)"$/ do |arg1|
7
+ APP.add_page arg1.to_label.to_sym
8
+ end
9
+
10
+ Допустим /^страница "(.*?)" открыта с параметрами "(.*?)"$/ do |arg1, arg2|
11
+ APP.add_page arg1.to_label.to_sym
12
+ end
13
+
14
+ Если /^открыть страницу "(.*?)"$/ do |arg1|
15
+ APP.add_page arg1.to_label.to_sym
16
+ end
17
+
18
+ Если /^страницу "(.*?)" открыть с параметрами "(.*?)"$/ do |arg1, arg2|
19
+ APP.add_page arg1.to_label.to_sym
20
+ end
21
+
22
+ # action_steps
23
+ Допустим /^выполнено действие "(.*?)"$/ do |arg1|
24
+ APP.add_action arg1.to_label.to_sym
25
+ end
26
+
27
+ Допустим /^действие "(.*?)" выполнено с параметрами "(.*?)"$/ do |arg1, arg2|
28
+ args = arg2.to_params.keys
29
+ APP.add_action arg1.to_label.to_sym, args
30
+ end
31
+
32
+ Если /^выполнить действие "(.*?)"$/ do |arg1|
33
+ APP.add_action arg1.to_label.to_sym
34
+ end
35
+
36
+ Если /^действие "(.*?)" выполнить с параметрами "(.*?)"$/ do |arg1, arg2|
37
+ args = arg2.to_params.keys
38
+ APP.add_action arg1.to_label.to_sym, args
39
+ end
40
+
41
+ # data_input_steps
42
+ Пусть /^на странице введены данные типа "(.*?)"$/ do |arg1|
43
+ APP.add_menu arg1.to_label.to_sym
44
+ end
45
+
46
+ Пусть /^в набор элементов "(.*?)" введены данные типа "(.*?)"$/ do |arg1, arg2|
47
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
48
+ end
49
+
50
+ Пусть /^на форме "(.*?)" введены данные типа "(.*?)"$/ do |arg1, arg2|
51
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
52
+ end
53
+
54
+ Пусть /^в поле "(.*?)" введено значение "(.*?)"$/ do |arg1, arg2|
55
+ APP.add_input arg1.to_label.to_sym
56
+ end
57
+
58
+ Если /^на странице ввести данные типа "(.*?)"$/ do |arg1|
59
+ APP.add_menu arg1.to_label.to_sym
60
+ end
61
+
62
+ Если /^в набор элементов "(.*?)" ввести данные типа "(.*?)"$/ do |arg1, arg2|
63
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
64
+ end
65
+
66
+ Если /^на форме "(.*?)" ввести данные типа "(.*?)"$/ do |arg1, arg2|
67
+ APP.add_eset arg1.to_label.to_sym, arg2.to_label.to_sym
68
+ end
69
+
70
+ Если /^в поле "(.*?)" ввести значение "(.*?)"$/ do |arg1, arg2|
71
+ APP.add_input arg1.to_label.to_sym
72
+ end
73
+
74
+ # press_steps
75
+ Допустим /^была нажата ссылка "(.*?)"$/ do |arg1|
76
+ APP.add_link arg1.to_label.to_sym
77
+ end
78
+
79
+ Допустим /^была нажата кнопка "(.*?)"$/ do |arg1|
80
+ APP.add_button arg1.to_label.to_sym
81
+ end
82
+
83
+ Допустим /^был нажат элемент "(.*?)"$/ do |arg1|
84
+ APP.add_element arg1.to_label.to_sym
85
+ end
86
+
87
+ Если /^нажать ссылку "(.*?)"$/ do |arg1|
88
+ APP.add_link arg1.to_label.to_sym
89
+ end
90
+
91
+ Если /^нажать кнопку "(.*?)"$/ do |arg1|
92
+ APP.add_button arg1.to_label.to_sym
93
+ end
94
+
95
+ Если /^нажать на элемент "(.*?)"$/ do |arg1|
96
+ APP.add_element arg1.to_label.to_sym
97
+ end
98
+
99
+ # table_steps
100
+ Допустим /^в таблице "(.*?)" была выбрана ячейка колонки "(.*?)" с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3, arg4|
101
+ t = APP.add_table arg1.to_label.to_sym
102
+ t.add_column arg2.to_label.to_sym
103
+ end
104
+
105
+ Допустим /^в таблице "(.*?)" была выбрана ячейка колонки "(.*?)" с "(.*?)" похожим на "(.*?)"$/ do |arg1, arg2, arg3, arg4|
106
+ t = APP.add_table arg1.to_label.to_sym
107
+ t.add_column arg2.to_label.to_sym
108
+ end
109
+
110
+ Допустим /^в таблице "(.*?)" была выбрана ячейка с "(.*?)" похожим на "(.*?)"$/ do |arg1, arg2, arg3|
111
+ t = APP.add_table arg1.to_label.to_sym
112
+ t.add_column arg2.to_label.to_sym
113
+ end
114
+
115
+ Допустим /^в таблице "(.*?)" была выбрана ячейка с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3|
116
+ t = APP.add_table arg1.to_label.to_sym
117
+ t.add_column arg2.to_label.to_sym
118
+ end
119
+
120
+ Допустим /^в таблице "(.*?)" был выбран элемент колонки "(.*?)"$/ do |arg1, arg2|
121
+ t = APP.add_table arg1.to_label.to_sym
122
+ t.add_column arg2.to_label.to_sym
123
+ end
124
+
125
+ Допустим /^в таблице "(.*?)" был выбран элемент колонки "(.*?)" из "(.*?)" строки$/ do |arg1, arg2, arg3|
126
+ t = APP.add_table arg1.to_label.to_sym
127
+ t.add_column arg2.to_label.to_sym
128
+ end
129
+
130
+ Если /^в таблице "(.*?)" выбрать ячейку колонки "(.*?)" с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3, arg4|
131
+ t = APP.add_table arg1.to_label.to_sym
132
+ t.add_column arg2.to_label.to_sym
133
+ end
134
+
135
+ Если /^в таблице "(.*?)" выбрать ячейку с "(.*?)" похожим на "(.*?)"$/ do |arg1, arg2, arg3|
136
+ t = APP.add_table arg1.to_label.to_sym
137
+ t.add_column arg2.to_label.to_sym
138
+ end
139
+
140
+ Если /^в таблице "(.*?)" выбрать ячейку с "(.*?)" равным "(.*?)"$/ do |arg1, arg2, arg3|
141
+ t = APP.add_table arg1.to_label.to_sym
142
+ t.add_column arg2.to_label.to_sym
143
+ end
144
+
145
+ Если /^в таблице "(.*?)" выбрать элемент колонки "(.*?)"$/ do |arg1, arg2|
146
+ t = APP.add_table arg1.to_label.to_sym
147
+ t.add_column arg2.to_label.to_sym
148
+ end
149
+
150
+ Если /^в таблице "(.*?)" выбрать элемент колонки "(.*?)" из "(.*?)" строки$/ do |arg1, arg2, arg3|
151
+ t = APP.add_table arg1.to_label.to_sym
152
+ t.add_column arg2.to_label.to_sym
153
+ end
154
+ # pagination_steps
155
+ Допустим /^открыта "(.*?)" страница пагинации$/ do |arg1|
156
+ APP.add_pagination
157
+ end
158
+
159
+ Допустим /^на каждой странице пагинации выполнить действие "(.*?)"$/ do |arg1|
160
+ APP.add_pagination
161
+ APP.add_action arg1.to_label.to_sym
162
+ end
163
+
164
+ Допустим /^на первых "(.*?)" страницах пагинации выполнить действие "(.*?)"$/ do |arg1, arg2|
165
+ APP.add_pagination
166
+ APP.add_action arg2.to_label.to_sym
167
+ end
168
+
169
+ Допустим /^перейти на "(.*?)" страницу пагинации$/ do |arg1|
170
+ APP.add_pagination
171
+ end
172
+
173
+ # validation_steps
174
+ Тогда(/^открывается страница "(.*?)"$/) do |arg1|
175
+ APP.add_page arg1.to_label.to_sym
176
+ end
177
+
178
+ Тогда(/^проверка "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
179
+ APP.add_validator arg1.to_label.to_sym
180
+ end
181
+
182
+ Тогда(/^действие "(.*?)" вернет "(.*?)"$/) do |arg1, arg2|
183
+ APP.add_action arg1.to_label.to_sym
184
+ end
185
+
186
+ Тогда(/^выполнение действия "(.*?)" с параметрами "(.*?)" вернет "(.*?)"$/) do |arg1, arg2, arg3|
187
+ args = arg2.to_params.keys
188
+ APP.add_action arg1.to_label.to_sym, args
189
+ end
190
+
191
+ Тогда(/^в "(.*?)" строке колонки "(.*?)" таблицы "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4|
192
+ t = APP.add_table arg3.to_label.to_sym
193
+ t.add_column arg2.to_label.to_sym
194
+ end
195
+
196
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" равным "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
197
+ t = APP.add_table arg2.to_label.to_sym
198
+ t.add_column arg1.to_label.to_sym
199
+ end
200
+
201
+ Тогда(/^в колонке "(.*?)" таблицы "(.*?)" с "(.*?)" похожим на "(.*?)" содержится "(.*?)"$/) do |arg1, arg2, arg3, arg4, arg5|
202
+ t = APP.add_table arg2.to_label.to_sym
203
+ t.add_column arg1.to_label.to_sym
204
+ end
205
+