From f7287a51f1610d34a23e5437fc11205e6244c55e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Moy=C3=A1?= Date: Mon, 14 Feb 2022 14:51:41 -0300 Subject: [PATCH 1/4] Make simplecov json formatter more flexible --- formatters/simplecov/json_formatter.go | 1 - 1 file changed, 1 deletion(-) diff --git a/formatters/simplecov/json_formatter.go b/formatters/simplecov/json_formatter.go index 31fa36e9..2c38067c 100644 --- a/formatters/simplecov/json_formatter.go +++ b/formatters/simplecov/json_formatter.go @@ -61,7 +61,6 @@ func jsonFormat(r Formatter, rep formatters.Report) (formatters.Report, error) { var m simplecovJsonFormatterReport decoder := json.NewDecoder(jf) - decoder.DisallowUnknownFields() err = decoder.Decode(&m) From eb6632bdb6560e7e07b7dd36f95cc399ad48f9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Moy=C3=A1?= Date: Mon, 14 Feb 2022 15:15:11 -0300 Subject: [PATCH 2/4] add tests --- .../simplecov/simplecov-with-groups.json | 158 ++++++++++++++++++ formatters/simplecov/simplecov_test.go | 27 +++ 2 files changed, 185 insertions(+) create mode 100644 formatters/simplecov/simplecov-with-groups.json diff --git a/formatters/simplecov/simplecov-with-groups.json b/formatters/simplecov/simplecov-with-groups.json new file mode 100644 index 00000000..6675a819 --- /dev/null +++ b/formatters/simplecov/simplecov-with-groups.json @@ -0,0 +1,158 @@ +{ + "meta": { + "simplecov_version": "0.19.0" + }, + "coverage": { + "development/mygem/lib/mygem/errors.rb": { + "lines": [ + 1, + null, + 1, + 1, + 0, + null, + null, + null, + 1, + null, + null, + null, + 1, + null, + null, + null, + 1, + null, + null, + null, + null + ] + }, + "development/mygem/lib/mygem/definition_manager.rb": { + "lines": [ + 1, + 1, + 1, + null, + 1, + null, + 1, + 1, + null, + null, + 1, + 8, + null, + null, + 1, + 19, + null, + null, + 1, + null, + 1, + 8, + null, + null, + 1, + 11, + null, + null, + null, + null, + null, + null + ] + }, + "development/mygem/lib/mygem/interface.rb": { + "lines": [ + 1, + null, + 1, + 1, + null, + 1, + 8, + null, + null, + null, + null + ] + }, + "development/mygem/lib/mygem/implements.rb": { + "lines": [ + 1, + null, + 1, + 9, + null, + null, + null + ] + }, + "development/mygem/lib/mygem/implementation_manager.rb": { + "lines": [ + 1, + 1, + 1, + null, + 1, + null, + 1, + 1, + null, + null, + 1, + 9, + null, + null, + 1, + 82, + null, + null, + 1, + null, + 1, + 9, + null, + null, + 1, + 73, + null, + null, + null, + null, + null, + null + ] + }, + "development/mygem/lib/mygem/wrap.rb": { + "lines": [ + 1, + null, + 1, + 17, + 20, + 16, + 16, + 12, + null, + null + ] + }, + "development/mygem/lib/mygem/type_check.rb": { + "lines": [ + 1, + null, + 1, + 7, + 7, + 7, + null, + null, + null + ] + } + }, + "groups": {} +} diff --git a/formatters/simplecov/simplecov_test.go b/formatters/simplecov/simplecov_test.go index cd9e4652..ed938477 100644 --- a/formatters/simplecov/simplecov_test.go +++ b/formatters/simplecov/simplecov_test.go @@ -248,3 +248,30 @@ func Test_Format_Merged(t *testing.T) { assert.Equal(lc.Missed, 2) assert.Equal(lc.Total, 8) } + +func Test_ParseWithGroups(t *testing.T) { + ogb := env.GitBlob + defer func() { + env.GitBlob = ogb + }() + env.GitBlob = func(s string, c *object.Commit) (string, error) { + return s, nil + } + + assert := require.New(t) + + formatter := Formatter{ + Path: "./simplecov-with-groups.json", + } + rep, err := formatter.Format() + assert.NoError(err) + + assert.Len(rep.SourceFiles, 7) + + cf := rep.SourceFiles["development/mygem/lib/mygem/wrap.rb"] + assert.Len(cf.Coverage, 10) + for i, x := range []interface{}{1, nil, 1, 17, 20, 16, 16, 12, nil, nil} { + l := cf.Coverage[i] + assert.Equal(x, l.Interface()) + } +} From add897974a368a24259307e873c6052bbdd1df5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Moy=C3=A1?= Date: Mon, 14 Feb 2022 15:18:47 -0300 Subject: [PATCH 3/4] bump circleci xcode version --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5b52360c..5633a48e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ linux_image: &linux_image macos_image: &macos_image macos: - xcode: "11.3.0" + xcode: "11.4.0" setup_macos_env: &setup_macos_env From 105540e52b58dbc15d0374bb7628c61d84f35637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Moy=C3=A1?= Date: Mon, 14 Feb 2022 18:45:36 -0300 Subject: [PATCH 4/4] read simplecov version from report to fallback to legacy formatter --- formatters/simplecov/json_formatter.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/formatters/simplecov/json_formatter.go b/formatters/simplecov/json_formatter.go index 2c38067c..43b5886d 100644 --- a/formatters/simplecov/json_formatter.go +++ b/formatters/simplecov/json_formatter.go @@ -3,6 +3,7 @@ package simplecov import ( "encoding/json" "os" + "fmt" "github.com/Sirupsen/logrus" "github.com/codeclimate/test-reporter/env" @@ -31,6 +32,19 @@ type simplecovJsonFormatterReport struct { CoverageType map[string]fileCoverage `json:"coverage"` } +func reportIsOnLegacyFormat(simplecovVersion string) bool { + var major, minor, patch int + fmt.Sscanf(simplecovVersion, "%d.%d.%d", &major, &minor, &patch) + + if major < 1 { + if minor < 18 { + return true + } + } + + return false +} + func transformLineCoverageToCoverage(ln []interface{}) formatters.Coverage { coverage := make([]formatters.NullInt, len(ln)) ignoredLine := formatters.NullInt{-1, false} @@ -68,6 +82,10 @@ func jsonFormat(r Formatter, rep formatters.Report) (formatters.Report, error) { return rep, errors.WithStack(err) } + if reportIsOnLegacyFormat(m.Meta.SimpleCovVersion) { + return rep, errors.WithStack(errors.Errorf("Simplecov report is on legacy format, falling back to legacy formatter.")) + } + gitHead, _ := env.GetHead() for n, ls := range m.CoverageType { fe, err := formatters.NewSourceFile(n, gitHead)