sapphire 0.4.0 → 0.4.1

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/bin/sapphire CHANGED
@@ -3,7 +3,7 @@ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
3
3
  require 'sapphire'
4
4
  include Sapphire::Sapphire
5
5
 
6
- reporter = TeamCityReporter.new()
6
+ reporter = ConsoleReporter.new()
7
7
 
8
8
  ARGV.each do |arg|
9
9
  if !arg.end_with? ".rb"
@@ -20,7 +20,7 @@ if Runner.instance.test_plans.count > 0
20
20
  else
21
21
  Runner.instance.scenarios.each do |scenario|
22
22
  scenario.execute reporter
23
+ reporter.TestingComplete
24
+ reporter.OutputResults
23
25
  end
24
26
  end
25
-
26
- reporter.OutputResults
data/lib/sapphire.rb CHANGED
@@ -11,7 +11,7 @@ require 'colorize'
11
11
  require File.expand_path(File.dirname(__FILE__) +'/sapphire/Strategies/Strategy.rb', __FILE__)
12
12
  require File.expand_path(File.dirname(__FILE__) +'/sapphire/Testing/Reporter.rb', __FILE__)
13
13
  Dir[File.dirname(__FILE__) + '/sapphire/Testing/*.rb'].each {|file| require file }
14
- Dir[File.dirname(__FILE__) + '/sapphire/TeamCity/*.rb'].each {|file| require file }
14
+ #Dir[File.dirname(__FILE__) + '/sapphire/TeamCity/*.rb'].each {|file| require file }
15
15
  Dir[File.dirname(__FILE__) + '/sapphire/Configuration/*.rb'].each {|file| require file }
16
16
  Dir[File.dirname(__FILE__) + '/sapphire/WebAbstractions/Controls/Base/*.rb'].each {|file| require file }
17
17
  Dir[File.dirname(__FILE__) + '/sapphire/WebAbstractions/Controls/*.rb'].each {|file| require file }
@@ -39,7 +39,7 @@ module Sapphire
39
39
  include JobAbstractions
40
40
  include WebAbstractions
41
41
  include Testing
42
- include Testing::TeamCity
42
+ #include Testing::TeamCity
43
43
  include UI
44
44
  end
45
45
  end
@@ -3,7 +3,7 @@ module Sapphire
3
3
  module TestPlans
4
4
 
5
5
  def TestPlan(text, &block)
6
- reporter = TeamCityReporter.new()
6
+ reporter = ConsoleReporter.new()
7
7
  Runner.instance.add_test_plan(TestPlan.new(text, reporter, &block))
8
8
  end
9
9
 
@@ -51,6 +51,7 @@ module Sapphire
51
51
  @reporter.BeginTesting
52
52
  $stdout.puts ""
53
53
  @block.call
54
+ @reporter.TestingComplete
54
55
  @reporter.OutputResults
55
56
  end
56
57
  end
@@ -154,6 +154,10 @@ module Sapphire
154
154
  def BeginTesting
155
155
  log(@message_factory.create_test_reported_attached)
156
156
  end
157
+
158
+ def OutputResults()
159
+
160
+ end
157
161
  end
158
162
  end
159
163
  end
@@ -2,6 +2,28 @@ module Sapphire
2
2
  module Testing
3
3
  class ConsoleReporter < Reporter
4
4
 
5
+ def initialize
6
+ @not_passing = {}
7
+ @passing_count = 0
8
+ @failing_count = 0
9
+ @pending_count = 0
10
+ @test_count = 0
11
+ end
12
+
13
+ def ScenarioStart(scenario)
14
+ $stdout.puts scenario.file_name + ": "
15
+ end
16
+
17
+ def ScenarioComplete(scenario)
18
+ $stdout.puts ""
19
+ end
20
+
21
+ def Indent(depth)
22
+ (1..depth).each do
23
+ $stdout.print "\t"
24
+ end
25
+ end
26
+
5
27
  def PrintItem(result, depth)
6
28
  Indent(depth)
7
29
 
@@ -34,57 +56,96 @@ module Sapphire
34
56
  end
35
57
  end
36
58
 
37
- def PrintHeader()
59
+ def InsertLineBreak()
38
60
  $stdout.puts ""
