class Swiftrail::Junit::Parser

Attributes

junit_patterns[R]

Public Class Methods

new(junit_patterns) click to toggle source
# File lib/swiftrail/junit/parser.rb, line 7
def initialize(junit_patterns)
  @junit_patterns = junit_patterns
end

Public Instance Methods

parse() click to toggle source
# File lib/swiftrail/junit/parser.rb, line 11
def parse
  all_files.map(&method(:test_suites)).flatten
end

Private Instance Methods

all_files() click to toggle source
# File lib/swiftrail/junit/parser.rb, line 19
def all_files
  junit_patterns.map do |junit_pattern|
    Dir[junit_pattern]
  end.flatten.uniq
end
create_test_suite(test_suite) click to toggle source
# File lib/swiftrail/junit/parser.rb, line 33
def create_test_suite(test_suite)
  TestSuite.new(
    test_suite[:name],
    test_cases(test_suite)
  )
end
failures(test_case) click to toggle source
# File lib/swiftrail/junit/parser.rb, line 52
def failures(test_case)
  test_case.children.select { |child| child.name == 'failure' }.map { |failure| failure.content }
end
read_report(file) click to toggle source
# File lib/swiftrail/junit/parser.rb, line 29
def read_report(file)
  Nokogiri::XML(IO.read(file))
end
test_cases(test_suite) click to toggle source
# File lib/swiftrail/junit/parser.rb, line 40
def test_cases(test_suite)
  test_suite.xpath('.//testcase').map do |test_case|
    TestCase.new(
      test_case[:classname],
      test_case[:classname].split('.').last,
      test_case[:name],
      failures(test_case),
      test_case[:time].to_f
    )
  end
end
test_suites(file) click to toggle source
# File lib/swiftrail/junit/parser.rb, line 25
def test_suites(file)
  read_report(file).xpath('//testsuite').map(&method(:create_test_suite))
end