github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/internal/coverage/cformat/fmt_test.go (about)

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package cformat_test
     6  
     7  import (
     8  	"internal/coverage"
     9  	"internal/coverage/cformat"
    10  	"strings"
    11  	"testing"
    12  )
    13  
    14  func TestBasics(t *testing.T) {
    15  	fm := cformat.NewFormatter(coverage.CtrModeAtomic)
    16  	fm.SetPackage("my/pack")
    17  
    18  	mku := func(stl, enl, nx uint32) coverage.CoverableUnit {
    19  		return coverage.CoverableUnit{
    20  			StLine:  stl,
    21  			EnLine:  enl,
    22  			NxStmts: nx,
    23  		}
    24  	}
    25  	fn1units := []coverage.CoverableUnit{
    26  		mku(10, 11, 2),
    27  		mku(15, 11, 1),
    28  	}
    29  	fn2units := []coverage.CoverableUnit{
    30  		mku(20, 25, 3),
    31  		mku(30, 31, 2),
    32  		mku(33, 40, 7),
    33  	}
    34  	fn3units := []coverage.CoverableUnit{
    35  		mku(99, 100, 1),
    36  	}
    37  	for k, u := range fn1units {
    38  		fm.AddUnit("p.go", "f1", false, u, uint32(k))
    39  	}
    40  	for k, u := range fn2units {
    41  		fm.AddUnit("q.go", "f2", false, u, 0)
    42  		fm.AddUnit("q.go", "f2", false, u, uint32(k))
    43  	}
    44  	for _, u := range fn3units {
    45  		fm.AddUnit("lit.go", "f3", true, u, 0)
    46  	}
    47  
    48  	var b1, b2, b3 strings.Builder
    49  	if err := fm.EmitTextual(&b1); err != nil {
    50  		t.Fatalf("EmitTextual returned %v", err)
    51  	}
    52  	wantText := strings.TrimSpace(`
    53  mode: atomic
    54  lit.go:99.0,100.0 1 0
    55  p.go:10.0,11.0 2 0
    56  p.go:15.0,11.0 1 1
    57  q.go:20.0,25.0 3 0
    58  q.go:30.0,31.0 2 1
    59  q.go:33.0,40.0 7 2`)
    60  	gotText := strings.TrimSpace(b1.String())
    61  	if wantText != gotText {
    62  		t.Errorf("emit text: got:\n%s\nwant:\n%s\n", gotText, wantText)
    63  	}
    64  
    65  	if err := fm.EmitPercent(&b2, "", false); err != nil {
    66  		t.Fatalf("EmitPercent returned %v", err)
    67  	}
    68  	wantPercent := strings.TrimSpace(`
    69  my/pack	coverage: 62.5% of statements
    70  `)
    71  	gotPercent := strings.TrimSpace(b2.String())
    72  	if wantPercent != gotPercent {
    73  		t.Errorf("emit percent: got:\n%s\nwant:\n%s\n", gotPercent, wantPercent)
    74  	}
    75  
    76  	if err := fm.EmitFuncs(&b3); err != nil {
    77  		t.Fatalf("EmitFuncs returned %v", err)
    78  	}
    79  	wantFuncs := strings.TrimSpace(`
    80  p.go:10:	f1		33.3%
    81  q.go:20:	f2		75.0%
    82  total		(statements)	62.5%`)
    83  	gotFuncs := strings.TrimSpace(b3.String())
    84  	if wantFuncs != gotFuncs {
    85  		t.Errorf("emit funcs: got:\n%s\nwant:\n%s\n", gotFuncs, wantFuncs)
    86  	}
    87  	if false {
    88  		t.Logf("text is %s\n", b1.String())
    89  		t.Logf("perc is %s\n", b2.String())
    90  		t.Logf("funcs is %s\n", b3.String())
    91  	}
    92  }