39
61
  end
40
62
 
41
- def ScenarioStart(scenario)
42
- $stdout.puts scenario.file_name + ": "
63
+ def TestStarted(test)
64
+ @test_count = @test_count + 1
43
65
  end
44
66
 
45
- def ScenarioComplete(scenario)
46
- $stdout.puts ""
67
+ def TestPassed(test)
68
+ @passing_count = @passing_count + 1
69
+ $stdout.print ".".green
47
70
  end
48
71
 
49
- def PrintFooter()
50
- $stdout.puts ""
51
- $stdout.puts "Finished in " + self.time.round(2).to_s + " seconds."
52
- $stdout.puts "Test Count: " + self.test_count.to_s
53
- $stdout.puts "Passing: " + self.passing_count.to_s.green
54
- $stdout.puts "Failing: " + self.failing_count.to_s.red
55
- $stdout.puts "Pending: " + self.pending_count.to_s.yellow
72
+ def TestFailed(test)
73
+ @failing_count = @failing_count + 1
74
+ Add test
75
+ $stdout.print "F".red
56
76
  end
57
77
 
58
- def Indent(depth)
59
- (1..depth).each do
60
- $stdout.print "\t"
78
+ def TestPending(test)
79
+ @pending_count = @pending_count + 1
80
+ Add test
81
+ $stdout.print "*".yellow
82
+ end
83
+
84
+ def Add(r)
85
+ result_passes = r.type == "pass"
86
+
87
+ if !result_passes and (r.item.is_a? Given or r.item.is_a? When or r.item.is_a? Background)
88
+ @not_passing = @not_passing.merge({ r => r })
89
+ elsif !result_passes and (r.item.is_a? And or r.item.parent.is_a? Given)
90
+ @not_passing = @not_passing.merge({ r.parent => r.parent })
91
+ elsif !result_passes and (r.item.is_a? And and r.parent.item.is_a? When)
92
+ @not_passing = @not_passing.merge({ r.parent => r.parent })
93
+ elsif !result_passes and (r.item.is_a? Then)
94
+ @not_passing = @not_passing.merge({ r.parent => r.parent })
95
+ elsif !result_passes and (r.item.is_a? And and r.parent.item.is_a? Then)
96
+ @not_passing = @not_passing.merge({ r.parent.parent => r.parent.parent })
61
97
  end
98
+
62
99
  end
63
100
 
64
- def InsertLineBreak()
101
+ def OutputResults()
65
102
  $stdout.puts ""
66
- end
67
103
 
68
- def PrePrint
104
+ @not_passing.keys.each do |key|
105
+ self.PrintResult @not_passing[key]
106
+ end
69
107
 
108
+ $stdout.puts ""
109
+ $stdout.puts "Finished in " + (@end - @start).round(2).to_s + " seconds."
110
+ $stdout.puts "Test Count: " + @test_count.to_s
111
+ $stdout.puts "Passing: " + @passing_count.to_s.green
112
+ $stdout.puts "Failing: " + @failing_count.to_s.red
113
+ $stdout.puts "Pending: " + @pending_count.to_s.yellow
70
114
  end
71
115
 
72
- def PostPrint
73
-
74
- end
116
+ def Output(result, depth)
75
117
 
76
- def TestStarted(test)
118
+ self.PrintItem(result, depth)
77
119
 
120
+ result.results.each do |sub_result|
121
+ self.Output(sub_result, depth+1)
122
+ end
78
123
  end
79
124
 
80
- def TestCompleted(test)
81
- $stdout.print "*".yellow if test.type == "pending"
82
- $stdout.print ".".green if test.type == "pass"
83
- $stdout.print "F".red if test.type == "fail"
125
+ def PrintResult(entry)
126
+ if entry.item.is_a? Background
127
+ self.InsertLineBreak
128
+ self.Output entry, 0
129
+ self.InsertLineBreak
130
+ elsif entry.item.is_a? Given
131
+ self.InsertLineBreak
132
+ self.Output entry, 1
133
+ self.InsertLineBreak
134
+ elsif entry.item.is_a? When
135
+ self.PrintItem entry.parent, 0
136
+ self.Output entry, 1
137
+ self.InsertLineBreak
138
+ else
139
+ self.PrintResult entry.parent
140
+ end
84
141
  end
