From 95ef5a60218b742d70d58b5c1308b7d39dc3179c Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 14 Sep 2018 00:48:22 +1000 Subject: [PATCH] Add support to checkstyle --- lib/test_summary_buildkite_plugin/input.rb | 26 ++++++++++++++++++- spec/sample_artifacts/checkstyle.xml | 6 +++++ .../input_spec.rb | 25 ++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 spec/sample_artifacts/checkstyle.xml diff --git a/lib/test_summary_buildkite_plugin/input.rb b/lib/test_summary_buildkite_plugin/input.rb index 9b2f6ac..b37918a 100644 --- a/lib/test_summary_buildkite_plugin/input.rb +++ b/lib/test_summary_buildkite_plugin/input.rb @@ -199,10 +199,34 @@ def details(yaml_lines) end end + class CheckStyle < Base + def file_contents_to_failures(str) + xml = REXML::Document.new(str) + xml.elements.enum_for(:each, '//file').flat_map do |file| + file_name = file.attribute('name').value + + file.elements.map do |error| + severity = error.attribute('severity').value + source = error.attribute('source').value + line_num = error.attribute('line').value + location = "#{file_name}:#{line_num}" + message = error.attribute('message').value + + Failure::Structured.new( + summary: "[#{severity}] #{source} @ #{location}", + message: message, + details: location + ) + end + end + end + end + TYPES = { oneline: Input::OneLine, junit: Input::JUnit, - tap: Input::Tap + tap: Input::Tap, + checkStyle: Input::CheckStyle }.freeze end end diff --git a/spec/sample_artifacts/checkstyle.xml b/spec/sample_artifacts/checkstyle.xml new file mode 100644 index 0000000..f58ad4d --- /dev/null +++ b/spec/sample_artifacts/checkstyle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/spec/test_summary_buildkite_plugin/input_spec.rb b/spec/test_summary_buildkite_plugin/input_spec.rb index b9808ed..b45bc68 100644 --- a/spec/test_summary_buildkite_plugin/input_spec.rb +++ b/spec/test_summary_buildkite_plugin/input_spec.rb @@ -173,6 +173,31 @@ end end + describe 'checkstyle' do + let(:type) { 'checkStyle' } + let(:artifact_path) { 'checkstyle.xml' } + + it { is_expected.to be_a(TestSummaryBuildkitePlugin::Input::CheckStyle) } + + it 'has all failures' do + expect(input.failures.count).to eq(1) + end + + it 'failures have summary' do + expect(input.failures.first.summary).to include '[error]' + expect(input.failures.first.summary).to include 'no-consecutive-blank-lines' + expect(input.failures.first.summary).to include 'src/main/java/io/timnew/sol/Sol.kt:106' + end + + it 'failures have message' do + expect(input.failures.first.message).to include 'Needless blank line(s)' + end + + it 'failures have details' do + expect(input.failures.first.details).to include 'src/main/java/io/timnew/sol/Sol.kt:106' + end + end + describe 'setting ascii encoding' do let(:type) { 'oneline' } let(:artifact_path) { 'eslint-00112233-0011-0011-0011-001122334455.txt' }