oats 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/oats/driver.rb CHANGED
@@ -45,13 +45,12 @@ module Oats
45
45
  # Returns oats_info object containing execution results
46
46
  def Driver.run(args)
47
47
  unless ENV['HOSTNAME']
48
- if ENV['OS'] == 'Windows_NT'
48
+ if RUBY_PLATFORM =~ /mswin32/
49
49
  ENV['HOSTNAME'] = ENV['COMPUTERNAME']
50
50
  else
51
51
  ENV['HOSTNAME'] = `hostname`.chomp
52
52
  end
53
53
  end
54
- ENV['OS'] ||= `uname`.chomp
55
54
 
56
55
  Log4r::Logger.root.level = Log4r::DEBUG
57
56
  Log4r::StdoutOutputter.new('console', :level=>1,
data/lib/oats/keywords.rb CHANGED
@@ -49,10 +49,30 @@ module Oats
49
49
  def process
50
50
  # Class name comes from Oats.data oats_keywords_cleass, or in the case of XL files from TestCase ID
51
51
  class_name = Oats.data('keywords.class') || File.basename(File.dirname(File.dirname(Oats.test.id)))
52
+ class_file = nil
52
53
  begin
53
54
  keywords_class = Kernel.const_get class_name
54
55
  rescue NameError
55
- raise OatsTestError, "Can not find class: " + class_name
56
+ class_file = Oats.data('keywords.class_file')
57
+ unless class_file # Try standard ruby conventions
58
+ class_file = class_name.dup
59
+ class_file.gsub!(/::/, '/')
60
+ class_file.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
61
+ class_file.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
62
+ class_file.tr!("-", "_")
63
+ class_file.downcase!
64
+ end
65
+ begin
66
+ Oats.info "Loading: '#{class_file}' for #{class_name}"
67
+ require class_file
68
+ begin
69
+ keywords_class = Kernel.const_get class_name
70
+ rescue NameError
71
+ raise OatsTestError, "Can not find class '#{class_name}' in class file: '#{class_file}'"
72
+ end
73
+ rescue LoadError
74
+ Oats.assert class_file.nil?, "Could not load Oats.data keywords.class_file '#{class_file}' for class '#{class_name}'."
75
+ end
56
76
  end
57
77
  oats_data('keywords',keywords_class).each do |action|
58
78
  Oats.assert keywords_class.respond_to?(action),
data/lib/oats/mysql.rb CHANGED
@@ -35,7 +35,7 @@ module Oats
35
35
  sql_out_name = name + '.txt' unless sql_out_name
36
36
  sql_out = File.join(test.result, sql_out_name) if sql_out_name
37
37
  err_file = sql_out + '.err'
38
- command = (ENV['OS'] != 'Darwin' ? 'mysql' : '/usr/local/mysql/bin/mysql') +
38
+ command = (RUBY_PLATFORM =~ /darwin'/ ? '/usr/local/mysql/bin/mysql' : 'mysql') +
39
39
  " #{parameters(connect)} < #{mysql_input_file} > #{sql_out} 2> #{err_file}"
40
40
  # $log.debug "Executing: #{command}"
41
41
  $log.info "SQL: #{sql_input}" if sql_input
data/lib/oats/oats.rb CHANGED
@@ -109,7 +109,7 @@ module Oats
109
109
  # Returns captured file name if successful, or nil.
110
110
  def Oats.system_capture
111
111
  return if $selenium.nil? or # Snapshots are not supported on Ubuntu/Chrome
112
- ($oats['selenium']['browser_type'] == 'chrome' and ENV['OS'] == 'Linux')
112
+ ($oats['selenium']['browser_type'] == 'chrome' and RUBY_PLATFORM =~ /linux/)
113
113
  ct = TestData.current_test
114
114
  file = Util.file_unique(fn="page_screenshot.png", ct.result)
115
115
  Oats.info "Will attempt to capture #{fn}."
@@ -1,5 +1,5 @@
1
1
  # Manages a lock file indicating a OATS session is in process
2
- require 'win32ole' if ENV['OS'] == 'Windows_NT'
2
+ require 'win32ole' if RUBY_PLATFORM =~ /mswin32/
3
3
  module Oats
4
4
 
5
5
  module OatsLock
@@ -14,7 +14,7 @@ module Oats
14
14
  @@file_handle = File.open(in_progress_file, 'w')
15
15
  my_pid = Process.pid.to_s
16
16
  @@file_handle.puts my_pid
17
- if ENV['OS'] != 'Windows_NT' or ENV['TEMP'] =~ /^\/cygdrive/
17
+ if RUBY_PLATFORM !~ /mswin32/ or ENV['TEMP'] =~ /^\/cygdrive/
18
18
  # Leave file handle open for windows to detect and kill associated java, etc.
19
19
  # processes using file handles.
20
20
  @@file_handle.close
@@ -30,7 +30,7 @@ module Oats
30
30
  def OatsLock.locked?(verify = nil)
31
31
  return @@is_locked unless verify
32
32
  @@is_locked = false
33
- if ENV['OS'] != 'Windows_NT' or ENV['TEMP'] =~ /^\/cygdrive/
33
+ if RUBY_PLATFORM !~ /mswin32/ or ENV['TEMP'] =~ /^\/cygdrive/
34
34
  if File.exist?(in_progress_file)
35
35
  pids = IO.readlines(in_progress_file)
36
36
  ruby_pid = pids.shift
@@ -140,7 +140,7 @@ module Oats
140
140
 
141
141
  def OatsLock.find_matching_processes(proc_names)
142
142
  matched = []
143
- if ENV['OS'] == 'Windows_NT'
143
+ if RUBY_PLATFORM =~ /mswin32/
144
144
  processes = WIN32OLE.connect("winmgmts://").ExecQuery("select * from win32_process")
145
145
  # for process in processes do
146
146
  # for property in process.Properties_ do
@@ -154,22 +154,22 @@ module Oats
154
154
  end
155
155
  end
156
156
  else
157
- pscom = ENV['OS'] == 'Linux' ? 'ps lxww' : 'ps -ef'
157
+ pscom = RUBY_PLATFORM =~ /linux/ ? 'ps lxww' : 'ps -ef'
158
158
  `#{pscom}`.split("\n").each do |lvar|
159
159
  line = lvar.chomp
160
- case ENV['OS']
161
- when 'Darwin' # ps -ef output
160
+ case RUBY_PLATFORM
161
+ when /darwin/ # ps -ef output
162
162
  pid = line[5..11]
163
163
  next if pid.to_i == 0
164
164
  ppid = line[12..16]
165
165
  proc_name = line[50..-1]
166
- when 'Linux' # ps ww output
166
+ when /linux/ # ps ww output
167
167
  pid = line[7..12]
168
168
  next if pid.to_i == 0
169
169
  ppid = line[13..18]
170
170
  proc_name = line[69..-1]
171
171
  else
172
- raise OatError, "Do not know how to parse ps output from #{ENV['OS']}"
172
+ raise OatError, "Do not know how to parse ps output from #{RUBY_PLATFORM}"
173
173
  end
174
174
  next unless pid
175
175
  matched.push [pid.strip, proc_name.strip, ppid.strip, line.strip] if proc_name =~ proc_names
@@ -189,7 +189,7 @@ module Oats
189
189
 
190
190
  # Kill all selenium automation chrome jobs on MacOS. Assumes MacOS is for development only, not OCC.
191
191
  # Will cause problems if multiple agents are run on MacOS
192
- if ENV['OS'] == 'Darwin'
192
+ if RUBY_PLATFORM =~ /darwin/
193
193
  chrome_automation_procs = OatsLock.find_matching_processes(/ Chrome .* --dom-automation/)
194
194
  chrome_automation_procs.each do |pid,proc_name,ppid|
195
195
  OatsLock.kill_pid pid
@@ -222,7 +222,7 @@ module Oats
222
222
  @@file_handle = nil
223
223
  @@is_locked = true
224
224
  else # Doesn't return status properly for non-windows, just resets the lock
225
- if $oats_execution['agent'].nil? and ENV['OS'] != 'Windows_NT' and File.exist?(in_progress_file)
225
+ if $oats_execution['agent'].nil? and RUBY_PLATFORM !~ /mswin32/ and File.exist?(in_progress_file)
226
226
  pids = IO.readlines(in_progress_file)
227
227
  current_pid = pids.shift
228
228
  pids.each { |pid| OatsLock.kill_pid(pid.chomp) } # Legacy firefox
@@ -45,13 +45,13 @@ module Oats
45
45
  if browser_type == 'firefox'
46
46
  $oats_global['download_dir'] = $oats['execution']['dir_results'] + '/downloads'
47
47
  elsif Oats.data("selenium.default_downloads")
48
- $oats_global['download_dir'] = File.join(ENV[ ENV['OS'] == 'Windows_NT' ? 'USERPROFILE' : 'HOME'], 'Downloads')
49
- $oats_global['download_dir'].gsub!('\\','/') if ENV['OS'] == 'Windows_NT'
48
+ $oats_global['download_dir'] = File.join(ENV[ RUBY_PLATFORM =~ /mswin32/ ? 'USERPROFILE' : 'HOME'], 'Downloads')
49
+ $oats_global['download_dir'].gsub!('\\','/') if RUBY_PLATFORM =~ /mswin32/
50
50
  end
51
51
  end
52
52
 
53
53
  download_dir = $oats_global['download_dir'].gsub('/','\\\\') if $oats_global['download_dir'] and
54
- ENV['OS'] == 'Windows_NT'
54
+ RUBY_PLATFORM =~ /mswin32/
55
55
  download_dir ||= $oats_global['download_dir']
56
56
  case browser_type
57
57
  when 'firefox'
@@ -69,10 +69,10 @@ module Oats
69
69
  profile = Selenium::WebDriver::Chrome::Profile.new
70
70
  profile['download.prompt_for_download'] = false
71
71
  profile['download.default_directory'] = download_dir
72
- unless $oats_global['browser_path']
73
- vpath = File.join($oats['_']['vendor'], ENV['OS'], 'chromedriver' + (ENV['OS'] == 'Windows_NT' ? '.exe' : '') )
74
- $oats_global['browser_path'] = vpath if File.exist?(vpath)
75
- end
72
+ # unless $oats_global['browser_path']
73
+ # vpath = File.join($oats['_']['vendor'], ENV['OS'], 'chromedriver' + (RUBY_PLATFORM =~ /mswin32/ ? '.exe' : '') )
74
+ # $oats_global['browser_path'] = vpath if File.exist?(vpath)
75
+ # end
76
76
  end
77
77
  FileUtils.rm_f Dir.glob(File.join($oats_global['download_dir'],'*')) if $oats_global['download_dir']
78
78
  Oats.info "Browser type: #{browser_type.inspect}, profile: #{profile.inspect}, path: #{$oats_global["browser_path"].inspect}"
@@ -127,9 +127,9 @@ module Oats
127
127
  file.sub!(ENV['OATS_HOME'], $oats['selenium']['remote_webdriver']['oats_dir'])
128
128
  file_os = $oats['selenium']['remote_webdriver']['os']
129
129
  else
130
- file_os = ENV['OS']
130
+ file_os = RUBY_PLATFORM
131
131
  end
132
- file_os == 'Windows_NT' ? file.gsub('/','\\') : file
132
+ file_os =~ /mswin32/ ? file.gsub('/','\\') : file
133
133
  end
134
134
 
135
135
  def Oselenium.reset
@@ -432,7 +432,7 @@ module Oats
432
432
  out_contents = IO.read(file_out).gsub(/\s/,'')
433
433
  unless ok_contents == out_contents
434
434
  err = "File in out folder did not match out folder in: #{file_ok}"
435
- diff_lines = `diff -b '#{file_ok}' '#{file_out}'` unless ENV['OS'] == 'Windows_NT'
435
+ diff_lines = `diff -b '#{file_ok}' '#{file_out}'` unless RUBY_PLATFORM =~ /mswin32/
436
436
  end
437
437
  else
438
438
  err = "Extra output [#{file}] missing from: #{test_ok_out}"
@@ -62,7 +62,7 @@ module Oats
62
62
  extn = File.extname(test_file)
63
63
  extn = nil if extn == ''
64
64
  found_file = catch :found_file do
65
- if ENV['OS'] == 'Windows_NT' ? test_file[1] == ?: : test_file[0] == ?/ # absolute path
65
+ if RUBY_PLATFORM =~ /mswin32/ ? test_file[1] == ?: : test_file[0] == ?/ # absolute path
66
66
  # Try exact match
67
67
  throw(:found_file, test_file) if File.exist?(test_file) and (is_dir or not FileTest.directory?(test_file))
68
68
 
data/lib/oats/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oats
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/oats.gemspec CHANGED
@@ -16,25 +16,25 @@ Gem::Specification.new do |s|
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
  # s.test_files = ["test/test_cgi_wrapper.rb" ]
19
- s.executables = %w{oats}
19
+ s.executables = %w{oats occ}
20
20
  s.require_paths = ["lib"]
21
21
 
22
- # s.extra_rdoc_files = ["CHANGELOG", "COPYING", "lib/mongrel/camping.rb", "LICENSE", "README"]
22
+ # s.extra_rdoc_files = ["CHANGELOG", "COPYING", "lib/oats/oats.rb", "LICENSE", "README"]
23
23
  # s.has_rdoc = true
24
- # s.homepage = %q{http://mongrel.rubyforge.org}
25
- # s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Mongrel", "--main", "README"
24
+ # s.homepage = %q{http://oats .org}
25
+ # s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Oats", "--main", "README"
26
26
  s.date = %q{2012-05-22}
27
27
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
28
28
 
29
29
  s.add_dependency 'log4r'
30
- s.add_dependency 'net-http-persistent' unless RUBY_VERSION !~ /^1.9/ # Speed up 1.8 connections
30
+ s.add_dependency 'net-http-persistent' unless RUBY_VERSION =~ /^1.9/ # Speed up 1.8 connections
31
31
 
32
- if ENV['OS'] == 'Windows_NT' or ENV['OATS_AGENT'] # Triggers possible intent to use agent
32
+ if RUBY_PLATFORM =~ /mswin32/ # Assume won't use the agent
33
33
  s.add_dependency 'win32-process'
34
34
  else
35
35
  s.add_dependency 'json'
36
36
  s.add_dependency 'em-http-request'
37
- if ENV['OS'] == 'Linux' # Seems to be needed by Ubuntu
37
+ if RUBY_PLATFORM =~ /linux/ # Seems to be needed by Ubuntu
38
38
  s.add_dependency 'execjs'
39
39
  s.add_dependency 'therubyracer'
40
40
  end
data/oats_ini.yml CHANGED
@@ -242,6 +242,7 @@ sql:
242
242
  # <oats_data>
243
243
  #<class>:
244
244
  keywords:
245
+ class_file: # File name of the class so it can be 'require'd if using a non-standard name
245
246
  class: # Class file containing methods for each keyword
246
247
  list: # Optional list name under which to find the keywords and data in Oats.data
247
248
 
data/oats_tests/Gemfile CHANGED
@@ -1,15 +1,13 @@
1
- #source "http://rubygems.org"
1
+ source "http://rubygems.org"
2
2
 
3
3
  # OATS Framework
4
4
  gem 'oats' unless defined?(OATS_GEM_IS_ALREADY_INCLUDED)
5
- # OATS_GEM_IS_ALREADY_INCLUDED
5
+ gem 'spreadsheet' # If you want to run XL based tests
6
6
 
7
- ## List GEMs needed by the AUT goes here
8
- ##
9
- ## To run XL based tests
10
- gem 'spreadsheet'
11
- #require 'sample_xl_lists' # Include XL based classes to be used.
12
7
  #
8
+ # List GEMs needed by the AUT here, and require them in your test classes
9
+ #
10
+
13
11
  gem 'selenium-webdriver' # To run WebDriver tests
14
12
  gem 'json' # To run WebDriver tests w/o ok_json to improve performance
15
13
  #
@@ -1,7 +1,7 @@
1
1
  # For full documentation on OATS, please refer to https://github.com/latasoy/oats
2
2
 
3
3
  keywords:
4
- class: # Class file containing methods for each keyword
4
+ class: # Class name containing methods for each keyword
5
5
  list: # List name under which to find the keywords and data in Oats.data
6
6
 
7
7
  SampleXlLists:
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oats
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Levent Atasoy
@@ -32,7 +32,7 @@ dependencies:
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
34
  - !ruby/object:Gem::Dependency
35
- name: json
35
+ name: net-http-persistent
36
36
  prerelease: false
37
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
38
  none: false
@@ -46,7 +46,7 @@ dependencies:
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
- name: em-http-request
49
+ name: json
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
52
  none: false
@@ -59,11 +59,26 @@ dependencies:
59
59
  version: "0"
60
60
  type: :runtime
61
61
  version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: em-http-request
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :runtime
75
+ version_requirements: *id004
62
76
  description: A flexible automated system integration regression test framework.
63
77
  email:
64
78
  - levent.atasoy@gmail.com
65
79
  executables:
66
80
  - oats
81
+ - occ
67
82
  extensions: []
68
83
 
69
84
  extra_rdoc_files: []
@@ -243,7 +258,6 @@ files:
243
258
  - oats_tests/examples/testFileLocationUnitTests/testDir2/t1.yml
244
259
  - oats_tests/examples/testFileLocationUnitTests/unitTestList.yml
245
260
  - oats_tests/examples/testFileLocationUnitTests/yml_driver.rb
246
- - oats_tests/lib/business.rb
247
261
  - oats_tests/lib/sample_xl_lists.rb
248
262
  - test/common_test_unit_setup.rb
249
263
  - test/test_basic.rb
@@ -1,28 +0,0 @@
1
- require 'oats_x'
2
- class Business < OatsX
3
-
4
- def self.common(c)
5
- Oats.info "Executing #{c} " + Oats.xl.inspect
6
- end
7
-
8
- def self.component1
9
- self.common 'component1'
10
-
11
- end
12
-
13
- def self.component2
14
- self.common 'component2'
15
- # selenium = Oats.browser('http://google.com')
16
- # selenium.type("id=gbqfq", 'xxxx')
17
- # selenium.click("id=gbqfb")
18
- #
19
- # selenium.find_element(:id, "gbqfq").clear
20
- # selenium.find_element(:id, "gbqfq").send_keys "xxxx"
21
- # selenium.find_element(:id, "gbqfb").click
22
- end
23
-
24
- def self.component3
25
- self.common 'component3'
26
- end
27
-
28
- end