85
142
 
86
143
  def BeginTesting
144
+ @start = DateTime.now
145
+ end
87
146
 
147
+ def TestingComplete
148
+ @end = DateTime.now
88
149
  end
89
150
 
90
151
  end
@@ -8,20 +8,20 @@ module Sapphire
8
8
  if(self.value.is_a? Pending)
9
9
  result = ResultTree.new(self.text, TestResult.new("pending", self, "Pending", "", Time.now - start))
10
10
  self.AddResult(result)
11
- reporter.TestCompleted result
11
+ reporter.TestPending result
12
12
  return
13
13
  end
14
14
  self.block.call
15
15
  result = ResultTree.new(self.text, TestResult.new("pass", self, "Success", "", Time.now - start))
16
16
  self.AddResult(result)
17
- reporter.TestCompleted result
17
+ reporter.TestPassed result
18
18
  rescue => msg
19
19
  stack = msg.backtrace
20
20
  message = msg.messages if (msg.is_a? ExpectationException)
21
21
  message ||= msg.message
22
22
  result = ResultTree.new(self.text, TestResult.new("fail", self, message, stack, Time.now - start))
23
23
  self.AddResult(result)
24
- reporter.TestCompleted result
24
+ reporter.TestFailed result
25
25
  end
26
26
  end
27
27
  end
@@ -2,49 +2,301 @@ module Sapphire
2
2
  module Testing
3
3
  class HtmlReporter < Reporter
4
4
 
5
- def ScenarioStart(scenario)
6
-
5
+ def initialize()
6
+ @failures = []
7
+ @example_group_number = 0
8
+ @passing_count = 0
9
+ @failing_count = 0
10
+ @pending_count = 0
11
+ @test_count = 0
7
12
  end
8
13
 
9
- def ScenarioComplete
14
+ def TestStarted(test)
10
15
 
11
16
  end
12
17
 
13
- def PrintItem(result, depth)
14
-
18
+ def TestPassed(test)
19
+ @passing_count = @passing_count + 1
20
+ $stdout.puts " <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{test.text}</span></dd>"
15
21
  end
16
22
 
17
- def PrintHeader()
23
+ def TestFailed(test)
18
24
 
19
- end
25
+ failure_style = 'failed'
26
+ $stdout.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
27
+ @header_red = true
28
+ $stdout.puts " <script type=\"text/javascript\">makeRed('example_group_#{@example_group_number}');</script>" unless @example_group_red
29
+ @example_group_red = true
30
+ $stdout.puts " <dd class=\"spec #{failure_style}\">"
31
+ $stdout.puts " <span class=\"failed_spec_name\">#{test.text}</span>"
32
+ $stdout.puts " <div class=\"failure\" id=\"failure_#{@test_count}\">"
20
33
 
21
- def PrintFooter()
34
+ if test.messages.is_a? Array
35
+ message_block = ""
36
+ test.messages.each do |message|
37
+ message_block += message + "<br>"
38
+ end
39
+ $stdout.puts " <div class=\"message\"><pre>#{message_block}</pre></div>"
40
+ else
41
+ $stdout.puts " <div class=\"message\"><pre>#{test.messages}</pre></div>"
42
+ end
22
43
 
23
- end
44
+ test.stack.each do |line|
45
+ if (!line.include? "sapphire")
46
+ $stdout.puts " <div class=\"backtrace\"><pre>#{line}</pre></div>"
47
+ end
48
+ end
24
49
 
25
- def InsertLineBreak()
50
+ $stdout.puts " </div>"
51
+ $stdout.puts " </dd>"
52
+ end
26
53
 
