From fae0fa9de7ea67b7967d00d7c4557ef573f5b5b9 Mon Sep 17 00:00:00 2001 From: Mario Rodriguez Molins Date: Fri, 9 Feb 2024 17:12:35 +0100 Subject: [PATCH] Fix generic cobertura merge --- internal/testrunner/genericcobertura.go | 6 +- internal/testrunner/genericcobertura_test.go | 65 ++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/internal/testrunner/genericcobertura.go b/internal/testrunner/genericcobertura.go index 8b17c4b4a9..c4f9980cd7 100644 --- a/internal/testrunner/genericcobertura.go +++ b/internal/testrunner/genericcobertura.go @@ -56,14 +56,18 @@ func (c *GenericFile) merge(b *GenericFile) error { // Merge files for _, coverageLine := range b.Lines { found := false - for _, existingLine := range c.Lines { + foundId := 0 + for idx, existingLine := range c.Lines { if existingLine.LineNumber == coverageLine.LineNumber { found = true + foundId = idx break } } if !found { c.Lines = append(c.Lines, coverageLine) + } else { + c.Lines[foundId].Covered = c.Lines[foundId].Covered || coverageLine.Covered } } return nil diff --git a/internal/testrunner/genericcobertura_test.go b/internal/testrunner/genericcobertura_test.go index 173d6ab381..f3afc584d1 100644 --- a/internal/testrunner/genericcobertura_test.go +++ b/internal/testrunner/genericcobertura_test.go @@ -73,6 +73,71 @@ func TestGenericCoverage_Merge(t *testing.T) { }, }, }, + { + name: "merge files with same lines", + rhs: GenericCoverage{ + Files: []*GenericFile{ + { + Path: "/a", + Lines: []*GenericLine{ + {LineNumber: 1, Covered: true}, + {LineNumber: 2, Covered: false}, + {LineNumber: 4, Covered: false}, + }, + }, + { + Path: "/c", + Lines: []*GenericLine{ + {LineNumber: 1, Covered: false}, + {LineNumber: 2, Covered: true}, + {LineNumber: 4, Covered: true}, + }, + }, + }, + }, + lhs: GenericCoverage{ + Files: []*GenericFile{ + { + Path: "/a", + Lines: []*GenericLine{ + {LineNumber: 1, Covered: true}, + {LineNumber: 2, Covered: true}, + {LineNumber: 3, Covered: false}, + }, + }, + { + Path: "/c", + Lines: []*GenericLine{ + {LineNumber: 1, Covered: false}, + {LineNumber: 2, Covered: false}, + {LineNumber: 3, Covered: true}, + }, + }, + }, + }, + expected: GenericCoverage{ + Files: []*GenericFile{ + { + Path: "/a", + Lines: []*GenericLine{ + {LineNumber: 1, Covered: true}, + {LineNumber: 2, Covered: true}, + {LineNumber: 4, Covered: false}, + {LineNumber: 3, Covered: false}, + }, + }, + { + Path: "/c", + Lines: []*GenericLine{ + {LineNumber: 1, Covered: false}, + {LineNumber: 2, Covered: true}, + {LineNumber: 4, Covered: true}, + {LineNumber: 3, Covered: true}, + }, + }, + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {