|
1 | 1 | package coverage |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
4 | 5 | "sync" |
5 | 6 | "testing" |
6 | 7 | "time" |
7 | 8 |
|
8 | 9 | "github.com/cybertec-postgresql/pgcov/internal/runner" |
9 | 10 | ) |
10 | 11 |
|
11 | | -func TestNewCollector(t *testing.T) { |
12 | | - c := NewCollector() |
13 | | - if c == nil { |
14 | | - t.Fatal("NewCollector() returned nil") |
| 12 | +// merge merges another coverage collector's data into c. Used only in tests. |
| 13 | +func (c *Collector) merge(other *Collector) error { |
| 14 | + c.mu.Lock() |
| 15 | + defer c.mu.Unlock() |
| 16 | + other.mu.Lock() |
| 17 | + defer other.mu.Unlock() |
| 18 | + |
| 19 | + for file, otherPosHits := range other.coverage.Positions { |
| 20 | + for posKey, count := range otherPosHits { |
| 21 | + var startPos, length int |
| 22 | + _, err := fmt.Sscanf(posKey, "%d:%d", &startPos, &length) |
| 23 | + if err != nil { |
| 24 | + continue |
| 25 | + } |
| 26 | + if existingCount, exists := c.coverage.Positions[file][posKey]; exists { |
| 27 | + c.coverage.AddPosition(file, startPos, length, existingCount+count) |
| 28 | + } else { |
| 29 | + c.coverage.AddPosition(file, startPos, length, count) |
| 30 | + } |
| 31 | + } |
15 | 32 | } |
16 | 33 |
|
17 | | - if c.coverage == nil { |
18 | | - t.Error("NewCollector() coverage is nil") |
19 | | - } |
| 34 | + return nil |
20 | 35 | } |
21 | 36 |
|
22 | 37 | func TestCollector_AddSignal(t *testing.T) { |
@@ -203,7 +218,7 @@ func TestCollector_Merge(t *testing.T) { |
203 | 218 | _ = c2.AddSignal(runner.CoverageSignal{SignalID: "test.sql:300:70", Timestamp: now.Add(3 * time.Second)}) |
204 | 219 |
|
205 | 220 | // Merge c2 into c1 |
206 | | - err := c1.Merge(c2) |
| 221 | + err := c1.merge(c2) |
207 | 222 | if err != nil { |
208 | 223 | t.Fatalf("Merge() error = %v", err) |
209 | 224 | } |
@@ -261,6 +276,7 @@ func TestCollector_Coverage(t *testing.T) { |
261 | 276 | coverage := c.Coverage() |
262 | 277 | if coverage == nil { |
263 | 278 | t.Fatal("Coverage() returned nil") |
| 279 | + return |
264 | 280 | } |
265 | 281 |
|
266 | 282 | // Verify coverage contains position data |
|
0 commit comments