54
+ def TestPending(test)
55
+ $stdout.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
56
+ $stdout.puts " <script type=\"text/javascript\">makeYellow('example_group_#{@example_group_number}');</script>" unless @example_group_red
57
+ $stdout.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{test.text} (PENDING: ### Not Yet Implemented ###)</span></dd>"
27
58
  end
28
59
 
29
- def PrePrint
60
+ def TestingComplete
61
+ @end = Time.now
62
+
63
+ totals = "#{@test_count} example#{'s' unless @test_count == 1}, #{@failure_count} failure#{'s' unless @failure_count == 1}"
64
+ totals << ", #{@pending_count} pending" if @pending_count > 0
30
65
 
66
+ $stdout.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{(@end - @start).round(2).to_s} seconds</strong>\";</script>"
67
+ $stdout.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
68
+ $stdout.puts "</div>"
69
+ $stdout.puts "</div>"
70
+ $stdout.puts "</body>"
71
+ $stdout.puts "</html>"
31
72
  end
32
73
 
33
- def PostPrint
74
+ def BeginTesting
75
+ @start = Time.now
76
+ $stdout.puts html_header
77
+ $stdout.puts report_header
78
+ end
34
79
 
80
+ def ScenarioStart(scenario)
81
+ @example_group_red = false
82
+ @example_group_number += 1
83
+ unless @example_group_number == 1
84
+ $stdout.puts " </dl>"
85
+ $stdout.puts "</div>"
86
+ end
87
+ $stdout.puts "<div class=\"example_group\">"
88
+ $stdout.puts " <dl>"
89
+ $stdout.puts " <dt id=\"example_group_#{@example_group_number}\">#{scenario.text}</dt>"
35
90
  end
36
91
 
37
- def TestStarted(test)
92
+ def OutputResults()
38
93
 
39
94
  end
40
95
 
41
- def TestCompleted(test)
96
+ def ScenarioComplete(scenario)
42
97
 
43
98
  end
44
99
 
45
- def BeginTesting
100
+ def html_header
101
+ <<-EOF
102
+ <?xml version="1.0" encoding="UTF-8"?>
103
+ <!DOCTYPE html
104
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
105
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
106
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
107
+ <head>
108
+ <title>RSpec results</title>
109
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
110
+ <meta http-equiv="Expires" content="-1" />
111
+ <meta http-equiv="Pragma" content="no-cache" />
112
+ <style type="text/css">
113
+ body {
114
+ margin: 0;
115
+ padding: 0;
116
+ background: #fff;
117
+ font-size: 80%;
118
+ }
119
+ </style>
120
+ <script type="text/javascript">
121
+ // <![CDATA[
122
+ #{global_scripts}
123
+ // ]]>
124
+ </script>
125
+ <style type="text/css">
126
+ #{global_styles}
127
+ </style>
128
+ </head>
129
+ <body>
130
+ EOF
131
+ end
46
132
 
47
- end
133
+ def report_header
134
+ <<-EOF
135
+ <div class="rspec-report">
136
+
137
+ <div id="rspec-header">
138
+ <div id="label">
139
+ <h1>RSpec Code Examples</h1>
140
+ </div>
141
+
142
+ <div id="summary">
143
+ <p id="totals">&nbsp;</p>
144
+ <p id="duration">&nbsp;</p>
145
+ </div>
146
+ </div>
147
+
148
+ <div class="results">
149
+ EOF
150
+ end
151
+
152
+ def global_scripts
153
+ <<-EOF
154
+ function moveProgressBar(percentDone) {
155
+ document.getElementById("rspec-header").style.width = percentDone +"%";
156
+ }
157
+ function makeRed(element_id) {
158
+ document.getElementById(element_id).style.background = '#C40D0D';
159
+ document.getElementById(element_id).style.color = '#FFFFFF';
160
+ }
161
+
162
+ function makeYellow(element_id) {
163
+ if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
164
+ {
165
+ document.getElementById(element_id).style.background = '#FAF834';
166
+ document.getElementById(element_id).style.color = '#000000';
167
+ }
168
+ else
169
+ {
170
+ document.getElementById(element_id).style.background = '#FAF834';
171
+ document.getElementById(element_id).style.color = '#000000';
172
+ }
173
+ }
174
+ EOF
175
+ end
176
+
177
+ def global_styles
178
+ <<-EOF
179
+ #rspec-header {
180
+ background: #65C400; color: #fff; height: 4em;
181
+ }
182
+
183
+ .rspec-report h1 {
184
+ margin: 0px 10px 0px 10px;
185
+ padding: 10px;
186
+ font-family: "Lucida Grande", Helvetica, sans-serif;
187
+ font-size: 1.8em;
188
+ position: absolute;
189
+ }
190
+
191
+ #summary {
192
+ margin: 0; padding: 5px 10px;
193
+ font-family: "Lucida Grande", Helvetica, sans-serif;
194
+ text-align: right;
195
+ top: 0px;
196
+ right: 0px;
197
+ float:right;
198
+ }
199
+
200
+ #summary p {
201
+ margin: 0 0 0 2px;
202
+ }
203
+
204
+ #summary #totals {
205
+ font-size: 1.2em;
206
+ }
207
+
208
+ .example_group {
209
+ margin: 0 10px 5px;
210
+ background: #fff;
211
+ }
212
+
213
+ dl {
214
+ margin: 0; padding: 0 0 5px;
215
+ font: normal 11px "Lucida Grande", Helvetica, sans-serif;
216
+ }
217
+
218
+ dt {
219
+ padding: 3px;
220
+ background: #65C400;
221
+ color: #fff;
222
+ font-weight: bold;
223
+ }
224
+
225
+ dd {
226
+ margin: 5px 0 5px 5px;
227
+ padding: 3px 3px 3px 18px;
228
+ }
229
+
230
+ dd.spec.passed {
231
+ border-left: 5px solid #65C400;
232
+ border-bottom: 1px solid #65C400;
233
+ background: #DBFFB4; color: #3D7700;
234
+ }
235
+
236
+ dd.spec.failed {
237
+ border-left: 5px solid #C20000;
238
+ border-bottom: 1px solid #C20000;
239
+ color: #C20000; background: #FFFBD3;
240
+ }
241
+
242
+ dd.spec.not_implemented {
243
+ border-left: 5px solid #FAF834;
244
+ border-bottom: 1px solid #FAF834;
245
+ background: #FCFB98; color: #131313;
246
+ }
247
+
248
+ dd.spec.pending_fixed {
249
+ border-left: 5px solid #0000C2;
250
+ border-bottom: 1px solid #0000C2;
251
+ color: #0000C2; background: #D3FBFF;
252
+ }
253
+
254
+ .backtrace {
255
+ color: #000;
256
+ font-size: 12px;
257
+ }
258
+
259
+ a {
260
+ color: #BE5C00;
261
+ }
262
+
263
+ /* Ruby code, style similar to vibrant ink */
264
+ .ruby {
265
+ font-size: 12px;
266
+ font-family: monospace;
267
+ color: white;
268
+ background-color: black;
269
+ padding: 0.1em 0 0.2em 0;
270
+ }
271
+
272
+ .ruby .keyword { color: #FF6600; }
273
+ .ruby .constant { color: #339999; }
274
+ .ruby .attribute { color: white; }
275
+ .ruby .global { color: white; }
276
+ .ruby .module { color: white; }
277
+ .ruby .class { color: white; }
278
+ .ruby .string { color: #66FF00; }
279
+ .ruby .ident { color: white; }
280
+ .ruby .method { color: #FFCC00; }
281
+ .ruby .number { color: white; }
282
+ .ruby .char { color: white; }
283
+ .ruby .comment { color: #9933CC; }
284
+ .ruby .symbol { color: white; }
285
+ .ruby .regex { color: #44B4CC; }
286
+ .ruby .punct { color: white; }
287
+ .ruby .escape { color: white; }
288
+ .ruby .interp { color: white; }
289
+ .ruby .expr { color: white; }
290
+
291
+ .ruby .offending { background-color: gray; }
292
+ .ruby .linenum {
293
+ width: 75px;
294
+ padding: 0.1em 1em 0.2em 0;
295
+ color: #000000;
296
+ background-color: #FFFBD3;
297
+ }
298
+ EOF
299
+ end
48
300
  end
49
301
  end
50
302
  end
@@ -8,133 +8,6 @@ module Sapphire
8
8
  attr_reader :pending_count
9
9
  attr_reader :time
10
10
 
11
- def OutputResults()
12
-
13
- self.GatherResults
14
-
15
- not_passing = self.GetNotPassing
16
-
17
- self.PrintHeader
18
-
19
- not_passing.keys.each do |key|
20
- self.PrePrint
21
- self.PrintResult not_passing[key]
22
- self.PostPrint
23
- end
24
-
25
- self.PrintFooter
26
-
27
- end
28
-
29
- def Output(result, depth)
30
-
31
- self.PrintItem(result, depth)
32
-
33
- result.results.each do |sub_result|
34
- self.Output(sub_result, depth+1)
35
- end
36
- end
37
-
38
- def PrintResult(entry)
39
- if entry.item.is_a? Given or entry.item.is_a? Background
40
- self.InsertLineBreak
41
- self.Output entry, 0
42
- self.InsertLineBreak
43
- elsif entry.item.is_a? When
44
- self.PrintItem entry.parent, 0
45
- self.Output entry, 1
46
- self.InsertLineBreak
47
- else
48
- self.PrintResult entry.parent
49
- end
50
- end
51
-
52
- def GatherResults()
53
- @test_count = 0
54
- @passing_count = 0
55
- @failing_count = 0
56
- @pending_count = 0
57
- @time = 0
58
-
59
- Runner.instance.scenarios.each do |scenario|
60
- item = scenario.result
61
- @time += item.time
62
- item.results.each do |result|
63
- output = self.Count result
64
- @test_count += output[:tests]
65
- @passing_count += output[:passing]
66
- @failing_count += output[:failing]
67
- @pending_count += output[:pending]
68
- @time += result.time
69
- end
70
- end
71
- end
72
-
73
- def Count(result)
74
- test_count = 1
75
- passing_count = 0
76
- failing_count = 0
77
- pending_count = 0
78
-
79
- if result.type == 'pass'
80
- passing_count += 1
81
- elsif result.type == 'pending'
82
- pending_count += 1
83
- else
84
- failing_count += 1
85
- end
86
-
87
- result.results.each do |sub_result|
88
- output = self.Count(sub_result)
89
-
90
- test_count += output[:tests]
91
- passing_count += output[:passing]
92
- failing_count += output[:failing]
93
- pending_count += output[:pending]
94
- end
95
-
96
- { :tests => test_count, :passing => passing_count, :failing => failing_count, :pending => pending_count }
97
- end
98
-
99
- def GetNotPassing
100
-
101
- results = {}
102
-
103
- Runner.instance.scenarios.each do |scenario|
104
- results = results.merge(self.RecurseResult(scenario.result))
105
- end
106
-
107
- results
108
- end
109
-
110
- def RecurseResult(result)
111
- results = {}
112
-
113
- result.results.each do |r|
114
- result_passes = r.type == "pass"
115
- if !result_passes and (r.item.is_a? Given or r.item.is_a? When or r.item.is_a? Background)
116
- results = results.merge({ r => r })
117
- next
118
- elsif !result_passes and (r.item.is_a? And or r.item.parent.is_a? Given)
119
- results = results.merge({ r.parent => r.parent })
120
- next
121
- elsif !result_passes and (r.item.is_a? And and r.parent.item.is_a? When)
122
- results = results.merge({ r.parent => r.parent })
123
- next
124
- elsif !result_passes and (r.item.is_a? Then)
125
- results = results.merge({ r.parent => r.parent })
126
- next
127
- elsif !result_passes and (r.item.is_a? And and r.parent.item.is_a? Then)
128
- results = results.merge({ r.parent.parent => r.parent.parent })
129
- next
130
- else
131
- results = results.merge(self.RecurseResult(r))
132
- end
133
- end
134
-
135
- results
136
- end
137
-
138
11
  end
139
12
  end
140
13
  end
@@ -1,3 +1,3 @@
1
1
  module Sapphire
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sapphire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-30 00:00:00.000000000Z
12
+ date: 2011-10-05 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: selenium-webdriver
16
- requirement: &9888888 !ruby/object:Gem::Requirement
16
+ requirement: &9401868 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *9888888
24
+ version_requirements: *9401868
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: colorize
27
- requirement: &9888636 !ruby/object:Gem::Requirement
27
+ requirement: &9401592 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *9888636
35
+ version_requirements: *9401592
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: win32console
38
- requirement: &9888384 !ruby/object:Gem::Requirement
38
+ requirement: &9401244 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *9888384
46
+ version_requirements: *9401244
47
47
  description: An automated web acceptance test framework for non-technical resources
48
48
  using selenium-wedriver.
49
49
  email: