watirsplash 0.1.9 → 0.2.0

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.
@@ -1,3 +1,14 @@
1
+ === Version 0.2.0 / 2010-05-03
2
+
3
+ PS! This version has some backwards incompatible changes!
4
+
5
+ * added max_depth parameter to Watir::Table#to_a and Watir::TableRow#to_a methods for avoiding too complex arrays if wanted
6
+ * watirsplash is not used to launch tests anymore - use regular RSpec's 'spec' command instead
7
+ * tests need to be inside of 'spec' directory, because spec.opts is responsible for loading every library
8
+ * you can launch tests with IDE by using -O spec.opts as a spec runner parameter
9
+ * Watir::Element#style returns current CSS style for element
10
+ * ui-test and ui-test-common project templates got changed
11
+
1
12
  === Version 0.1.9 / 2010-05-01
2
13
 
3
14
  * Changed name of the library to WatirSplash due to name conflict
@@ -5,8 +5,8 @@
5
5
 
6
6
  == DESCRIPTION:
7
7
 
8
- WatirSplash is a small library for easier browser-based functional testing in Ruby.
9
- It combines Watir (http://www.watir.com) for controlling the browser (currently mainly IE) and
8
+ WatirSplash makes browser-based testing in Ruby splashin' easy.
9
+ It combines Watir (http://www.watir.com) for controlling the browser and
10
10
  RSpec (http://rspec.info) for testing framework. This powerful combination gives you
11
11
  the ability to write easily well-maintained and easy-to-read specs (specifications in RSpec) so
12
12
  you don't need to have any extra documentation for your applications.
@@ -17,23 +17,56 @@ testing right away!
17
17
 
18
18
  == FEATURES:
19
19
 
20
- * generate command for generating default project structure
21
- * generate_common command for generating common ui-tests directory
20
+ * generate command for generating default tests project structure
21
+ * generate_common command for generating a project structure for common functionality in your tests
22
22
  * Browser will be opened and closed for each example group automatically
23
23
  * You can use Watir method names directly without having to specify a browser object:
24
24
  text_field(:name => "locator") # instead of @browser.text_field(:name => "locator")
25
25
  * All needed libraries will be loaded and helper modules will be included automatically
26
- * All JavaScript errors will be detected automatically
26
+ * All JavaScript errors will be detected and saved automatically
27
27
  * Some additional methods to help using Watir (download_file, wait_until, wait_until! etc.)
28
+ * Some patches for different libraries which haven't made yet to the libraries themselves
28
29
 
29
30
  * Custom html formatter for RSpec:
30
- * Saves screenshot of the browser window
31
- * Saves html of the page
32
- * Saves all the files created/downloaded during the example and shows them on the report
33
- * Automatically archives test results for later reviewing
31
+ - saves screenshot of the browser window
32
+ - saves html of the page
33
+ - saves all the files created/downloaded during the example and shows them on the report
34
+ - automatically archives test results for later reviewing
34
35
 
35
36
  == SYNOPSIS:
36
37
 
38
+ Without WatirSplash:
39
+ require 'watir'
40
+ require 'spec'
41
+
42
+ describe "Google" do
43
+ before :all do
44
+ @browser = Watir::Browser.new
45
+ @browser.maximize
46
+ @browser.goto "http://google.com"
47
+ @browser.url.should =~ /google/
48
+ end
49
+
50
+ it "has search field" do
51
+ @browser.text_field = text_field(:name => "q")
52
+ @browser.text_field.should exist
53
+ @browser.text_field.should be_visible
54
+ end
55
+
56
+ it "performs search" do
57
+ @browser.text_field(:name => "q").set "Bing"
58
+ @browser.button(:name => "btnG").click
59
+ @browser.text.should include("Bing")
60
+ end
61
+
62
+ after :all do
63
+ @browser.close
64
+ end
65
+ end
66
+
67
+
68
+
69
+ With WatirSplash:
37
70
  describe "Google" do
38
71
  before :all do
39
72
  goto "http://google.com"
@@ -53,7 +86,7 @@ testing right away!
53
86
  end
54
87
  end
55
88
 
56
- C:\project\ui-test>watirsplash spec\google_spec.rb
89
+ C:\project\ui-test>spec spec\google_spec.rb
57
90
  Results will be saved into the directory C:/project/ui-test/results
58
91
  Google
59
92
  has search field
@@ -68,11 +101,8 @@ testing right away!
68
101
  * install Ruby 1.8.6:
69
102
  http://rubyinstaller.org/
70
103
 
71
- * install ImageMagick with rmagick-win32 for making the screenshots:
104
+ * install ImageMagick with rmagick-win32 for saving the screenshots in PNG format:
72
105
  http://rubyforge.org/frs/?group_id=12&release_id=42049
73
-
74
- * update RubyGems:
75
- gem update --system
76
106
 
77
107
  * install WatirSplash:
78
108
  gem install watirsplash
@@ -105,17 +135,18 @@ The contents of that ui-test directory will be:
105
135
  ui-test\application_helper.rb
106
136
  ui-test\config.rb
107
137
  ui-test\environment.rb
108
- ui-test\ide_runner.rb
109
138
 
110
139
  ui-test\spec
111
140
  ui-test\spec\dummy_spec.rb
141
+ ui-test\spec\spec.opts
112
142
 
113
143
  Just check out all the files to see some example code and comments in it and execute dummy_spec.rb
114
144
  to verify that everything works correctly:
115
- watirsplash spec\dummy_spec.rb
116
-
117
- You can have whatever directory structure for your tests just make sure that all test files have _spec.rb in
118
- the end of their filename (if using default RSpec options).
145
+ spec spec\dummy_spec.rb
146
+
147
+ You have to create your tests under spec directory so RSpec would load spec.opts automatically.
148
+ You can have whatever directory structure under this directory just make sure that
149
+ all test files have _spec.rb in the end of their filename (if using default RSpec options).
119
150
 
120
151
  == USAGE FOR MULTIPLE PROJECTS:
121
152
 
@@ -138,7 +169,7 @@ to generate ui-test-common directory:
138
169
  Done
139
170
 
140
171
  It has a structure of:
141
- C:\UI-TEST-COMMON
172
+ C:\ui-test-common
142
173
  └───lib
143
174
 
144
175
  ui-test-common\config.rb
@@ -147,12 +178,12 @@ It has a structure of:
147
178
  ui-test-common\lib\common_application_helper.rb
148
179
 
149
180
  In environment.rb under project/ui-test you shall add common functionality to your project.
150
- Add the following line before any other require statements to do that:
181
+ Uncomment the following line:
151
182
  WatirSplash::Util.load_common
152
183
 
153
184
  This gives you by default the access to every method in ui-test-common/lib/common_application_helper.rb
154
185
 
155
- Now, in ui-test-common/config.rb change the URL to your hostname and in config.rb under project/ui-test:
186
+ Now, in ui-test-common/config.rb change the URL to your hostname and in project's config.rb:
156
187
  URL = Config.full_url("/relative_path")
157
188
 
158
189
  This gives you the ability to have host and port written only in one place.
@@ -168,4 +199,5 @@ If you see the following error message when running watirsplash:
168
199
  R6034. An application has made an attempt to load the C runtime library incorrectly.
169
200
 
170
201
  Solution:
171
- Install Microsoft Visual C++ 2008 SP1 Redistributable Package
202
+ This is caused by ImageMagick.
203
+ Install Microsoft Visual C++ 2008 SP1 Redistributable Package to solve the problem.
data/Rakefile CHANGED
@@ -1,16 +1,66 @@
1
+ require 'rubygems'
1
2
  require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ version = File.read("VERSION").strip
8
+ gem.name = "watirsplash"
9
+ gem.summary = %Q{watirsplash #{version}}
10
+ gem.description = %q{WatirSplash makes testing of web applications splashin' easy by combining best features of Watir, RSpec and Ruby!}
11
+ gem.email = "jarmo.p@gmail.com"
12
+ gem.homepage = "http://github.com/jarmo/WatirSplash"
13
+ gem.authors = ["Jarmo Pertman"]
14
+ gem.executables = ["watirsplash"]
15
+ gem.extra_rdoc_files = ["README.rdoc", "History.rdoc", "License.txt"]
16
+ gem.rdoc_options << "--main" << "README.rdoc" <<
17
+ "--template" << "hanna" <<
18
+ "--inline-source" << "--format=html"
19
+ ignored_files = File.readlines(".gitignore").map {|l| l.strip.gsub("*", "")}
20
+ ignored_files << ".gitignore" << ".gemspec"
21
+ gem.files = Dir.glob("**/*").delete_if {|f| f =~ Regexp.union(*ignored_files)}
22
+ gem.post_install_message = %Q{#{"*"*25}
23
+
24
+ Thank you for installing WatirSplash #{version}! Don't forget to take a look at README and History files!
25
+
26
+ Execute "watirsplash generate" under your project's directory to generate default project structure.
27
+
28
+ #{"*"*25}}
29
+
30
+ gem.add_dependency("watir", ">=1.6.5")
31
+ gem.add_dependency("rspec", ">=1.3.0")
32
+ gem.add_dependency("diff-lcs")
33
+ gem.add_dependency("require_all")
34
+ gem.add_dependency("rmagick")
35
+ gem.add_dependency("syntax")
36
+ gem.add_dependency("win32console")
37
+ gem.add_dependency("win32screenshot")
38
+ end
39
+ Jeweler::GemcutterTasks.new
40
+ rescue LoadError
41
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
42
+ end
43
+
2
44
  require 'spec/rake/spectask'
45
+ Spec::Rake::SpecTask.new(:spec) do |spec|
46
+ spec.libs << 'lib' << 'spec'
47
+ spec.spec_files = FileList['spec/**/*_spec.rb']
48
+ end
3
49
 
4
- Spec::Rake::SpecTask.new(:rcov) do |t|
5
- t.spec_files = FileList['spec/**/*_spec.rb']
6
- t.rcov = true
7
- t.rcov_dir = 'coverage'
8
- t.rcov_opts << '--sort coverage --text-summary --aggregate coverage.data'
50
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
51
+ spec.libs << 'lib' << 'spec'
52
+ spec.pattern = 'spec/**/*_spec.rb'
53
+ spec.rcov = true
9
54
  end
10
55
 
11
- Spec::Rake::SpecTask.new(:spec) do |t|
12
- t.spec_files = FileList['spec/**/*_spec.rb']
13
- t.spec_opts << "--options" << "lib/spec.opts" <<
14
- "--require" << "lib/watirsplash/html_formatter" <<
15
- "--format" << "WatirSplash::HtmlFormatter:results/index.html"
16
- end
56
+ task :default => :spec
57
+
58
+ require 'rake/rdoctask'
59
+ Rake::RDocTask.new do |rdoc|
60
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
61
+
62
+ rdoc.rdoc_dir = 'rdoc'
63
+ rdoc.title = "my-testing-library #{version}"
64
+ rdoc.rdoc_files.include('README*')
65
+ rdoc.rdoc_files.include('lib/**/*.rb')
66
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.0
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- watirsplash_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ watirsplash_dir = File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
3
3
  $LOAD_PATH.unshift(watirsplash_dir) unless $LOAD_PATH.include?(watirsplash_dir)
4
- require 'watirsplash/runner'
4
+ require 'watirsplash/generator'
5
5
 
6
- if ARGV.size == 1 && ::WatirSplash::Runner.respond_to?(ARGV[0])
7
- exit ::WatirSplash::Runner.send(ARGV[0])
6
+ if ARGV.size == 1 && ::WatirSplash::Generator.respond_to?(ARGV[0])
7
+ exit ::WatirSplash::Generator.send(ARGV[0])
8
8
  else
9
- exit ::WatirSplash::Runner.run
10
- end
9
+ exit ::WatirSplash::Generator.help
10
+ end
@@ -2,10 +2,13 @@ require "rubygems"
2
2
  require "require_all"
3
3
  require "spec"
4
4
  require "watir"
5
- require "watirsplash/util"
6
- require "watirsplash/waiter"
7
- require "watirsplash/spec_helper"
8
- require "watirsplash/spec"
9
- require "watirsplash/watir"
10
- require "watirsplash/autoit"
5
+ require "win32screenshot"
6
+ require_rel "watirsplash/win32screenshot"
7
+ require_rel "watirsplash/waiter"
8
+ require_rel "watirsplash/spec_helper"
9
+ require_rel "watirsplash/spec"
10
+ require_rel "watirsplash/watir"
11
+ require_rel "watirsplash/autoit"
12
+ require_rel "watirsplash/util"
13
+ WatirSplash::Util.load_environment
11
14
 
@@ -0,0 +1,55 @@
1
+ module WatirSplash
2
+
3
+ # WatirSplash Generator class is responsible for:
4
+ # * generating directory structures for projects
5
+ class Generator
6
+ @@template_directory = File.join(File.dirname(__FILE__), "../../templates/")
7
+
8
+ class << self
9
+
10
+ # Generates ui-test directory structure for project
11
+ def generate
12
+ ui_test_dir = File.join(Dir.pwd, "ui-test")
13
+ puts "Creating WatirSplash directory structure to #{ui_test_dir}..."
14
+ require "fileutils"
15
+ FileUtils.cp_r File.join(@@template_directory, "project/."), ui_test_dir
16
+ puts "Done"
17
+ return 0
18
+ rescue => e
19
+ puts "Failed:"
20
+ puts e.message
21
+ return -1
22
+ end
23
+
24
+ # Generates ui-test-common directory structure
25
+ def generate_common
26
+ common_dir = File.join(Dir.pwd, "ui-test-common")
27
+ puts "Creating WatirSplash ui-test-common directory structure to #{common_dir}..."
28
+ require "fileutils"
29
+ FileUtils.cp_r File.join(@@template_directory, "common/."), common_dir
30
+ puts "Done"
31
+ return 0
32
+ rescue => e
33
+ puts "Failed:"
34
+ puts e.message
35
+ return -1
36
+ end
37
+
38
+ # Shows help
39
+ def help
40
+ puts %Q{WatirSplash:
41
+ Usage: watirsplash (COMMAND|FILE(:LINE)?|DIRECTORY|GLOB)+ [options]
42
+ Commands:
43
+ * generate - generate default directory structure for new project
44
+ * generate_common - generate common project directory structure
45
+ * help - show this help
46
+ * --help - show RSpec's help
47
+
48
+ All other commands/options will be passed to RSpec directly.}
49
+
50
+ return 1
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -46,11 +46,6 @@ module WatirSplash
46
46
  # be shown on the report upon test failure.
47
47
  def file_path(file_name, description=nil)
48
48
  formatter.file_path(file_name, description)
49
- rescue
50
- extension = File.extname(file_name)
51
- basename = File.basename(file_name, extension)
52
- file_path = File.join(Dir.pwd, "#{basename}_#{Time.now.strftime("%H%M%S")}#{extension}")
53
- file_path
54
49
  end
55
50
 
56
51
  # returns native file path
@@ -15,6 +15,17 @@ module WatirSplash
15
15
  require File.join(dir, "environment.rb")
16
16
  end
17
17
 
18
+ def load_environment
19
+ env_file = File.join(Dir.pwd, "environment.rb")
20
+ if File.exists?(env_file)
21
+ require env_file
22
+ else
23
+ Dir.chdir("..") do
24
+ load_environment if Dir.entries(Dir.pwd).include?("..")
25
+ end
26
+ end
27
+ end
28
+
18
29
  private
19
30
 
20
31
  def common_dir
@@ -82,6 +82,16 @@ module Watir
82
82
  end
83
83
  end
84
84
 
85
+ class Element #:nodoc:all
86
+ def_wrap_guard :currentstyle
87
+
88
+ # returns current style instead of inline style
89
+ # http://msdn.microsoft.com/en-us/library/ms535231(VS.85).aspx
90
+ def style
91
+ currentstyle
92
+ end
93
+ end
94
+
85
95
  module PageContainer #:nodoc:all
86
96
  # patch for .click_no_wait
87
97
  def eval_in_spawned_process(command)
@@ -97,14 +107,15 @@ module Watir
97
107
 
98
108
  class Table < Element
99
109
 
100
- # This method returns multi-dimensional array of the text's in table.
110
+ # This method returns multi-dimensional array of the cell texts in table.
101
111
  #
102
- # It works with tr, th, td elements, colspan, rowspan and nested tables.
103
- def to_a
112
+ # Works with tr, th, td elements, colspan, rowspan and nested tables.
113
+ # Takes an optional parameter *max_depth*, which is by default 1
114
+ def to_a(max_depth=1)
104
115
  assert_exists
105
116
  y = []
106
117
  @o.rows.each do |row|
107
- y << TableRow.new(@container, :ole_object, row).to_a
118
+ y << TableRow.new(@container, :ole_object, row).to_a(max_depth)
108
119
  end
109
120
  y
110
121
  end
@@ -112,10 +123,11 @@ module Watir
112
123
 
113
124
  class TableRow < Element
114
125
 
115
- # This method returns (multi-dimensional) array of the text's in table's row.
126
+ # This method returns (multi-dimensional) array of the cell texts in table's row.
116
127
  #
117
- # It works with th, td elements, colspan, rowspan and nested tables.
118
- def to_a
128
+ # Works with th, td elements, colspan, rowspan and nested tables.
129
+ # Takes an optional parameter *max_depth*, which is by default 1
130
+ def to_a(max_depth=1)
119
131
  assert_exists
120
132
  y = []
121
133
  @o.cells.each do |cell|
@@ -123,7 +135,8 @@ module Watir
123
135
  inner_tables.each do |inner_table|
124
136
  # make sure that the inner table is directly child for this cell
125
137
  if inner_table?(cell, inner_table)
126
- y << Table.new(@container, :ole_object, inner_table).to_a
138
+ max_depth -= 1
139
+ y << Table.new(@container, :ole_object, inner_table).to_a(max_depth) if max_depth >= 1
127
140
  end
128
141
  end
129
142
 
@@ -0,0 +1,52 @@
1
+ module Win32
2
+ module Screenshot
3
+
4
+ # added patches by Tony Popiel for fixing the problem
5
+ # of failing to take a screenshot of every size of the window
6
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=26216&group_id=2683&atid=10359
7
+ module_function
8
+
9
+ def capture(hScreenDC, x1, y1, x2, y2)
10
+ w = x2-x1
11
+ h = y2-y1
12
+
13
+ # Reserve some memory
14
+ hmemDC = createCompatibleDC(hScreenDC)
15
+ hmemBM = createCompatibleBitmap(hScreenDC, w, h)
16
+ selectObject(hmemDC, hmemBM)
17
+ bitBlt(hmemDC, 0, 0, w, h, hScreenDC, 0, 0, SRCCOPY)
18
+ # changed line
19
+ # hpxldata = globalAlloc(GMEM_FIXED, w * h * 3)
20
+ hpxldata = globalAlloc(GMEM_FIXED, ((w*h*3)+(w%4)*h))
21
+ lpvpxldata = globalLock(hpxldata)
22
+
23
+ # Bitmap header
24
+ # http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html
25
+ bmInfo = [40, w, h, 1, 24, 0, 0, 0, 0, 0, 0, 0].pack('LLLSSLLLLLL').to_ptr
26
+
27
+ getDIBits(hmemDC, hmemBM, 0, h, lpvpxldata, bmInfo, DIB_RGB_COLORS)
28
+
29
+ bmFileHeader = [
30
+ 19778,
31
+ # changed line
32
+ # (w * h * 3) + 40 + 14,
33
+ (w * h * 3) + (w%4)*h + 40 + 14,
34
+ 0,
35
+ 0,
36
+ 54
37
+ ].pack('SLSSL').to_ptr
38
+
39
+ # changed line
40
+ # data = bmFileHeader.to_s(14) + bmInfo.to_s(40) + lpvpxldata.to_s(w * h * 3)
41
+ data = bmFileHeader.to_s(14) + bmInfo.to_s(40) + lpvpxldata.to_s((w*h*3)+(w%4)*h)
42
+
43
+ globalUnlock(hpxldata)
44
+ globalFree(hpxldata)
45
+ deleteObject(hmemBM)
46
+ deleteDC(hmemDC)
47
+ releaseDC(0, hScreenDC)
48
+
49
+ return [w, h, data]
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ --require
2
+ lib\watirsplash
3
+ --require
4
+ lib\watirsplash\html_formatter
5
+ --format
6
+ WatirSplash::HtmlFormatter:results/index.html
7
+ --color
8
+ --format
9
+ nested
10
+ --diff
11
+ u
@@ -1,5 +1,4 @@
1
- require "watirsplash"
2
- require "spec/autorun"
1
+ require "spec"
3
2
 
4
3
  describe WatirSplash::SpecHelper do
5
4
 
@@ -31,15 +30,15 @@ describe WatirSplash::SpecHelper do
31
30
  lambda {wait_until!(0.5) {sleep 0.1; false}}.should raise_exception(Watir::Exception::TimeOutException)
32
31
  end
33
32
 
34
- it "has file_path methods without using formatter" do
33
+ it "has file_path methods formatter" do
35
34
  file_name = "blah.temp"
36
35
  ext = File.extname(file_name)
37
36
  base = File.basename(file_name, ext)
38
- expected_path = File.join(Dir.pwd, "#{base}_\\d{6}#{ext}")
37
+ expected_path = File.join(Dir.pwd, "results/files/#{base}_.*#{ext}")
39
38
 
40
39
  file_path(file_name).should =~ Regexp.new(expected_path)
41
40
  expected_path = expected_path.gsub("/", "\\")
42
- native_file_path(file_path(file_name)).should =~ Regexp.new(Regexp.escape(expected_path).gsub("\\\\d\\{6\\}", "\\d{6}"))
41
+ native_file_path(file_path(file_name)).should =~ Regexp.new(Regexp.escape(expected_path).gsub("\\.\\*", ".*"))
43
42
  end
44
43
 
45
44
  it "has download_file method" do
@@ -1,5 +1,4 @@
1
- require "spec/autorun"
2
- require "watirsplash"
1
+ require "spec"
3
2
 
4
3
  describe "Array match_array matcher" do
5
4
 
@@ -1,5 +1,4 @@
1
- require "watirsplash"
2
- require "spec/autorun"
1
+ require "spec"
3
2
 
4
3
  describe WatirSplash::Util do
5
4
 
@@ -1,8 +1,19 @@
1
- require "watirsplash"
2
- require "spec/autorun"
1
+ require "spec"
3
2
 
4
3
  describe Watir::IE do
5
4
 
5
+ it "uses currentStyle method to show computed style" do
6
+ goto "http://dl.dropbox.com/u/2731643/misc/tables.html"
7
+ t = table(:id => "normal")
8
+ normal_cell = t[1][1]
9
+ normal_cell.text.should == "1"
10
+ normal_cell.style.color.should == "#000000"
11
+
12
+ red_cell = t.cell(:class => "reddish")
13
+ red_cell.text.should == "9"
14
+ red_cell.style.color.should == "red"
15
+ end
16
+
6
17
  it "closes the browser even when Watir::IE#run_error_checks throws an exception" do
7
18
  @browser.add_checker lambda {raise "let's fail IE#wait in IE#close"}
8
19
  @browser.should exist
@@ -1,5 +1,4 @@
1
- require "watirsplash"
2
- require "spec/autorun"
1
+ require "spec"
3
2
 
4
3
  describe Watir::TableRow do
5
4
  include WatirSplash::SpecHelper
@@ -20,12 +19,12 @@ describe Watir::TableRow do
20
19
 
21
20
  it "#to_a works with nested tables" do
22
21
  second_row = table(:id => "nested")[2]
23
- second_row.to_a.should == [[["11", "12"], ["13","14"]], "3"]
22
+ second_row.to_a(2).should == [[["11", "12"], ["13","14"]], "3"]
24
23
  end
25
24
 
26
25
  it "#to_a works with deep-nested tables" do
27
26
  second_row = table(:id => "deepnested")[2]
28
- second_row.to_a.should == [[["11", "12"],
27
+ second_row.to_a(3).should == [[["11", "12"],
29
28
  [[["404", "405"], ["406", "407"]], "14"]], "3"]
30
29
  end
31
30
 
@@ -1,5 +1,4 @@
1
- require "watirsplash"
2
- require "spec/autorun"
1
+ require "spec"
3
2
 
4
3
  describe Watir::Table do
5
4
  include WatirSplash::SpecHelper
@@ -33,7 +32,7 @@ describe Watir::Table do
33
32
  [[["11", "12"],
34
33
  ["13", "14"]], "3"]
35
34
  ]
36
- table(:id => "nested").to_a.should == expected_table
35
+ table(:id => "nested").to_a(2).should == expected_table
37
36
  end
38
37
 
39
38
  it "#to_a works with nested table with non-direct child" do
@@ -44,7 +43,7 @@ describe Watir::Table do
44
43
  ["13", "14"]], "3"]
45
44
  ]
46
45
 
47
- table(:id => "nestednondirectchild").to_a.should == expected_table
46
+ table(:id => "nestednondirectchild").to_a(2).should == expected_table
48
47
  end
49
48
 
50
49
  it "#to_a works with deep-nested tables" do
@@ -55,7 +54,7 @@ describe Watir::Table do
55
54
  [[["404", "405"],
56
55
  ["406", "407"]], "14"]], "3"]
57
56
  ]
58
- table(:id => "deepnested").to_a.should == expected_table
57
+ table(:id => "deepnested").to_a(3).should == expected_table
59
58
  end
60
59
 
61
60
  it "#to_a works with colspan" do
@@ -1,8 +1,6 @@
1
1
  =begin
2
2
  Global configuration constants
3
- For example, you can use the URL constant below from your projects like this:
4
-
5
- In your projects' config.rb:
3
+ For example, you can use the URL constant below from your projects' config.rb like this:
6
4
 
7
5
  module Config
8
6
  module Application
@@ -25,4 +23,4 @@ end
25
23
 
26
24
  Spec::Runner.configure do |config|
27
25
  config.include(CommonApplicationHelper)
28
- end
26
+ end
@@ -1,17 +1,15 @@
1
1
  =begin
2
- you have to load this file from your projects' environment.rb, which
3
- will use common functionality:
2
+ You have to load this file from your projects' environment.rb, which
3
+ would like to use common functionality.
4
+
5
+ Use the following code to do it automatically:
4
6
  WatirSplash::Util.load_common
5
7
 
6
- add all your require statements into this file to avoid unnecessary
8
+ Add all your require statements into this file to avoid unnecessary
7
9
  code in your other projects' files
8
10
 
9
- by default everything, which is not a spec file, will be loaded
11
+ By default everything in lib directory will be loaded
10
12
  =end
11
13
 
12
- local_dir = File.join(File.dirname(__FILE__), "**/*.rb")
13
- filtered_ruby_files = Dir.glob(local_dir).delete_if do |file|
14
- File.directory?(file) || File.basename(file) =~ /(config|_spec)\.rb$/
15
- end
16
- require_all filtered_ruby_files
14
+ require_rel "lib/"
17
15
  require_rel "config.rb"
@@ -1,9 +1,9 @@
1
- # you can create under this directory common libraries/helpers/methods which you could
2
- # use within your specs in different projects
1
+ # You can create under this directory common libraries/helpers/methods which you would
2
+ # like to use within your specs in different projects
3
3
 
4
4
  module CommonApplicationHelper
5
5
 
6
- # you can use these methods automatically inside of your it-blocks
6
+ # You can use methods declared in this module inside of your it-blocks
7
7
  # it "does something" do
8
8
  # new_global_method.should == "it just works"
9
9
  # end
@@ -2,7 +2,8 @@
2
2
  module Config
3
3
  module Application
4
4
  # URL, which will be opened by every test
5
- # replace it with the URL of your application under test
5
+ #
6
+ # Replace it with the URL of your application under test
6
7
  # or if ui-test-common is used then
7
8
  # URL = Config.full_url("/relative/url/index.html")
8
9
  URL = "about:blank"
@@ -12,6 +13,7 @@ end
12
13
  # A global configuration for specs in this project, which will include by default
13
14
  # a ApplicationHelper module and open Config::Application::URL with
14
15
  # the browser.
16
+ #
15
17
  # You can read more about RSpec-s before and after syntax from:
16
18
  # http://rspec.info/documentation/before_and_after.html
17
19
  Spec::Runner.configure do |config|
@@ -1,13 +1,15 @@
1
- # add all your require statements into this file to avoid unnecessary
1
+ # Add all your require statements into this file to avoid unnecessary
2
2
  # code in your spec files
3
3
 
4
- # uncomment following line to load functionality from ui-test-common
4
+ # Uncomment following line to load functionality from ui-test-common
5
5
  # WatirSplash::Util.load_common
6
6
 
7
- # by default everything, which is not a spec file, will be loaded
8
- local_dir = File.join(File.dirname(__FILE__), "**/*.rb")
9
- filtered_ruby_files = Dir.glob(local_dir).delete_if do |file|
10
- File.directory?(file) || File.basename(file) =~ /(ide_runner|config|_spec)\.rb$/
7
+ # By default everything, which is not a spec file, will be loaded from spec directory
8
+ # and it's subdirectories
9
+ spec_dir = File.join(File.dirname(__FILE__), "spec/**/*.rb")
10
+ filtered_spec_files = Dir.glob(spec_dir).delete_if do |file|
11
+ File.directory?(file) || File.basename(file) =~ /.*spec\.rb$/
11
12
  end
12
- require_all filtered_ruby_files
13
- require_rel "config.rb"
13
+ require_rel filtered_spec_files
14
+ require_rel "config.rb"
15
+ require_rel "application_helper.rb"
@@ -1,4 +1,4 @@
1
- # this is a fully working dummy spec file which you can run to see if
1
+ # This is a fully working spec file which you can run to see if
2
2
  # your configuration is correct and everything is working as expected
3
3
 
4
4
  describe "WatirSplash" do
@@ -10,9 +10,9 @@ describe "WatirSplash" do
10
10
  it "has easy access to ApplicationHelper methods" do
11
11
  # ApplicationHelper#helper_method_one will be executed
12
12
  helper_method_one.should == "one"
13
- # ApplicationHelper#has_second_method? will be execute
13
+ # ApplicationHelper#has_second_method? will be executed
14
14
  should have_second_method
15
- # ApplicationHelper#correct? method will be execute
15
+ # ApplicationHelper#correct? method will be executed
16
16
  should_not be_correct
17
17
  end
18
18
 
@@ -34,7 +34,7 @@ describe "WatirSplash" do
34
34
  end
35
35
  end
36
36
 
37
- it "has also access to global methods" do
37
+ it "has access to global methods after generate_common command has been used" do
38
38
  pending "it fails as long as there's not executed 'watirsplash generate_common' command
39
39
  and ui-test-common is not loaded by this project" do
40
40
  new_global_method.should == "it just works"
@@ -0,0 +1,11 @@
1
+ --color
2
+ --require
3
+ watirsplash
4
+ --require
5
+ watirsplash/html_formatter
6
+ --format
7
+ WatirSplash::HtmlFormatter:results/index.html
8
+ --format
9
+ nested
10
+ --diff
11
+ u
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 9
9
- version: 0.1.9
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jarmo Pertman
@@ -14,8 +14,8 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-01 00:00:00 +03:00
18
- default_executable:
17
+ date: 2010-05-04 00:00:00 +03:00
18
+ default_executable: watirsplash
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: watir
@@ -117,34 +117,34 @@ dependencies:
117
117
  version: "0"
118
118
  type: :runtime
119
119
  version_requirements: *id008
120
- description: Combines best features of Watir, RSpec and Ruby for browser-based functional testing.
121
- email:
122
- - jarmo.p@gmail.com
120
+ description: WatirSplash makes testing of web applications splashin' easy by combining best features of Watir, RSpec and Ruby!
121
+ email: jarmo.p@gmail.com
123
122
  executables:
124
123
  - watirsplash
125
124
  extensions: []
126
125
 
127
126
  extra_rdoc_files:
128
- - README.rdoc
129
127
  - History.rdoc
130
128
  - License.txt
129
+ - README.rdoc
131
130
  files:
132
- - bin/watirsplash
133
131
  - History.rdoc
134
- - lib/spec.opts
132
+ - License.txt
133
+ - README.rdoc
134
+ - Rakefile
135
+ - VERSION
136
+ - bin/watirsplash
137
+ - lib/watirsplash.rb
135
138
  - lib/watirsplash/autoit.rb
139
+ - lib/watirsplash/generator.rb
136
140
  - lib/watirsplash/html_formatter.rb
137
- - lib/watirsplash/runner.rb
138
141
  - lib/watirsplash/spec.rb
139
142
  - lib/watirsplash/spec_helper.rb
140
143
  - lib/watirsplash/util.rb
141
- - lib/watirsplash/version.rb
142
144
  - lib/watirsplash/waiter.rb
143
145
  - lib/watirsplash/watir.rb
144
- - lib/watirsplash.rb
145
- - License.txt
146
- - Rakefile
147
- - README.rdoc
146
+ - lib/watirsplash/win32screenshot.rb
147
+ - spec/spec.opts
148
148
  - spec/spec_helper_spec.rb
149
149
  - spec/spec_match_array_spec.rb
150
150
  - spec/util_spec.rb
@@ -157,8 +157,8 @@ files:
157
157
  - templates/project/application_helper.rb
158
158
  - templates/project/config.rb
159
159
  - templates/project/environment.rb
160
- - templates/project/ide_runner.rb
161
160
  - templates/project/spec/dummy_spec.rb
161
+ - templates/project/spec/spec.opts
162
162
  has_rdoc: true
163
163
  homepage: http://github.com/jarmo/WatirSplash
164
164
  licenses: []
@@ -166,12 +166,13 @@ licenses: []
166
166
  post_install_message: |-
167
167
  *************************
168
168
 
169
- Thank you for installing WatirSplash 0.1.9! Don't forget to take a look at README file!
169
+ Thank you for installing WatirSplash 0.2.0! Don't forget to take a look at README and History files!
170
170
 
171
171
  Execute "watirsplash generate" under your project's directory to generate default project structure.
172
172
 
173
173
  *************************
174
174
  rdoc_options:
175
+ - --charset=UTF-8
175
176
  - --main
176
177
  - README.rdoc
177
178
  - --template
@@ -200,6 +201,11 @@ rubyforge_project:
200
201
  rubygems_version: 1.3.6
201
202
  signing_key:
202
203
  specification_version: 3
203
- summary: watirsplash 0.1.9
204
- test_files: []
205
-
204
+ summary: watirsplash 0.2.0
205
+ test_files:
206
+ - spec/spec_helper_spec.rb
207
+ - spec/spec_match_array_spec.rb
208
+ - spec/util_spec.rb
209
+ - spec/watir_ie_spec.rb
210
+ - spec/watir_table_row_spec.rb
211
+ - spec/watir_table_spec.rb
@@ -1,5 +0,0 @@
1
- --color
2
- --format
3
- nested
4
- --diff
5
- u
@@ -1,97 +0,0 @@
1
- module WatirSplash
2
-
3
- # WatirSplash runner class is responsible for:
4
- # * generating directory structures for projects
5
- # * starting RSpec with specified settings
6
- class Runner
7
- @@template_directory = File.join(File.dirname(__FILE__), "../../templates/")
8
-
9
- class << self
10
-
11
- # Run RSpec with custom settings
12
- # * loads spec.opts from project's directory if exists
13
- # * loads environment.rb from project's directory if exists
14
- # * loads custom Formatter
15
- def run
16
- unless ARGV.empty?
17
- require "watirsplash"
18
- load_formatter
19
- load_options
20
- load_project_env
21
- else
22
- return help
23
- end
24
-
25
- ::Spec::Runner::CommandLine.run
26
- end
27
-
28
- # Generates ui-test project structure for project
29
- def generate
30
- ui_test_dir = File.join(Dir.pwd, "ui-test")
31
- puts "Creating WatirSplash project directory structure to #{ui_test_dir}..."
32
- require "fileutils"
33
- FileUtils.cp_r File.join(@@template_directory, "project/."), ui_test_dir
34
- puts "Done"
35
- return 0
36
- rescue => e
37
- puts "Failed:"
38
- puts e.message
39
- return -1
40
- end
41
-
42
- # Generates ui-test-common directory structure
43
- def generate_common
44
- common_dir = File.join(Dir.pwd, "ui-test-common")
45
- puts "Creating WatirSplash common project directory structure to #{common_dir}..."
46
- require "fileutils"
47
- FileUtils.cp_r File.join(@@template_directory, "common/."), common_dir
48
- puts "Done"
49
- return 0
50
- rescue => e
51
- puts "Failed:"
52
- puts e.message
53
- return -1
54
- end
55
-
56
- # Shows help
57
- def help
58
- puts %Q{WatirSplash:
59
- Usage: watirsplash (COMMAND|FILE(:LINE)?|DIRECTORY|GLOB)+ [options]
60
- Commands:
61
- * generate - generate default directory structure for new project
62
- * generate_common - generate common project directory structure
63
- * help - show this help
64
- * --help - show RSpec's help
65
-
66
- All other commands/options will be passed to RSpec directly.}
67
-
68
- return 1
69
- end
70
-
71
- private
72
-
73
- def load_formatter
74
- ARGV << "--require" << "watirsplash/html_formatter.rb"
75
- ARGV << "--format" << "WatirSplash::HtmlFormatter:#{File.join(Dir.pwd, "results/index.html")}"
76
- end
77
-
78
- def load_options
79
- ARGV << "--options"
80
- project_spec_opts = File.join(Dir.pwd, "spec.opts")
81
- if File.exists?(project_spec_opts)
82
- ARGV << project_spec_opts
83
- else
84
- ARGV << "#{File.join(File.dirname(__FILE__), "../spec.opts")}"
85
- end
86
- end
87
-
88
- def load_project_env
89
- project_env_file = File.join(Dir.pwd, "environment.rb")
90
- if File.exists?(project_env_file)
91
- ARGV << "--require" << project_env_file
92
- end
93
- end
94
-
95
- end
96
- end
97
- end
@@ -1,3 +0,0 @@
1
- module WatirSplash
2
- VERSION = "0.1.9"
3
- end
@@ -1,3 +0,0 @@
1
- # this file is needed for launching specs from IDE
2
- require "watirsplash/runner"
3
- exit ::WatirSplash::Runner.run