qa_robusta 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/History.txt +6 -0
- data/Manifest.txt +101 -0
- data/README.txt +48 -0
- data/Rakefile +18 -0
- data/bin/qa_robusta +14 -0
- data/common/Rakefile +95 -0
- data/common/conf/monkey_patch.yaml +8 -0
- data/common/conf/monkey_patch.yaml.ex +10 -0
- data/common/lib/array.rb +9 -0
- data/common/lib/cache.rb +12 -0
- data/common/lib/constants.rb +35 -0
- data/common/lib/error_defns.rb +13 -0
- data/common/lib/format_html_tmp.html +34 -0
- data/common/lib/formatters.rb +18 -0
- data/common/lib/gem_helpers.rb +29 -0
- data/common/lib/gems/.svn/entries +43 -0
- data/common/lib/gems/cache/.svn/entries +28 -0
- data/common/lib/gems/doc/.svn/entries +28 -0
- data/common/lib/gems/gems/.svn/entries +28 -0
- data/common/lib/gems/installed/.svn/entries +40 -0
- data/common/lib/gems/installed/cache/.svn/entries +28 -0
- data/common/lib/gems/installed/doc/.svn/entries +28 -0
- data/common/lib/gems/installed/gems/.svn/entries +28 -0
- data/common/lib/gems/installed/specifications/.svn/entries +28 -0
- data/common/lib/gems/specifications/.svn/entries +28 -0
- data/common/lib/gen_suite_doc.rb +52 -0
- data/common/lib/load_test_data.rb +18 -0
- data/common/lib/monkey_patch.rb +149 -0
- data/common/lib/navigate_mech.rb +79 -0
- data/common/lib/update_element.rb +12 -0
- data/common/monkey_patches/mechanize.rb +589 -0
- data/common/monkey_patches/table.rb +363 -0
- data/common/monkey_patches/telnet.rb +420 -0
- data/common/monkey_patches/unit.rb +538 -0
- data/demo/demo_site.rb +38 -0
- data/demo/public/javascripts/jquery-1.6.2.min.js +18 -0
- data/demo/views/index.erb +35 -0
- data/lib/monkey_patch.rb +26 -0
- data/lib/qa_robusta.rb +3 -0
- data/mechanize_interface/conf/app.yaml +10 -0
- data/mechanize_interface/lib/agent.rb +18 -0
- data/mechanize_interface/lib/app_require.rb +19 -0
- data/mechanize_interface/lib/get_page.rb +20 -0
- data/mechanize_interface/lib/login.rb +30 -0
- data/mechanize_interface/lib/navigation_paths.rb +12 -0
- data/mechanize_interface/test/lib/mech_unit_test.rb +19 -0
- data/qa_observer/conf/dev_users.yaml +9 -0
- data/qa_observer/conf/development.yaml +3 -0
- data/qa_observer/conf/qa_observer_links.yaml +10 -0
- data/qa_observer/generators/site/site_generator.rb +61 -0
- data/qa_observer/generators/site/templates/base_urls.yaml.erb +6 -0
- data/qa_observer/generators/site/templates/create_flow.rb.erb +54 -0
- data/qa_observer/generators/site/templates/elements.rb.erb +61 -0
- data/qa_observer/generators/site/templates/html_elements.yaml +22 -0
- data/qa_observer/generators/site/templates/navigate.rb +32 -0
- data/qa_observer/generators/site/templates/reports.rb +7 -0
- data/qa_observer/generators/site/templates/users_list.yaml +21 -0
- data/qa_observer/generators/test_case/templates/test_case.rb.erb +62 -0
- data/qa_observer/generators/test_case/test_case_generator.rb +29 -0
- data/qa_observer/lib/doc.rb +103 -0
- data/qa_observer/lib/env_details.rb +2 -0
- data/qa_observer/lib/error_defns.rb +3 -0
- data/qa_observer/lib/form_helpers.rb +52 -0
- data/qa_observer/lib/reports.rb +7 -0
- data/qa_observer/lib/requires.rb +23 -0
- data/qa_observer/lib/system_test.rb +146 -0
- data/qa_observer/lib/test_extention.rb +29 -0
- data/qa_observer/lib/update_element.rb +12 -0
- data/qa_observer/lib/watir.rb +42 -0
- data/qa_observer/script/destroy +14 -0
- data/qa_observer/script/generate +14 -0
- data/qa_observer/sites/demo/conf/base_urls.yaml +6 -0
- data/qa_observer/sites/demo/conf/html_elements.yaml +22 -0
- data/qa_observer/sites/demo/conf/remote_machine.yaml +12 -0
- data/qa_observer/sites/demo/conf/users_list.yaml +21 -0
- data/qa_observer/sites/demo/elements/demo_elements.rb +9 -0
- data/qa_observer/sites/demo/flows/demo_flows.rb +37 -0
- data/qa_observer/sites/demo/helpers/.placeholder +0 -0
- data/qa_observer/sites/demo/lib/navigate.rb +32 -0
- data/qa_observer/sites/demo/lib/reports.rb +7 -0
- data/qa_observer/sites/demo/results/.placeholder +0 -0
- data/qa_observer/sites/demo/results/images/.placeholder +0 -0
- data/qa_observer/sites/demo/test_cases/home_page.rb +106 -0
- data/qa_observer/suites/demo_lg_chrome/lg.yaml +11 -0
- data/qa_observer/suites/demo_md_chrome/md.yaml +11 -0
- data/qa_observer/suites/demo_sm_chrome/sm.yaml +11 -0
- data/qa_observer/suites/init.rb +41 -0
- data/qa_observer/test_runner.rb +125 -0
- data/remote_unix/helpers/constants.rb +8 -0
- data/remote_unix/helpers/out_xforms.rb +48 -0
- data/remote_unix/lib/common.rb +52 -0
- data/remote_unix/lib/error_defn.rb +4 -0
- data/remote_unix/lib/general_unix.rb +308 -0
- data/remote_unix/lib/network_commands.rb +41 -0
- data/remote_unix/lib/network_info.rb +98 -0
- data/remote_unix/lib/postfix_commands.rb +87 -0
- data/remote_unix/lib/postfix_info.rb +30 -0
- data/remote_unix/lib/requires.rb +25 -0
- data/remote_unix/lib/scp.rb +22 -0
- data/remote_unix/lib/ssh.rb +46 -0
- data/test/test_qa_robusta.rb +8 -0
- metadata +219 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
:some_page:
|
3
|
+
:page_element1:
|
4
|
+
:type: text_field
|
5
|
+
:what: "watir's what parameter"
|
6
|
+
:what: "watir's how parameter"
|
7
|
+
:page_element2:
|
8
|
+
:type: text_field
|
9
|
+
:what: "watir's what parameter"
|
10
|
+
:what: "watir's how parameter"
|
11
|
+
:another_page:
|
12
|
+
:page_element1:
|
13
|
+
:type: text_field
|
14
|
+
:what: "watir's what parameter"
|
15
|
+
:what: "watir's how parameter"
|
16
|
+
:page_element2:
|
17
|
+
:type: text_field
|
18
|
+
:what: "watir's what parameter"
|
19
|
+
:what: "watir's how parameter"
|
20
|
+
|
21
|
+
|
22
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Navigate
|
2
|
+
attr_reader :browser
|
3
|
+
def initialize(browser)
|
4
|
+
@browser = browser
|
5
|
+
end
|
6
|
+
def go(nav_path=[])
|
7
|
+
raise ArgumentError if nav_path.class != Array || nav_path.nitems < 1
|
8
|
+
nav_path.each { |item|
|
9
|
+
case item[:type]
|
10
|
+
when 'link'
|
11
|
+
exec = "@browser.link(#{item[:how]}, #{item[:what]}).#{item[:action]}"
|
12
|
+
eval exec
|
13
|
+
when 'text_field'
|
14
|
+
if item.has_key?(:value)
|
15
|
+
# escape ' in item[:value] as it's used for quoted string in the set
|
16
|
+
#item[:value].gsub(/'/, /\'/)
|
17
|
+
exec = "@browser.text_field(#{item[:how]}, #{item[:what]}).#{item[:action]}('#{item[:value]}')"
|
18
|
+
eval exec
|
19
|
+
end
|
20
|
+
when 'check_box'
|
21
|
+
# escape ' in item[:value] as it's used for quoted string in the set
|
22
|
+
#item[:value].gsub(/'/, /\'/)
|
23
|
+
exec = "@browser.checkbox(#{item[:how]}, #{item[:what]}).#{item[:action]}"
|
24
|
+
eval exec
|
25
|
+
when 'submit'
|
26
|
+
exec = "@browser.button(#{item[:how]}, #{item[:what]}).#{item[:action]}"
|
27
|
+
eval exec
|
28
|
+
|
29
|
+
end
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
:development:
|
2
|
+
:manager:
|
3
|
+
:user: 'user1'
|
4
|
+
:password: 'user1_password'
|
5
|
+
:employee:
|
6
|
+
:user: 'user2'
|
7
|
+
:password: 'user2_password'
|
8
|
+
:test:
|
9
|
+
:manager:
|
10
|
+
:user: 'user1'
|
11
|
+
:password: 'user1_password'
|
12
|
+
:employee:
|
13
|
+
:user: 'user2'
|
14
|
+
:password: 'user2_password'
|
15
|
+
:production:
|
16
|
+
:manager:
|
17
|
+
:user: 'user1'
|
18
|
+
:password: 'user1_password'
|
19
|
+
:employee:
|
20
|
+
:user: 'user2'
|
21
|
+
:password: 'user2_password'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
base = File.expand_path(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
# If the user is executing the test case stand alone
|
4
|
+
# without an agent we need to set a reference to
|
5
|
+
# for where to find the qa_observer_client as well as let
|
6
|
+
# the qa_observer_client know where the test case directory is
|
7
|
+
# URGENT: DO NOT MODIFY
|
8
|
+
unless $qa_observer_client
|
9
|
+
TEST_CASE_DIR = "#{base}"
|
10
|
+
$qa_observer_client = File.expand_path("#{base}/../../..")
|
11
|
+
end
|
12
|
+
# END OF DO NOT MODIFY
|
13
|
+
|
14
|
+
require "#{$qa_observer_client}/lib/system_test"
|
15
|
+
require "#{$qa_observer_client}/lib/env_details.rb"
|
16
|
+
|
17
|
+
class <%= class_name.camelize %> < SystemTest
|
18
|
+
def setup
|
19
|
+
# if the user hasn't provided the environment as an input
|
20
|
+
# parameter to the interpreter default to :test
|
21
|
+
$test_environment ||= :test
|
22
|
+
super
|
23
|
+
|
24
|
+
@<%= app_name %>_flows = <%= app_name.camelize %>Flows.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def teardown
|
28
|
+
# NOTE: Place all items you wish to do at after each test method
|
29
|
+
# in the unless @skip section before the $browser.close. DO NOT
|
30
|
+
# remove this section as it's critical if the test class is executed
|
31
|
+
# by an agent.
|
32
|
+
unless @skip
|
33
|
+
begin
|
34
|
+
$browser.close
|
35
|
+
rescue => e
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
# TODO: add test methods
|
43
|
+
# don't forget to update the documentation associated with each test method,
|
44
|
+
# by placing an rdoc style comment in plain text. The documentation will be
|
45
|
+
# included in the report for each execution.
|
46
|
+
|
47
|
+
=begin rdoc
|
48
|
+
Test Purpose
|
49
|
+
After the user arrives on the home page verify the following links exists:
|
50
|
+
* some link 1
|
51
|
+
* some link 2
|
52
|
+
* some link 3
|
53
|
+
=end
|
54
|
+
def test_home_links
|
55
|
+
@<%= app_name %>_flows.home
|
56
|
+
# TODO add asserts for testing home page links
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubigen'
|
3
|
+
|
4
|
+
class TestCaseGenerator < RubiGen::Base
|
5
|
+
attr_reader :app_test_dir, :app_name, :qa_observer_client, :class_name
|
6
|
+
|
7
|
+
def initialize(runtime_args, runtime_options = {})
|
8
|
+
super
|
9
|
+
usage if args.size != 2
|
10
|
+
@app_test_dir = 'sites'
|
11
|
+
@qa_observer_client = File.expand_path("#{File.dirname(__FILE__)}/../../")
|
12
|
+
@app_name=args.shift
|
13
|
+
@class_name=args.shift
|
14
|
+
end
|
15
|
+
|
16
|
+
def manifest
|
17
|
+
record do |m|
|
18
|
+
m.template "test_case.rb.erb", "#{@app_test_dir}/#{@app_name}/test_cases/#{@class_name.downcase}.rb"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
def banner
|
24
|
+
<<-EOS
|
25
|
+
USAGE: #{$0} #{spec.name} app_name test_class_name
|
26
|
+
EOS
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
base = File.expand_path(File.dirname(__FILE__))
|
2
|
+
require "#{base}/../../common/lib/formatters"
|
3
|
+
|
4
|
+
module TCDoc
|
5
|
+
def self.build_html(report, save_to)
|
6
|
+
html = '<html><head><head><body>'
|
7
|
+
report.each_pair { |klass, r|
|
8
|
+
next unless r.kind_of?(Array)
|
9
|
+
r.each { |test|
|
10
|
+
html += "<h1>Report for #{klass}::#{test[:method]}</h1>"
|
11
|
+
html += "Num Assertions: #{test[:num_asserts]}<br>"
|
12
|
+
html += "Pass: #{test[:passed]}<br>"
|
13
|
+
html += "Failed: #{test[:failed]}<br><br>"
|
14
|
+
html += "#{test[:documentation]}<br><br>" if test[:documentation]
|
15
|
+
test[:images].each { |i|
|
16
|
+
image = "#{$test_case_dir}/../results/images/#{File.basename(i)}"
|
17
|
+
FileUtils.mv i, "#{$test_case_dir}/../results/images"
|
18
|
+
html += "<img src = '#{image}'><br><br>"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
html += "</body></html>"
|
23
|
+
fd = File.open(save_to, 'w+')
|
24
|
+
fd.puts html
|
25
|
+
fd.close
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.class_names_from_file(file_content)
|
29
|
+
class_names = file_content.grep(/class .* <.*SystemTest/)
|
30
|
+
class_names.each_with_index { |name, ct|
|
31
|
+
class_names[ct] = name.gsub!(/\n|class| |<|SystemTest/, '')
|
32
|
+
}
|
33
|
+
class_names
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.method_names_from_file(file_content)
|
37
|
+
methods = []
|
38
|
+
file_content.grep(/def .*/).each { |method|
|
39
|
+
methods << method.grep(/def .*/).first.strip.gsub("def ", '')
|
40
|
+
}
|
41
|
+
methods
|
42
|
+
end
|
43
|
+
|
44
|
+
# return
|
45
|
+
# {:method_name => test documenation, :some_other_method => 'of course it's doc'}
|
46
|
+
def self.test_documentation(current_test_class, test_methods=[], format='txt')
|
47
|
+
execution_file=nil
|
48
|
+
methods_doc = {}
|
49
|
+
rdoc_dir = "#{$test_case_dir}/../tmp_doc".gsub(/c:/i, '')
|
50
|
+
|
51
|
+
# remove all previously generated rdoc
|
52
|
+
FileUtils.rm_rf rdoc_dir if File.directory?(rdoc_dir)
|
53
|
+
|
54
|
+
Dir.entries("#{$test_case_dir}/").each { |i|
|
55
|
+
next if File.directory?(i) || i !~ /.rb$/
|
56
|
+
content = File.read("#{$test_case_dir}/#{i}")
|
57
|
+
klass = class_names_from_file(content).first
|
58
|
+
if klass == current_test_class
|
59
|
+
execution_file = "#{$test_case_dir}/#{i}".gsub(/c:/i, '')
|
60
|
+
end
|
61
|
+
}
|
62
|
+
|
63
|
+
html=''
|
64
|
+
`#{$test_case_dir}/../../../../common/gems/installed/gems/rdoc-3.9.4/bin/rdoc -o #{rdoc_dir} #{execution_file}`
|
65
|
+
current_test_class.gsub!(/\r/, '')
|
66
|
+
rdoc_content = File.read("#{rdoc_dir}/#{current_test_class}.html")
|
67
|
+
doc=Hpricot(rdoc_content)
|
68
|
+
|
69
|
+
test_methods.each { |method|
|
70
|
+
html = doc.search("/html/body/div[2]/div[2]/div/div[@id='#{method}-method']/div[2]").inner_html
|
71
|
+
|
72
|
+
if format == 'txt'
|
73
|
+
gen_doc = Format::HTML.to_txt(html)
|
74
|
+
elsif format == 'html'
|
75
|
+
gen_doc = html
|
76
|
+
end
|
77
|
+
|
78
|
+
methods_doc[method] = gen_doc
|
79
|
+
}
|
80
|
+
FileUtils.rm_rf rdoc_dir if File.directory?(rdoc_dir)
|
81
|
+
methods_doc
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.test_methods_from_class(class_content)
|
85
|
+
test_methods = []
|
86
|
+
class_content.grep(/def .*/).each { |meth| test_methods << meth.gsub(/ |def|\n/, '') }
|
87
|
+
test_methods - ['setup', 'teardown']
|
88
|
+
end
|
89
|
+
|
90
|
+
# assumes absolute path
|
91
|
+
# assumes all test classes < from SystemTest
|
92
|
+
def self.process_test_class_file(file)
|
93
|
+
text_doc = {}
|
94
|
+
content = File.readlines(file).to_s
|
95
|
+
test_methods = test_methods_from_class(content)
|
96
|
+
class_names = class_names_from_file(content)
|
97
|
+
|
98
|
+
raise ArgumentError, "Expecting one test class per file" unless class_names.nitems == 1
|
99
|
+
|
100
|
+
test_documentation(class_names.first, test_methods)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module FormHelpers
|
2
|
+
# params is an array of hashes for ordering. has structure is described
|
3
|
+
# in the usage msg
|
4
|
+
def self.auto_form(params=[], objs=[])
|
5
|
+
msg =<<EOF
|
6
|
+
params should contain keys for commands to execute. Where
|
7
|
+
each command key should begin with ':command_' and end with 'element_name'
|
8
|
+
which maps to a valid element definition. objs should be an array
|
9
|
+
of element objects. We will dynamically see which object the associated
|
10
|
+
command maps to.
|
11
|
+
EOF
|
12
|
+
|
13
|
+
raise ArgumentError, msg unless params.nitems > 0 && objs.nitems > 0
|
14
|
+
|
15
|
+
checkbox_state=[true, false]
|
16
|
+
params.each { |i|
|
17
|
+
|
18
|
+
objs.each {|o|
|
19
|
+
key = i.keys.first
|
20
|
+
value = i.values.first
|
21
|
+
next unless key.to_s =~ /^command_/
|
22
|
+
|
23
|
+
object_class=''
|
24
|
+
current=''
|
25
|
+
element = key.to_s.split('command_').last
|
26
|
+
if o.respond_to?(element)
|
27
|
+
eval "object_class = o.#{element}.class.to_s"
|
28
|
+
if object_class =~ /checkbox/i
|
29
|
+
raise ArgumentError unless checkbox_state.include?(value)
|
30
|
+
eval "current = o.#{element}.checked?"
|
31
|
+
o.send(element).set(value)
|
32
|
+
if object_class =~ /radio/i
|
33
|
+
if value
|
34
|
+
o.send(element).check
|
35
|
+
else
|
36
|
+
o.send(element).uncheck
|
37
|
+
end
|
38
|
+
end
|
39
|
+
elsif object_class =~ /selectlist/i
|
40
|
+
o.send(element).select(value)
|
41
|
+
elsif object_class =~ /textfield/i
|
42
|
+
# skip if key supplied but empty string or nil
|
43
|
+
o.send(element).set(value) #unless value != ''
|
44
|
+
elsif object_class =~ /button|link|image/i
|
45
|
+
eval "o.#{element}.#{value}"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
}
|
50
|
+
}
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Requires
|
2
|
+
def self.run
|
3
|
+
begin
|
4
|
+
Dir.entries("#{TEST_CASE_DIR}/../elements").each { |i|
|
5
|
+
next if i =~ /^\./ || i !~ /_elements\.rb$/
|
6
|
+
puts "loading: #{i}"
|
7
|
+
require "#{TEST_CASE_DIR}/../elements/#{i}"
|
8
|
+
}
|
9
|
+
Dir.entries("#{TEST_CASE_DIR}/../flows").each { |i|
|
10
|
+
next if i =~ /^\./ || i !~ /.rb$/
|
11
|
+
puts "loading: #{i}"
|
12
|
+
require "#{TEST_CASE_DIR}/../flows/#{i}"
|
13
|
+
}
|
14
|
+
Dir.entries("#{TEST_CASE_DIR}/../helpers").each { |i|
|
15
|
+
next if i =~ /^\./ || i !~ /.rb$/
|
16
|
+
puts "loading: #{i}"
|
17
|
+
require "#{TEST_CASE_DIR}/../helpers/#{i}"
|
18
|
+
}
|
19
|
+
rescue NameError => e
|
20
|
+
raise e unless e.inspect =~ /TEST_CASE_DIR/
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
base_dir = File.expand_path(File.dirname(__FILE__))
|
2
|
+
require 'yaml'
|
3
|
+
require 'pstore'
|
4
|
+
require "#{base_dir}/doc"
|
5
|
+
require "#{$qa_observer_client}/../common/lib/gem_helpers"
|
6
|
+
GemHelpers.update_gem_path "#{$qa_observer_client}/../common/gems/installed"
|
7
|
+
require 'platform_helpers'
|
8
|
+
require 'capture_io'
|
9
|
+
require 'wait_for'
|
10
|
+
require "#{$qa_observer_client}/lib/test_extention"
|
11
|
+
require "#{$qa_observer_client}/lib/requires"
|
12
|
+
require "#{$qa_observer_client}/../common/lib/formatters"
|
13
|
+
require "#{$qa_observer_client}/../common/lib/load_test_data"
|
14
|
+
require "#{$qa_observer_client}/../common/lib/constants"
|
15
|
+
require "#{$qa_observer_client}/lib/error_defns"
|
16
|
+
require "#{$qa_observer_client}/lib/form_helpers"
|
17
|
+
require "#{$qa_observer_client}/../remote_unix/lib/requires"
|
18
|
+
|
19
|
+
require 'watir-webdriver'
|
20
|
+
require "#{$qa_observer_client}/lib/watir"
|
21
|
+
$environment ||= :test
|
22
|
+
$test_case_dir = TEST_CASE_DIR
|
23
|
+
require 'minitest/unit'
|
24
|
+
require 'fileutils'
|
25
|
+
require 'faker'
|
26
|
+
require 'hpricot'
|
27
|
+
require 'RMagick'
|
28
|
+
require 'getoptions'
|
29
|
+
require 'timeout'
|
30
|
+
#require 'ruby-debug'
|
31
|
+
|
32
|
+
|
33
|
+
$report = {}
|
34
|
+
class SystemTest < MiniTest::Unit::TestCase
|
35
|
+
TestExtention.require_for_platform
|
36
|
+
def element(name, &blk)
|
37
|
+
define_me(name, &blk)
|
38
|
+
end
|
39
|
+
|
40
|
+
# if $junit_format
|
41
|
+
# MiniTest::Unit.autorun junit_xml=true
|
42
|
+
# else
|
43
|
+
MiniTest::Unit.autorun
|
44
|
+
# end
|
45
|
+
|
46
|
+
def setup
|
47
|
+
raise ArgumentError unless $run_on_browser
|
48
|
+
|
49
|
+
# FIXME: add self.name for ruby 1.9.2 under platform_helpers
|
50
|
+
if RUBY_VERSION =~ /^1\.9/
|
51
|
+
$current_test_method = self.__name__
|
52
|
+
else
|
53
|
+
$current_test_method = self.name
|
54
|
+
end
|
55
|
+
$current_test_class = self.class.name
|
56
|
+
|
57
|
+
if $job
|
58
|
+
unless $job[:methods].include?($current_test_method)
|
59
|
+
@skip = true
|
60
|
+
#skip_msg = "skipping '#{$current_test_method}' as it is only supported under windows but RUBY_PLATFORM is: #{RUBY_PLATFORM}"
|
61
|
+
skip ''
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#@images = []
|
66
|
+
# inject required code into TestExtention
|
67
|
+
TestExtention.module_eval { @images = [] }
|
68
|
+
|
69
|
+
@capture_io = CaptureIO.new
|
70
|
+
@capture_io.start
|
71
|
+
super
|
72
|
+
|
73
|
+
LoadTestConfig.stuff("#{TEST_CASE_DIR}/../conf")
|
74
|
+
|
75
|
+
# there are some items that need to be required before items in the
|
76
|
+
# list below this if File.exists? block. Conflict of libs, etc..
|
77
|
+
if File.exists?("#{TEST_CASE_DIR}/../conf/preload.yaml")
|
78
|
+
YAML::load_file("#{TEST_CASE_DIR}/../conf/preload.yaml").each { |rb|
|
79
|
+
puts "PRELOADING: #{TEST_CASE_DIR}#{rb}"
|
80
|
+
require "#{TEST_CASE_DIR}#{rb}"
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
@skip = false
|
85
|
+
@tmp_image_path = "#{$qa_observer_client}/tmp/images"
|
86
|
+
|
87
|
+
|
88
|
+
# cleanup images from previous test case
|
89
|
+
#FileUtils.rm_rf @tmp_image_path if File.directory?(@tmp_image_path)
|
90
|
+
FileUtils.mkdir_p @tmp_image_path unless File.directory?(@tmp_image_path)
|
91
|
+
|
92
|
+
# check to see if the platform executing on matches desired results
|
93
|
+
if @windows_only && RUBY_PLATFORM !~ /win32/i
|
94
|
+
skip_msg = "skipping '#{$current_test_method}' as it is only supported under windows but RUBY_PLATFORM is: #{RUBY_PLATFORM}"
|
95
|
+
skip skip_msg
|
96
|
+
end
|
97
|
+
|
98
|
+
if $cfg.kind_of?(Hash)
|
99
|
+
$cfg = $cfg.merge(:base_url => $test_data[:base_urls][$environment][:root])
|
100
|
+
else
|
101
|
+
$cfg = $cfg = { :base_url => $test_data[:base_urls][$environment][:root] }
|
102
|
+
end
|
103
|
+
|
104
|
+
$sequence = 0
|
105
|
+
unless @no_browser
|
106
|
+
if Constants::SUPPORTED_BROWSERS.include?($run_on_browser)
|
107
|
+
$browser = Watir::Browser.new $run_on_browser.to_sym
|
108
|
+
else
|
109
|
+
raise ArgumentError, "Unsuppored browser provided: #{$run_on_browser}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def teardown
|
115
|
+
unless @skip
|
116
|
+
io = @capture_io.stop
|
117
|
+
file_base = "#{$current_test_class}_#{Time.now}.html"
|
118
|
+
$html_file = "#{TEST_CASE_DIR}/../results/" + file_base.gsub(/[ :]/, '_')
|
119
|
+
#images = Images::Results.new(@tmp_image_path).result_images
|
120
|
+
begin
|
121
|
+
doc = TCDoc.test_documentation($current_test_class, [$current_test_method], 'html')
|
122
|
+
doc = doc[$current_test_method] + "\n\n#{io[:stdout].pp}"
|
123
|
+
if $report.has_key?($current_test_class)
|
124
|
+
$report[$current_test_class] << {:num_asserts => @_assertions, :passed => @passed, :images => TestExtention.get_images,
|
125
|
+
:documentation => doc, :method => $current_test_method}
|
126
|
+
else
|
127
|
+
$report.merge!($current_test_class => [{:num_asserts => @_assertions, :passed => @passed, :images => TestExtention.get_images,
|
128
|
+
:documentation => doc, :method => $current_test_method}])
|
129
|
+
end
|
130
|
+
|
131
|
+
rescue => e
|
132
|
+
puts "EEE: generating result doc\n#{e.inspect}"
|
133
|
+
ensure
|
134
|
+
#FileUtils.rm_rf @tmp_image_path
|
135
|
+
begin
|
136
|
+
$browser.close if $browser
|
137
|
+
rescue => e
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
MiniTest::Unit.after_tests { TCDoc.build_html($report, $html_file) }
|
144
|
+
|
145
|
+
end
|
146
|
+
Requires.run
|