cuporter 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +5 -5
- data/Rakefile +1 -1
- data/lib/cuporter.rb +1 -0
- data/lib/cuporter/formatters/html.rb +9 -41
- data/lib/cuporter/formatters/html_node_writer.rb +96 -0
- metadata +4 -3
data/README.textile
CHANGED
@@ -60,9 +60,9 @@ h3. Command Lines
|
|
60
60
|
h4. help
|
61
61
|
|
62
62
|
<pre>
|
63
|
-
$ ./bin/cuporter
|
63
|
+
$ ./bin/cuporter -h
|
64
64
|
|
65
|
-
Usage: cuporter
|
65
|
+
Usage: cuporter [options]
|
66
66
|
|
67
67
|
-i, --in DIR directory of *.feature files
|
68
68
|
Default: features/**/*.feature
|
@@ -80,11 +80,11 @@ h4. help
|
|
80
80
|
h4. run script directly
|
81
81
|
|
82
82
|
<pre>
|
83
|
-
$ ./bin/cuporter
|
83
|
+
$ ./bin/cuporter -i fixtures/self_text # pretty-print demo report to stdout
|
84
84
|
|
85
|
-
$ ./bin/cuporter
|
85
|
+
$ ./bin/cuporter -f html -o feature_tag_report.html # default input features/**/*.feature to named output file
|
86
86
|
|
87
|
-
$ ./bin/cuporter
|
87
|
+
$ ./bin/cuporter -f html --numbers -o feature_tag_report.html # same, but number the scenarios and example rows
|
88
88
|
</pre>
|
89
89
|
|
90
90
|
h4. run via rake
|
data/Rakefile
CHANGED
data/lib/cuporter.rb
CHANGED
@@ -1,48 +1,11 @@
|
|
1
1
|
# Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
|
2
2
|
require 'rubygems'
|
3
3
|
require 'erb'
|
4
|
-
require 'builder'
|
5
4
|
|
6
5
|
module Cuporter
|
7
6
|
module Formatters
|
8
7
|
class Html < Writer
|
9
8
|
|
10
|
-
NODE_CLASS = [:tag, :feature, :scenario, :example_set, :example]
|
11
|
-
|
12
|
-
def write_nodes
|
13
|
-
@report.children.each do |tag_node|
|
14
|
-
tag_node.number_all_descendants if @number_scenarios
|
15
|
-
write_node(tag_node, 0)
|
16
|
-
end
|
17
|
-
builder
|
18
|
-
end
|
19
|
-
|
20
|
-
def builder
|
21
|
-
@builder ||= Builder::XmlMarkup.new
|
22
|
-
end
|
23
|
-
|
24
|
-
def write_node(node, indent_level)
|
25
|
-
builder.li(:class => NODE_CLASS[indent_level]) do |list_item|
|
26
|
-
list_item.span("#{node.number}.", :class => :number) if node.number
|
27
|
-
list_item.span(node.name, :class => "#{NODE_CLASS[indent_level]}_name" )
|
28
|
-
|
29
|
-
if node.has_children?
|
30
|
-
list_item.ul(:class => "#{NODE_CLASS[indent_level]}_children") do |list|
|
31
|
-
node.children.each do |child|
|
32
|
-
if child.has_children?
|
33
|
-
write_node(child, indent_level + 1)
|
34
|
-
else
|
35
|
-
list.li() do |item|
|
36
|
-
item.span("#{child.number}.", :class => :number) if child.number
|
37
|
-
item.span(child.name, :class => "#{NODE_CLASS[indent_level + 1]}_name")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
9
|
def inline_style
|
47
10
|
File.read("lib/cuporter/formatters/cuporter.css")
|
48
11
|
end
|
@@ -59,7 +22,7 @@ module Cuporter
|
|
59
22
|
@output.puts rhtml.result(get_binding).reject {|line| /^\s+$/ =~ line}
|
60
23
|
end
|
61
24
|
|
62
|
-
|
25
|
+
RHTML = %{
|
63
26
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
64
27
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
65
28
|
<head>
|
@@ -69,13 +32,18 @@ module Cuporter
|
|
69
32
|
</style>
|
70
33
|
</head>
|
71
34
|
<body>
|
35
|
+
<div class="cuporter_header">
|
36
|
+
<div id="label">
|
37
|
+
<h1>Cucumber Tags</h1>
|
38
|
+
</div>
|
39
|
+
</div>
|
72
40
|
<ul class="tag_list">
|
73
|
-
<%= write_nodes%>
|
41
|
+
<%= HtmlNodeWriter.new.write_nodes(@report, @number_scenarios)%>
|
74
42
|
</ul>
|
75
43
|
</body>
|
76
44
|
</html>
|
77
|
-
|
78
|
-
|
45
|
+
}
|
46
|
+
|
79
47
|
|
80
48
|
end
|
81
49
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
|
2
|
+
require 'rubygems'
|
3
|
+
require 'builder'
|
4
|
+
|
5
|
+
module Cuporter
|
6
|
+
module Formatters
|
7
|
+
class HtmlNodeWriter
|
8
|
+
|
9
|
+
attr_reader :builder
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@builder = Builder::XmlMarkup.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def write_nodes(report, number_scenarios)
|
16
|
+
report.children.each do |tag_node|
|
17
|
+
tag_node.number_all_descendants if number_scenarios
|
18
|
+
write_node(tag_node)
|
19
|
+
end
|
20
|
+
builder
|
21
|
+
end
|
22
|
+
|
23
|
+
def write_node(node)
|
24
|
+
builder.li(:class => node_class(node.name)) do
|
25
|
+
write_node_name(node)
|
26
|
+
write_children(node)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def write_node_name(node)
|
31
|
+
builder.span("#{node.number}.", :class => :number) if node.number
|
32
|
+
builder.div(node.name, :class => "#{node_class(node.name)}_name")
|
33
|
+
end
|
34
|
+
|
35
|
+
def write_children(node)
|
36
|
+
return if node.children.empty?
|
37
|
+
if node.is_a? ExampleSetNode
|
38
|
+
write_children_in_table(node.children)
|
39
|
+
else
|
40
|
+
write_children_in_list(node.children)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def write_children_in_table(children)
|
45
|
+
builder.div(:class => :example_rows) do
|
46
|
+
builder.table do
|
47
|
+
builder.thead {to_row(children.first)}
|
48
|
+
builder.tbody do
|
49
|
+
children[1..-1].each do |child|
|
50
|
+
to_row(child, :class => :example)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_row(node, attributes = {})
|
58
|
+
builder.tr(attributes) do |row|
|
59
|
+
number_string = node.number ? "#{node.number}." : ""
|
60
|
+
row.td(number_string, :class => :number)
|
61
|
+
node.name.sub(/^\|/,"").split("|").each {|s| row.td(s.strip, :class => :val) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def write_children_in_list(children)
|
66
|
+
builder.ul do
|
67
|
+
children.each do |child|
|
68
|
+
if child.has_children?
|
69
|
+
write_node(child)
|
70
|
+
else
|
71
|
+
builder.li() { write_node_name(child) }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def node_class(name)
|
78
|
+
case name
|
79
|
+
when FeatureParser::TAG_LINE
|
80
|
+
:tag
|
81
|
+
when FeatureParser::FEATURE_LINE
|
82
|
+
:feature
|
83
|
+
when FeatureParser::SCENARIO_LINE
|
84
|
+
:scenario
|
85
|
+
when FeatureParser::SCENARIO_OUTLINE_LINE
|
86
|
+
:scenario_outline
|
87
|
+
when FeatureParser::SCENARIO_SET_LINE, FeatureParser::EXAMPLE_SET_LINE
|
88
|
+
:example_set
|
89
|
+
else
|
90
|
+
:example
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tim Camper
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-09-
|
17
|
+
date: 2010-09-06 00:00:00 -04:00
|
18
18
|
default_executable: cuporter
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- lib/cuporter/example_set_node.rb
|
35
35
|
- lib/cuporter/formatters/csv.rb
|
36
36
|
- lib/cuporter/formatters/text.rb
|
37
|
+
- lib/cuporter/formatters/html_node_writer.rb
|
37
38
|
- lib/cuporter/formatters/html.rb
|
38
39
|
- lib/cuporter/formatters/writer.rb
|
39
40
|
- lib/cuporter/formatters/text_methods.rb
|