]> Cypherpunks.ru repositories - gostls13.git/blob - src/internal/trace/v2/testdata/mktests.go
runtime: add execution tracer v2 behind GOEXPERIMENT=exectracer2
[gostls13.git] / src / internal / trace / v2 / testdata / mktests.go
1 // Copyright 2023 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 //go:build ignore
6
7 package main
8
9 import (
10         "fmt"
11         "log"
12         "os"
13         "os/exec"
14         "path/filepath"
15         "regexp"
16 )
17
18 func main() {
19         log.SetFlags(0)
20         if err := run(); err != nil {
21                 log.Fatal(err)
22         }
23 }
24
25 func run() error {
26         generators, err := filepath.Glob("./generators/*.go")
27         if err != nil {
28                 return fmt.Errorf("reading generators: %v", err)
29         }
30         genroot := "./tests"
31
32         // Grab a pattern, if any.
33         var re *regexp.Regexp
34         if pattern := os.Getenv("GOTRACETEST"); pattern != "" {
35                 re, err = regexp.Compile(pattern)
36                 if err != nil {
37                         return fmt.Errorf("compiling regexp %q for GOTRACETEST: %v", pattern, err)
38                 }
39         }
40
41         if err := os.MkdirAll(genroot, 0777); err != nil {
42                 return fmt.Errorf("creating generated root: %v", err)
43         }
44         for _, path := range generators {
45                 name := filepath.Base(path)
46                 name = name[:len(name)-len(filepath.Ext(name))]
47
48                 // Skip if we have a pattern and this test doesn't match.
49                 if re != nil && !re.MatchString(name) {
50                         continue
51                 }
52
53                 fmt.Fprintf(os.Stderr, "generating %s... ", name)
54
55                 // Get the test path.
56                 testPath := filepath.Join(genroot, fmt.Sprintf("%s.test", name))
57
58                 // Run generator.
59                 cmd := exec.Command("go", "run", path, testPath)
60                 if out, err := cmd.CombinedOutput(); err != nil {
61                         return fmt.Errorf("running generator %s: %v:\n%s", name, err, out)
62                 }
63                 fmt.Fprintln(os.Stderr)
64         }
65         return nil
66 }