xmatch 0.2.1 → 0.3.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.
- data/lib/matcher/html_formatter.rb +16 -13
- data/lib/matcher/version.rb +1 -1
- data/lib/matcher/xmatch.html.erb +188 -49
- data/spec/matcher/html_formatter_spec.rb +39 -0
- metadata +7 -5
@@ -11,6 +11,7 @@ module Matcher
|
|
11
11
|
def initialize(matcher, args = {})
|
12
12
|
@matcher = matcher
|
13
13
|
@report_dir = args[:report_dir] || '/tmp/xmatch'
|
14
|
+
@generated_xml_dir = File.join(@report_dir, "generated_xml")
|
14
15
|
@prefix = args[:prefix]
|
15
16
|
end
|
16
17
|
|
@@ -21,15 +22,17 @@ module Matcher
|
|
21
22
|
match_data << match_info_for(elem)
|
22
23
|
elem.attributes.values.each { | attr | match_data << match_info_for(attr) }
|
23
24
|
end
|
24
|
-
match_data.sort
|
25
|
-
|
26
|
-
FileUtils.mkdir_p(@report_dir)
|
27
|
-
filename = @prefix ? "#{@prefix}-xmatch.html" : "xmatch.html"
|
28
|
-
File.open(File.join(@report_dir, filename), 'w') { |f| f.write(generate_html(match_data)) }
|
25
|
+
create_report(match_data.sort {|a, b| a.line <=> b.line})
|
29
26
|
end
|
30
27
|
|
31
28
|
private
|
32
29
|
|
30
|
+
def create_report(match_data)
|
31
|
+
FileUtils.mkdir_p(@generated_xml_dir)
|
32
|
+
html = generate_html(match_data, create_expected_file, create_actual_file)
|
33
|
+
File.open(File.join(@report_dir, prefixed("xmatch.html")), 'w') { |f| f.write(html) }
|
34
|
+
end
|
35
|
+
|
33
36
|
def match_info_for(elem)
|
34
37
|
info = @matcher.results[elem.path]
|
35
38
|
result = @matcher.result_for(elem.path)
|
@@ -41,12 +44,9 @@ module Matcher
|
|
41
44
|
:custom_matched => info ? info.was_custom_matched : false)
|
42
45
|
end
|
43
46
|
|
44
|
-
def generate_html(
|
45
|
-
actual_filename = create_actual_file
|
46
|
-
expected_filename = create_expected_file
|
47
|
+
def generate_html(match_info, expected_filename, actual_filename)
|
47
48
|
xml = @matcher
|
48
49
|
completedness = compute_completedness
|
49
|
-
match_info = data
|
50
50
|
html = ERB.new(File.read(TEMPLATE))
|
51
51
|
html.result(binding)
|
52
52
|
end
|
@@ -64,10 +64,13 @@ module Matcher
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def write_xml(name, xml)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
path = File.join(@generated_xml_dir, prefixed("#{name}-#{Time.now.to_i}.xml"))
|
68
|
+
File.open(path, 'w') { |f| f.write(xml)}
|
69
|
+
path
|
70
|
+
end
|
71
|
+
|
72
|
+
def prefixed(name)
|
73
|
+
@prefix ? "#{@prefix}-#{name}" : name
|
71
74
|
end
|
72
75
|
|
73
76
|
end
|
data/lib/matcher/version.rb
CHANGED
data/lib/matcher/xmatch.html.erb
CHANGED
@@ -1,56 +1,195 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
|
3
|
-
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
3
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
-
<head>
|
6
|
-
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
|
+
<title>
|
7
|
+
XMatch Report
|
8
|
+
</title>
|
9
|
+
<style type="text/css">
|
10
|
+
/***************STRUCTURE***************************/
|
11
|
+
/*Reset*/
|
12
|
+
* {
|
13
|
+
margin:0;
|
14
|
+
}
|
15
|
+
|
16
|
+
body {
|
17
|
+
min-width:640px;
|
18
|
+
}
|
19
|
+
/* Absolute positioned header for all browsers*/
|
20
|
+
#header-wrapper {
|
21
|
+
position:absolute;
|
22
|
+
top:0;
|
23
|
+
left:0;
|
24
|
+
width:100%;
|
25
|
+
height:6em;
|
26
|
+
}
|
27
|
+
/* Reset header position to fixed for real browsers such as Firefox*/
|
28
|
+
body>#header-wrapper {
|
29
|
+
position:fixed;
|
30
|
+
}
|
31
|
+
|
32
|
+
#header {
|
33
|
+
height:8em;
|
34
|
+
margin:0 auto;
|
35
|
+
}
|
36
|
+
|
37
|
+
#content-wrapper {
|
38
|
+
padding:6em 0 0 0;
|
39
|
+
margin-left:0;
|
40
|
+
margin-top: 30px;
|
41
|
+
voice-family: "\"}\"";
|
42
|
+
voice-family:inherit;
|
43
|
+
margin-left:16px;
|
44
|
+
padding-bottom:60px;
|
45
|
+
}
|
46
|
+
|
47
|
+
body>#content-wrapper {
|
48
|
+
margin-left:0;
|
49
|
+
}
|
50
|
+
|
51
|
+
#content {
|
52
|
+
margin:0 auto;
|
53
|
+
}
|
54
|
+
|
55
|
+
#footer-wrapper {
|
56
|
+
width:100%;
|
57
|
+
position:absolute;
|
58
|
+
bottom:0;
|
59
|
+
left:0;
|
60
|
+
height:30px;
|
61
|
+
}
|
62
|
+
|
63
|
+
body>#footer-wrapper {
|
64
|
+
position:fixed;
|
65
|
+
}
|
66
|
+
|
67
|
+
#footer {
|
68
|
+
height:40px;
|
69
|
+
margin:0 auto;
|
70
|
+
font-size: 12px;
|
71
|
+
}
|
7
72
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
73
|
+
/***************STYLE***************************/
|
74
|
+
body,
|
75
|
+
html{
|
76
|
+
font-family:"Lucida Grande", Geneva, Verdana, Arial, Helvetica, sans-serif;
|
77
|
+
color:#000;font-family:"Trebuchet MS", Georgia, Verdana, Arial, Helvetica, sans-serif;
|
78
|
+
background:#ddd;
|
79
|
+
font-size:14px;
|
80
|
+
}
|
81
|
+
|
82
|
+
#header,
|
83
|
+
#footer {
|
84
|
+
background:gray;
|
85
|
+
color:#fff;
|
86
|
+
}
|
87
|
+
|
88
|
+
#content {
|
89
|
+
background:#fff;
|
90
|
+
color:#000;
|
91
|
+
}
|
92
|
+
|
93
|
+
h1,
|
94
|
+
h2 {
|
95
|
+
padding:0;
|
96
|
+
margin:0 0 0 10px;
|
97
|
+
}
|
98
|
+
|
99
|
+
h1 {
|
100
|
+
font-size:1.3em;
|
101
|
+
text-align:left;
|
102
|
+
padding-top:0.5em;
|
103
|
+
}
|
104
|
+
|
105
|
+
h2 {
|
106
|
+
font-size:1.1em;
|
107
|
+
padding-top:1em;
|
108
|
+
margin-top:0;
|
109
|
+
}
|
110
|
+
|
111
|
+
#footer p {
|
112
|
+
margin:0 0 0 5px;
|
113
|
+
padding:0;
|
114
|
+
}
|
115
|
+
|
116
|
+
#footer a {
|
117
|
+
color:#fff;
|
118
|
+
}
|
12
119
|
|
13
|
-
|
14
|
-
|
15
|
-
font-size: 12px;
|
16
|
-
line-height: 18px;
|
120
|
+
ul, p {
|
121
|
+
line-height:1.45em;
|
17
122
|
}
|
18
|
-
|
19
|
-
|
123
|
+
|
124
|
+
p {
|
125
|
+
margin:0 10% 0 10px;
|
126
|
+
padding-bottom:10px;
|
127
|
+
}
|
128
|
+
|
129
|
+
table { width: 100%; }
|
130
|
+
|
131
|
+
.matched { background-color: #DBFFB4 }
|
20
132
|
.mismatched { background-color: #FA5858 }
|
21
133
|
.unmatched { background-color: #FFFBD3 }
|
22
|
-
|
23
|
-
|
24
|
-
</head>
|
25
|
-
|
26
|
-
<
|
27
|
-
|
28
|
-
<
|
29
|
-
<
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
</
|
134
|
+
|
135
|
+
</style>
|
136
|
+
</head>
|
137
|
+
<body>
|
138
|
+
<div id="content-wrapper">
|
139
|
+
<div id="content">
|
140
|
+
<table border="0" cellspacing="2" cellpadding="5">
|
141
|
+
<tr>
|
142
|
+
<th>
|
143
|
+
Line
|
144
|
+
</th>
|
145
|
+
<th>
|
146
|
+
Path
|
147
|
+
</th>
|
148
|
+
<th>
|
149
|
+
Expected
|
150
|
+
</th>
|
151
|
+
<th>
|
152
|
+
Actual
|
153
|
+
</th>
|
154
|
+
</tr><% match_info.each do | match | %>
|
155
|
+
<tr class="<%= match.result %>">
|
156
|
+
<td>
|
157
|
+
<%= match.line %>
|
158
|
+
</td>
|
159
|
+
<td>
|
160
|
+
<%= match.path %>
|
161
|
+
</td><% if match.custom_matched == true%>
|
162
|
+
<td>
|
163
|
+
<i>(something like) <%= match.expected %></i>
|
164
|
+
</td><% else %>
|
165
|
+
<td>
|
166
|
+
<%= match.expected %>
|
167
|
+
</td><% end %>
|
168
|
+
<td>
|
169
|
+
<%= match.actual %>
|
170
|
+
</td>
|
171
|
+
</tr><% end %>
|
172
|
+
</table>
|
173
|
+
</div>
|
174
|
+
</div>
|
175
|
+
<div id="header-wrapper">
|
176
|
+
<div id="header">
|
177
|
+
<h2>
|
178
|
+
XMatch Report
|
179
|
+
</h2>
|
180
|
+
<p>
|
181
|
+
<%= xml.mismatches.size %> mismatches found from <%= xml.results.size %> elements.<br />
|
182
|
+
Expected xml document is <b><%= completedness %>%</b> 'matched'.
|
183
|
+
</p>
|
184
|
+
<p>
|
185
|
+
<a href='<%=expected_filename%>' target='_blank'>Expected xml</a> | <a href='<%=actual_filename%>' target='_blank'>Actual xml</a>
|
186
|
+
</p>
|
187
|
+
</div>
|
188
|
+
</div>
|
189
|
+
<div id="footer-wrapper">
|
190
|
+
<div id="footer">
|
191
|
+
<p><a href='https://github.com/pmoran/xmatch'>XMatch</a> © 2010 Peter Moran</p>
|
192
|
+
</div>
|
193
|
+
</div>
|
194
|
+
</body>
|
56
195
|
</html>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Matcher::HtmlFormatter do
|
4
|
+
|
5
|
+
context "when configured" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
xml = "<foo></foo>"
|
9
|
+
@matcher = Matcher::Xml.new("<foo></foo>")
|
10
|
+
@matcher.match(xml)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should create an html report in the default report directory" do
|
14
|
+
Matcher::HtmlFormatter.new(@matcher).format
|
15
|
+
File.exists?("/tmp/xmatch/xmatch.html").should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
%w[expected actual].each do |file|
|
19
|
+
it "should create generated #{file} file" do
|
20
|
+
now = Time.now
|
21
|
+
Time.stub!(:now).and_return(now)
|
22
|
+
Matcher::HtmlFormatter.new(@matcher).format
|
23
|
+
File.exists?("/tmp/xmatch/generated_xml/#{file}-#{now.to_i}.xml").should be_true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should create an html file in a configured directory" do
|
28
|
+
Matcher::HtmlFormatter.new(@matcher, :report_dir => "/tmp/xmatch/mydir").format
|
29
|
+
File.exists?("/tmp/xmatch/mydir/xmatch.html").should be_true
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should create an html file with a configured prefix" do
|
33
|
+
Matcher::HtmlFormatter.new(@matcher, :prefix => "myprefix").format
|
34
|
+
File.exists?("/tmp/xmatch/myprefix-xmatch.html").should be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xmatch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Peter Moran
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-15 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- spec/fixtures/books7.xml
|
94
94
|
- spec/fixtures/books8.xml
|
95
95
|
- spec/fixtures/books9.xml
|
96
|
+
- spec/matcher/html_formatter_spec.rb
|
96
97
|
- spec/matcher/smoke_spec.rb
|
97
98
|
- spec/matcher/xml_spec.rb
|
98
99
|
- spec/spec_helper.rb
|
@@ -142,6 +143,7 @@ test_files:
|
|
142
143
|
- spec/fixtures/books7.xml
|
143
144
|
- spec/fixtures/books8.xml
|
144
145
|
- spec/fixtures/books9.xml
|
146
|
+
- spec/matcher/html_formatter_spec.rb
|
145
147
|
- spec/matcher/smoke_spec.rb
|
146
148
|
- spec/matcher/xml_spec.rb
|
147
149
|
- spec/spec_helper.rb
|