Class: Res::Parsers::Junit

Inherits:
Object
  • Object
show all
Defined in:
lib/res/parsers/junit.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(junit_xml) ⇒ Junit

Returns a new instance of Junit.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/res/parsers/junit.rb', line 10

def initialize(junit_xml)
  file = File.open(junit_xml, "rb") 
  begin
    junit = Ox.parse(file.read)
  rescue Ox::ParseError => e
   raise "Invalid xunit XML format. Error: #{e}"
  end
  file.close
  result = attach_suite(junit)
  ir = ::Res::IR.new( :type        => 'Junit', 
                      :started     => '',
                      :finished    => Time.now,
                      :results     => result
                      )
  @io = File.open('./junit.res', 'w')
  @io.puts ir.json
  @io.close
end

Instance Attribute Details

#ioObject

Returns the value of attribute io.



8
9
10
# File 'lib/res/parsers/junit.rb', line 8

def io
  @io
end

Instance Method Details

#attach_cases(node) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/res/parsers/junit.rb', line 29

def attach_cases(node)
  testcase = Hash.new
  testcase['type'] = "JUnit::#{node.value}"
  testcase['name'] = node.attributes[:name]
  testcase['classname'] = node.attributes[:classname] if testcase['classname'] != nil
  testcase['duration'] = node.attributes[:time]
  testcase['status'] = 'passed'
  if node.nodes[0] != nil
    testcase['status'] = 'failed' if node.nodes[0].value == 'failure' or node.nodes[0].value == 'error'
    testcase['status'] = 'notrun' if node.nodes[0].value == 'skipped'
  end
  testcase
end

#attach_suite(component) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/res/parsers/junit.rb', line 43

def attach_suite(component)
  suite = []
  index = 0
  component.nodes.each do |node|
    if node.value == 'testcase'
      suite[index] = Hash.new
      suite[index] = attach_cases(node)
    else
      if node.respond_to?(:attributes) and node.respond_to?(:value) 
        suite[index] = Hash.new
        suite[index]['type'] = "JUnit::#{node.value}"
        suite[index]['name'] = node.attributes[:name]
        suite[index]['classname'] = node.attributes[:classname] if suite[index]['classname'] != nil
        suite[index]['children'] = attach_suite(node)
      end
    end # if 
  index += 1
  end # each
  suite.compact
end