sapphire 0.6.0 → 0.6.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 +26 -5
- data/lib/sapphire/DSL/TestPlans/FileHandler.rb +2 -2
- data/lib/sapphire/DSL/TestPlans/PathHandler.rb +2 -2
- data/lib/sapphire/DSL/TestPlans/TestPlan.rb +12 -8
- data/lib/sapphire/Testing/ConsoleReporter.rb +23 -22
- data/lib/sapphire/Testing/Coverage/Feature.rb +1 -1
- data/lib/sapphire/Testing/Executable.rb +11 -5
- data/lib/sapphire/Testing/HtmlReporter.rb +28 -27
- data/lib/sapphire/Testing/TestRunnerAdapter.rb +18 -12
- data/lib/sapphire/version.rb +1 -1
- metadata +7 -7
data/bin/sapphire
CHANGED
@@ -4,24 +4,45 @@ require 'rubygems'
|
|
4
4
|
require 'sapphire'
|
5
5
|
include Sapphire::Sapphire
|
6
6
|
|
7
|
-
|
7
|
+
$reporters = []
|
8
8
|
|
9
9
|
ARGV.each do |arg|
|
10
|
+
|
11
|
+
#if arg.start_with? "reporter="
|
12
|
+
# item = arg.split "reporter="
|
13
|
+
# $reporters << Object.const_get(item.last).new()
|
14
|
+
# next
|
15
|
+
#end
|
16
|
+
|
10
17
|
if !arg.end_with? ".rb"
|
11
18
|
next
|
12
19
|
end
|
20
|
+
|
13
21
|
require arg
|
14
22
|
Runner.instance.last_scenario.file_name = arg if Runner.instance.last_scenario and Runner.instance.last_scenario.file_name == ""
|
15
23
|
end
|
16
24
|
|
17
|
-
|
25
|
+
if $reporters.empty?
|
26
|
+
$reporters << ConsoleReporter.new()
|
27
|
+
end
|
28
|
+
|
18
29
|
|
19
30
|
if Runner.instance.test_plans.count > 0
|
20
31
|
Runner.instance.last_test_plan.execute
|
21
32
|
else
|
33
|
+
|
34
|
+
Report do |x| x.BeginTesting end
|
35
|
+
|
22
36
|
Runner.instance.scenarios.each do |scenario|
|
23
|
-
scenario.execute
|
24
|
-
reporter.TestingComplete
|
25
|
-
reporter.OutputResults
|
37
|
+
scenario.execute
|
26
38
|
end
|
39
|
+
|
40
|
+
Report do |x| x.TestingComplete end
|
41
|
+
Report do |x| x.OutputResults end
|
27
42
|
end
|
43
|
+
|
44
|
+
def Report(&block)
|
45
|
+
$reporters.each do |reporter|
|
46
|
+
block.call reporter
|
47
|
+
end
|
48
|
+
end
|
@@ -2,11 +2,11 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module TestPlans
|
4
4
|
class FileHandler
|
5
|
-
def Handle(item
|
5
|
+
def Handle(item)
|
6
6
|
x = AppConfig.Current.SpecsPath || ""
|
7
7
|
require File.expand_path(x + item, __FILE__)
|
8
8
|
Runner.instance.last_scenario.file_name = item
|
9
|
-
Runner.instance.last_scenario.execute
|
9
|
+
Runner.instance.last_scenario.execute
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -2,12 +2,12 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module TestPlans
|
4
4
|
class PathHandler
|
5
|
-
def Handle(item
|
5
|
+
def Handle(item)
|
6
6
|
x = AppConfig.Current.SpecsPath || ""
|
7
7
|
Dir[x + item + '*.rb'].each do |file|
|
8
8
|
require file
|
9
9
|
Runner.instance.last_scenario.file_name = file
|
10
|
-
Runner.instance.last_scenario.execute
|
10
|
+
Runner.instance.last_scenario.execute
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -3,8 +3,7 @@ module Sapphire
|
|
3
3
|
module TestPlans
|
4
4
|
|
5
5
|
def TestPlan(text, &block)
|
6
|
-
|
7
|
-
Runner.instance.add_test_plan(TestPlan.new(text, reporter, &block))
|
6
|
+
Runner.instance.add_test_plan(TestPlan.new(text, &block))
|
8
7
|
end
|
9
8
|
|
10
9
|
class TestPlan
|
@@ -13,11 +12,10 @@ module Sapphire
|
|
13
12
|
attr_reader :value
|
14
13
|
attr_reader :text
|
15
14
|
|
16
|
-
def initialize(text,
|
15
|
+
def initialize(text, &block)
|
17
16
|
@value = text
|
18
17
|
@text = text.to_s
|
19
18
|
@block = block
|
20
|
-
@reporter = reporter
|
21
19
|
|
22
20
|
@items = []
|
23
21
|
@handlers = []
|
@@ -36,7 +34,7 @@ module Sapphire
|
|
36
34
|
@handlers.each do |handler|
|
37
35
|
handler.keys.each do |handler_key|
|
38
36
|
if(handler_key == key)
|
39
|
-
handler[handler_key].Handle item[key]
|
37
|
+
handler[handler_key].Handle item[key]
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
@@ -48,11 +46,17 @@ module Sapphire
|
|
48
46
|
end
|
49
47
|
|
50
48
|
def execute
|
51
|
-
|
49
|
+
Report do |x| x.BeginTesting end
|
52
50
|
$stdout.puts ""
|
53
51
|
@block.call
|
54
|
-
|
55
|
-
|
52
|
+
Report do |x| x.TestingComplete end
|
53
|
+
Report do |x| x.OutputResults end
|
54
|
+
end
|
55
|
+
|
56
|
+
def Report(&block)
|
57
|
+
$reporters.each do |reporter|
|
58
|
+
block.call reporter
|
59
|
+
end
|
56
60
|
end
|
57
61
|
end
|
58
62
|
end
|
@@ -8,19 +8,20 @@ module Sapphire
|
|
8
8
|
@failing_count = 0
|
9
9
|
@pending_count = 0
|
10
10
|
@test_count = 0
|
11
|
+
@output = $stdout
|
11
12
|
end
|
12
13
|
|
13
14
|
def ScenarioStart(scenario)
|
14
|
-
|
15
|
+
@output.puts scenario.file_name + ": "
|
15
16
|
end
|
16
17
|
|
17
18
|
def ScenarioComplete(scenario)
|
18
|
-
|
19
|
+
@output.puts ""
|
19
20
|
end
|
20
21
|
|
21
22
|
def Indent(depth)
|
22
23
|
(1..depth).each do
|
23
|
-
|
24
|
+
@output.print "\t"
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -28,28 +29,28 @@ module Sapphire
|
|
28
29
|
Indent(depth)
|
29
30
|
|
30
31
|
if result.type == 'pass'
|
31
|
-
|
32
|
+
@output.puts result.text.colorize :green
|
32
33
|
elsif result.type == 'pending'
|
33
|
-
|
34
|
+
@output.puts result.text.colorize :yellow
|
34
35
|
Indent(depth+1)
|
35
|
-
|
36
|
+
@output.puts " ## Not Yet Implemented ##"
|
36
37
|
else
|
37
|
-
|
38
|
+
@output.puts result.text.colorize :red
|
38
39
|
if result.messages.is_a? Array
|
39
40
|
result.messages.each do |message|
|
40
41
|
Indent(depth+1)
|
41
|
-
|
42
|
+
@output.puts message
|
42
43
|
end
|
43
44
|
|
44
45
|
else
|
45
46
|
Indent(depth+1)
|
46
|
-
|
47
|
+
@output.puts result.messages
|
47
48
|
end
|
48
|
-
|
49
|
+
@output.puts ""
|
49
50
|
result.stack.each do |line|
|
50
51
|
#if (!line.include? "sapphire")
|
51
52
|
Indent(depth+1)
|
52
|
-
|
53
|
+
@output.puts line
|
53
54
|
#end
|
54
55
|
end
|
55
56
|
|
@@ -57,7 +58,7 @@ module Sapphire
|
|
57
58
|
end
|
58
59
|
|
59
60
|
def InsertLineBreak()
|
60
|
-
|
61
|
+
@output.puts ""
|
61
62
|
end
|
62
63
|
|
63
64
|
def TestStarted(test)
|
@@ -66,19 +67,19 @@ module Sapphire
|
|
66
67
|
|
67
68
|
def TestPassed(test)
|
68
69
|
@passing_count = @passing_count + 1
|
69
|
-
|
70
|
+
@output.print ".".colorize :green
|
70
71
|
end
|
71
72
|
|
72
73
|
def TestFailed(test)
|
73
74
|
@failing_count = @failing_count + 1
|
74
75
|
Add test
|
75
|
-
|
76
|
+
@output.print "F".colorize :red
|
76
77
|
end
|
77
78
|
|
78
79
|
def TestPending(test)
|
79
80
|
@pending_count = @pending_count + 1
|
80
81
|
Add test
|
81
|
-
|
82
|
+
@output.print "*".colorize :yellow
|
82
83
|
end
|
83
84
|
|
84
85
|
def Add(r)
|
@@ -99,18 +100,18 @@ module Sapphire
|
|
99
100
|
end
|
100
101
|
|
101
102
|
def OutputResults()
|
102
|
-
|
103
|
+
@output.puts ""
|
103
104
|
|
104
105
|
@not_passing.keys.each do |key|
|
105
106
|
self.PrintResult @not_passing[key]
|
106
107
|
end
|
107
108
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
109
|
+
@output.puts ""
|
110
|
+
@output.puts "Finished in " + (@end - @start).round().to_s + " seconds."
|
111
|
+
@output.puts "Test Count: " + @test_count.to_s
|
112
|
+
@output.puts "Passing: " + @passing_count.to_s.colorize(:green)
|
113
|
+
@output.puts "Failing: " + @failing_count.to_s.colorize(:red)
|
114
|
+
@output.puts "Pending: " + @pending_count.to_s.colorize(:yellow)
|
114
115
|
end
|
115
116
|
|
116
117
|
def Output(result, depth)
|
@@ -1,27 +1,33 @@
|
|
1
1
|
module Sapphire
|
2
2
|
module Testing
|
3
3
|
module Executable
|
4
|
-
def execute(
|
4
|
+
def execute()
|
5
5
|
start = Time.now
|
6
|
-
|
6
|
+
Report do |x| x.TestStarted(self) end
|
7
7
|
begin
|
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
|
-
|
11
|
+
Report do |x| x.TestPending(result) end
|
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
|
-
|
17
|
+
Report do |x| x.TestPassed(result) end
|
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
|
-
|
24
|
+
Report do |x| x.TestFailed(result) end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def Report(&block)
|
29
|
+
$reporters.each do |reporter|
|
30
|
+
block.call reporter
|
25
31
|
end
|
26
32
|
end
|
27
33
|
end
|
@@ -9,6 +9,7 @@ module Sapphire
|
|
9
9
|
@failing_count = 0
|
10
10
|
@pending_count = 0
|
11
11
|
@test_count = 0
|
12
|
+
@output = $stdout
|
12
13
|
end
|
13
14
|
|
14
15
|
def TestStarted(test)
|
@@ -17,44 +18,44 @@ module Sapphire
|
|
17
18
|
|
18
19
|
def TestPassed(test)
|
19
20
|
@passing_count = @passing_count + 1
|
20
|
-
|
21
|
+
@output.puts " <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{test.text}</span></dd>"
|
21
22
|
end
|
22
23
|
|
23
24
|
def TestFailed(test)
|
24
25
|
|
25
26
|
failure_style = 'failed'
|
26
|
-
|
27
|
+
@output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
|
27
28
|
@header_red = true
|
28
|
-
|
29
|
+
@output.puts " <script type=\"text/javascript\">makeRed('example_group_#{@example_group_number}');</script>" unless @example_group_red
|
29
30
|
@example_group_red = true
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
@output.puts " <dd class=\"spec #{failure_style}\">"
|
32
|
+
@output.puts " <span class=\"failed_spec_name\">#{test.text}</span>"
|
33
|
+
@output.puts " <div class=\"failure\" id=\"failure_#{@test_count}\">"
|
33
34
|
|
34
35
|
if test.messages.is_a? Array
|
35
36
|
message_block = ""
|
36
37
|
test.messages.each do |message|
|
37
38
|
message_block += message + "<br>"
|
38
39
|
end
|
39
|
-
|
40
|
+
@output.puts " <div class=\"message\"><pre>#{message_block}</pre></div>"
|
40
41
|
else
|
41
|
-
|
42
|
+
@output.puts " <div class=\"message\"><pre>#{test.messages}</pre></div>"
|
42
43
|
end
|
43
44
|
|
44
45
|
test.stack.each do |line|
|
45
46
|
if (!line.include? "sapphire")
|
46
|
-
|
47
|
+
@output.puts " <div class=\"backtrace\"><pre>#{line}</pre></div>"
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
@output.puts " </div>"
|
52
|
+
@output.puts " </dd>"
|
52
53
|
end
|
53
54
|
|
54
55
|
def TestPending(test)
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
@output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
|
57
|
+
@output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{@example_group_number}');</script>" unless @example_group_red
|
58
|
+
@output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{test.text} (PENDING: ### Not Yet Implemented ###)</span></dd>"
|
58
59
|
end
|
59
60
|
|
60
61
|
def TestingComplete
|
@@ -63,30 +64,30 @@ module Sapphire
|
|
63
64
|
totals = "#{@test_count} example#{'s' unless @test_count == 1}, #{@failure_count} failure#{'s' unless @failure_count == 1}"
|
64
65
|
totals << ", #{@pending_count} pending" if @pending_count > 0
|
65
66
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
@output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{(@end - @start).round(2).to_s} seconds</strong>\";</script>"
|
68
|
+
@output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
|
69
|
+
@output.puts "</div>"
|
70
|
+
@output.puts "</div>"
|
71
|
+
@output.puts "</body>"
|
72
|
+
@output.puts "</html>"
|
72
73
|
end
|
73
74
|
|
74
75
|
def BeginTesting
|
75
76
|
@start = Time.now
|
76
|
-
|
77
|
-
|
77
|
+
@output.puts html_header
|
78
|
+
@output.puts report_header
|
78
79
|
end
|
79
80
|
|
80
81
|
def ScenarioStart(scenario)
|
81
82
|
@example_group_red = false
|
82
83
|
@example_group_number += 1
|
83
84
|
unless @example_group_number == 1
|
84
|
-
|
85
|
-
|
85
|
+
@output.puts " </dl>"
|
86
|
+
@output.puts "</div>"
|
86
87
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
88
|
+
@output.puts "<div class=\"example_group\">"
|
89
|
+
@output.puts " <dl>"
|
90
|
+
@output.puts " <dt id=\"example_group_#{@example_group_number}\">#{scenario.text}</dt>"
|
90
91
|
end
|
91
92
|
|
92
93
|
def OutputResults()
|
@@ -2,16 +2,22 @@ module Sapphire
|
|
2
2
|
module Testing
|
3
3
|
module TestRunnerAdapter
|
4
4
|
|
5
|
-
def
|
6
|
-
|
5
|
+
def Report(&block)
|
6
|
+
$reporters.each do |reporter|
|
7
|
+
block.call reporter
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute()
|
12
|
+
Report do |x| x.ScenarioStart(self) end
|
7
13
|
|
8
14
|
self.backgrounds.each do |b|
|
9
15
|
|
10
|
-
b.execute
|
16
|
+
b.execute
|
11
17
|
|
12
18
|
b.and.each do |g_a|
|
13
19
|
|
14
|
-
g_a.execute
|
20
|
+
g_a.execute
|
15
21
|
|
16
22
|
end
|
17
23
|
|
@@ -20,29 +26,29 @@ module Sapphire
|
|
20
26
|
self.givens.each do |g|
|
21
27
|
g.when.each do |w|
|
22
28
|
|
23
|
-
g.execute
|
29
|
+
g.execute
|
24
30
|
|
25
31
|
g.and.each do |g_a|
|
26
32
|
|
27
|
-
g_a.execute
|
33
|
+
g_a.execute
|
28
34
|
|
29
35
|
end
|
30
36
|
|
31
|
-
w.execute
|
37
|
+
w.execute
|
32
38
|
|
33
39
|
w.and.each do |w_a|
|
34
40
|
|
35
|
-
w_a.execute
|
41
|
+
w_a.execute
|
36
42
|
|
37
43
|
end
|
38
44
|
|
39
45
|
w.then.each do |t|
|
40
46
|
|
41
|
-
t.execute
|
47
|
+
t.execute
|
42
48
|
|
43
49
|
t.and.each do |t_a|
|
44
50
|
|
45
|
-
t_a.execute
|
51
|
+
t_a.execute
|
46
52
|
|
47
53
|
end
|
48
54
|
|
@@ -52,13 +58,13 @@ module Sapphire
|
|
52
58
|
|
53
59
|
if(g.finally)
|
54
60
|
|
55
|
-
g.finally.execute
|
61
|
+
g.finally.execute
|
56
62
|
|
57
63
|
end
|
58
64
|
|
59
65
|
end
|
60
66
|
|
61
|
-
|
67
|
+
Report do |x| x.ScenarioComplete(self) end
|
62
68
|
|
63
69
|
end
|
64
70
|
end
|
data/lib/sapphire/version.rb
CHANGED
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.6.
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-09 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: selenium-webdriver
|
16
|
-
requirement: &
|
16
|
+
requirement: &10056984 !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: *
|
24
|
+
version_requirements: *10056984
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: colorize
|
27
|
-
requirement: &
|
27
|
+
requirement: &10056732 !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: *
|
35
|
+
version_requirements: *10056732
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: Platform
|
38
|
-
requirement: &
|
38
|
+
requirement: &10056480 !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: *
|
46
|
+
version_requirements: *10056480
|
47
47
|
description: An automated web acceptance test framework for non-technical resources
|
48
48
|
using selenium-wedriver.
|
49
49
|
email:
|