mirror of
				https://github.com/go-delve/delve.git
				synced 2025-10-31 18:57:18 +08:00 
			
		
		
		
	 854552fa00
			
		
	
	854552fa00
	
	
	
		
			
			Change gen-backend_test_health.go so that it only prints the number of tests skipped and not the total or the percentage. As it is it causes too many merge conflicts.
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"go/ast"
 | |
| 	"go/parser"
 | |
| 	"go/token"
 | |
| 	"io"
 | |
| 	"log"
 | |
| 	"os"
 | |
| 	"sort"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	f, err := parser.ParseFile(new(token.FileSet), "pkg/proc/proc_test.go", nil, 0)
 | |
| 	if err != nil {
 | |
| 		log.Fatalf("could not compile proc_test.go: %v", err)
 | |
| 	}
 | |
| 	ntests := 0
 | |
| 	skipped := make(map[string]map[string]int)
 | |
| 	ast.Inspect(f, func(node ast.Node) bool {
 | |
| 		switch node := node.(type) {
 | |
| 		case *ast.File:
 | |
| 			return true
 | |
| 		case *ast.FuncDecl:
 | |
| 			if !strings.HasPrefix(node.Name.Name, "Test") {
 | |
| 				return false
 | |
| 			}
 | |
| 			ntests++
 | |
| 		stmtLoop:
 | |
| 			for _, stmt := range node.Body.List {
 | |
| 				expr, isexpr := stmt.(*ast.ExprStmt)
 | |
| 				if !isexpr {
 | |
| 					continue
 | |
| 				}
 | |
| 				call, ok := expr.X.(*ast.CallExpr)
 | |
| 				if !ok {
 | |
| 					return false
 | |
| 				}
 | |
| 				fun, ok := call.Fun.(*ast.Ident)
 | |
| 				if !ok {
 | |
| 					return false
 | |
| 				}
 | |
| 				switch fun.Name {
 | |
| 				case "skipOn":
 | |
| 					reason, conditions := skipOnArgs(call.Args)
 | |
| 					if reason == "N/A" {
 | |
| 						ntests--
 | |
| 						break stmtLoop
 | |
| 					}
 | |
| 					if skipped[conditions] == nil {
 | |
| 						skipped[conditions] = make(map[string]int)
 | |
| 					}
 | |
| 					skipped[conditions][reason]++
 | |
| 				case "skipUnlessOn":
 | |
| 					ntests--
 | |
| 					break stmtLoop
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		return false
 | |
| 	})
 | |
| 	var fh io.WriteCloser
 | |
| 	if len(os.Args) > 1 && os.Args[1] == "-" {
 | |
| 		fh = os.Stdout
 | |
| 	} else {
 | |
| 		fh, err = os.Create("./Documentation/backend_test_health.md")
 | |
| 		if err != nil {
 | |
| 			log.Fatalf("could not create backend_test_health.md: %v", err)
 | |
| 		}
 | |
| 	}
 | |
| 	fmt.Fprintf(fh, "Tests skipped by each supported backend:\n\n")
 | |
| 	conds := []string{}
 | |
| 	for cond := range skipped {
 | |
| 		conds = append(conds, cond)
 | |
| 	}
 | |
| 	sort.Strings(conds)
 | |
| 	for _, cond := range conds {
 | |
| 		tot := 0
 | |
| 		for _, v := range skipped[cond] {
 | |
| 			tot += v
 | |
| 		}
 | |
| 		fmt.Fprintf(fh, "* %s skipped = %d\n", cond, tot)
 | |
| 		reasons := []string{}
 | |
| 		for reason := range skipped[cond] {
 | |
| 			reasons = append(reasons, reason)
 | |
| 		}
 | |
| 		sort.Strings(reasons)
 | |
| 		for _, reason := range reasons {
 | |
| 			fmt.Fprintf(fh, "\t* %d %s\n", skipped[cond][reason], reason)
 | |
| 		}
 | |
| 	}
 | |
| 	err = fh.Close()
 | |
| 	if err != nil {
 | |
| 		log.Fatalf("could not close output file: %v", err)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func skipOnArgs(args []ast.Expr) (reason string, conditions string) {
 | |
| 	reason, _ = strconv.Unquote(args[1].(*ast.BasicLit).Value)
 | |
| 	conds := []string{}
 | |
| 	for _, arg := range args[2:] {
 | |
| 		cond, _ := strconv.Unquote(arg.(*ast.BasicLit).Value)
 | |
| 		conds = append(conds, cond)
 | |
| 	}
 | |
| 	conditions = strings.Join(conds, "/")
 | |
| 	return reason, conditions
 | |
| }
 |