forked from connamara/quickfixn
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathat_xml_to_nunit_xml.rb
124 lines (104 loc) · 2.78 KB
/
at_xml_to_nunit_xml.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
module QuickFIXn
module ResultHelpers
def result
if success?
"Success"
else
"Failure"
end
end
def success
if success?
"True"
else
"False"
end
end
end
class Suite
include ResultHelpers
attr_accessor :total, :errors, :failures, :asserts, :fixtures
def self.create_from_acceptance_test_xml_list xml_filename_list
suite = Suite.new
xml_filename_list.each { |fname| suite.add_fixture(Fixture::create_from_acceptance_test_xml(fname)) }
suite
end
def initialize
@fixtures = []
@total = 0
@errors = 0
@failures = 0
@asserts = 0
end
def add_fixture fixture
@fixtures << fixture
@total += fixture.total
@errors += fixture.errors
@failures += fixture.failures
@asserts += fixture.asserts
end
def success?
@failures == 0 && @errors == 0
end
def get_binding
binding
end
end
class Fixture
include ResultHelpers
attr_accessor :name, :total, :errors, :failures, :cases
def self.create_from_acceptance_test_xml xml_filename
require 'rubygems'
require 'nokogiri'
fixture = Fixture.new
doc = Nokogiri::XML(File.open(xml_filename))
doc.xpath('//at/test').each { |tc| fixture.cases << Case.new(tc['name'], tc['result'])}
res = doc.xpath('//at/results').first
fixture.total = res['total'].to_i
fixture.failures = res['failures'].to_i
fixture.name = File.basename(xml_filename, '.xml')
fixture
end
def initialize
@cases = []
@total = 0
@errors = 0
@failures = 0
end
def asserts
@cases.size
end
def success?
res = true
@cases.each do |testcase|
res = false unless testcase.success?
end
res
end
end
class Case
include ResultHelpers
attr_reader :name
def initialize filename, result
@name = File.basename(filename, '.def') # .gsub(/^definitions\/server\/\w+\//, '').gsub(/\.def/, '').strip
@is_success = (result.downcase == "success") ? true : false
end
def success?
@is_success
end
end
end # module QuickFIXn
if $0 == __FILE__
unless ARGV.size >= 2
puts "usage: #{$0} OUT_FILE ERB_FILE [XML_FILE...]"
raise SystemExit.new(2)
end
require 'erb'
out_file = ARGV.shift
template = ARGV.shift
xml_files = (ARGV.empty?) ? Dir.glob("AcceptanceTests_*.xml") : Array.new(ARGV)
suite = QuickFIXn::Suite::create_from_acceptance_test_xml_list(xml_files)
erb = ERB.new(File.read(template))
result = erb.result(binding)
File.open(out_file, 'w') { |f| f.puts result }
end