@@ -10,6 +10,7 @@ import (
1010 "io"
1111 "os"
1212 "path/filepath"
13+ "sort"
1314 "strings"
1415 "testing"
1516 "time"
@@ -72,6 +73,105 @@ func TestMergeCSVWriteJSONL_and_coveragedb_SaveMergeResult(t *testing.T) {
7273 assert .NoError (t , eg .Wait ())
7374}
7475
76+ func TestMergerdCoverageRecords (t * testing.T ) {
77+ tests := []struct {
78+ name string
79+ input * FileMergeResult
80+ wantRecords []* coveragedb.MergedCoverageRecord
81+ }{
82+ {
83+ name : "file doesn't exist" ,
84+ input : & FileMergeResult {
85+ FilePath : "deleted.c" ,
86+ MergeResult : & MergeResult {
87+ FileExists : false ,
88+ },
89+ },
90+ wantRecords : nil ,
91+ },
92+ {
93+ name : "two managers merge" ,
94+ input : & FileMergeResult {
95+ FilePath : "file.c" ,
96+ MergeResult : & MergeResult {
97+ FileExists : true ,
98+ HitCounts : map [int ]int {
99+ 1 : 5 ,
100+ 2 : 7 ,
101+ },
102+ LineDetails : map [int ][]* FileRecord {
103+ 1 : {
104+ {
105+ FilePath : "file.c" ,
106+ RepoCommit : RepoCommit {
107+ Repo : "repo1" ,
108+ Commit : "commit1" ,
109+ },
110+ StartLine : 10 ,
111+ HitCount : 5 ,
112+ Manager : "manager1" ,
113+ },
114+ },
115+ 2 : {
116+ {
117+ FilePath : "file.c" ,
118+ RepoCommit : RepoCommit {
119+ Repo : "repo2" ,
120+ Commit : "commit2" ,
121+ },
122+ StartLine : 20 ,
123+ HitCount : 7 ,
124+ Manager : "manager2" ,
125+ },
126+ },
127+ },
128+ },
129+ },
130+ wantRecords : []* coveragedb.MergedCoverageRecord {
131+ {
132+ Manager : "*" ,
133+ FilePath : "file.c" ,
134+ FileData : & coveragedb.Coverage {
135+ Instrumented : 2 ,
136+ Covered : 2 ,
137+ LinesInstrumented : []int64 {1 , 2 },
138+ HitCounts : []int64 {5 , 7 },
139+ },
140+ },
141+ {
142+ Manager : "manager1" ,
143+ FilePath : "file.c" ,
144+ FileData : & coveragedb.Coverage {
145+ Instrumented : 1 ,
146+ Covered : 1 ,
147+ LinesInstrumented : []int64 {1 },
148+ HitCounts : []int64 {5 },
149+ },
150+ },
151+ {
152+ Manager : "manager2" ,
153+ FilePath : "file.c" ,
154+ FileData : & coveragedb.Coverage {
155+ Instrumented : 1 ,
156+ Covered : 1 ,
157+ LinesInstrumented : []int64 {2 },
158+ HitCounts : []int64 {7 },
159+ },
160+ },
161+ },
162+ },
163+ }
164+ for _ , test := range tests {
165+ t .Run (test .name , func (t * testing.T ) {
166+ gotRecords := mergedCoverageRecords (test .input )
167+ sort .Slice (gotRecords , func (i , j int ) bool {
168+ return gotRecords [i ].Manager < gotRecords [j ].Manager
169+ })
170+ assert .Equal (t , test .wantRecords , gotRecords , "records are not equal" )
171+ })
172+ }
173+ }
174+
75175// nolint: lll
76176func TestAggregateStreamData (t * testing.T ) {
77177 type Test struct {
0 commit comments