func parseAndTestFile(t *testing.T, filename string) { parser.FixFloatingComments(filename) d, err := parser.ParseFile(filename, "./") if err != nil { t.Error(err) os.Exit(1) } else { header := parser.ReadFileHeader(filename) formattedFile := d.Fmt(filename) formattedFile = strings.TrimSpace(formattedFile) if len(header) != 0 { formattedFile = header + formattedFile } // Test if formatted file can be parsed fo, err := os.Create("tempOutput.proto") if err != nil { t.Error(err) } defer os.Remove("tempOutput.proto") if len(formattedFile) > 0 { fo.WriteString(formattedFile) } fo.Close() _, err2 := parser.ParseFile("tempOutput.proto", "./", "../../../") if err2 != nil { t.Error(err2) } // Test if formatted string is equal to the Gold standard goldString, err := ioutil.ReadFile(strings.Split(filename, ".")[0] + "_Gold." + strings.Split(filename, ".")[1]) if err != nil { t.Error(err) } if parser.Strcmp(formattedFile, strings.TrimSpace(string(goldString))) != 0 { t.Error("Failed the gold standard with: " + fmt.Sprintf("%v", parser.Strcmp(formattedFile, strings.TrimSpace(string(goldString))))) } return } }
func fmtFn() filepath.WalkFunc { return func(pathThusFar string, f os.FileInfo, err error) error { if strings.HasSuffix(filepath.Dir(pathThusFar), f.Name()) { return nil } if f.IsDir() && !strings.HasSuffix(pathThusFar, string(os.PathSeparator)) { pathThusFar += string(os.PathSeparator) } if f.IsDir() { if *recurs && !stringInSlice(pathThusFar, excluded) { return nil } else { return filepath.SkipDir } } else if f.Mode().IsRegular() && strings.HasSuffix(f.Name(), ".proto") { parser.FixFloatingComments(pathThusFar) d, err := parser.ParseFile(pathThusFar, filepath.Dir(pathThusFar), *imp_path) if err != nil { fmt.Println("Parsing error in " + pathThusFar + "!") return err } else { header := parser.ReadFileHeader(pathThusFar) formattedFile := d.Fmt(f.Name()) formattedFile = strings.TrimSpace(formattedFile) if len(header) != 0 { formattedFile = header + "\n" + formattedFile } fo, _ := os.Create(pathThusFar) fo.WriteString(formattedFile) fo.Close() fmt.Println("Successfully Formatted " + pathThusFar) return nil } } else { return errors.New(f.Name() + " cannot be processed.") } } }