sapphire 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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: