in pkg/dubboctl/internal/util/golden.go [47:117]
func TestYAMLEqual(golden, result string) (bool, string, error) {
golden = ApplyFilters(golden, LicenseFilter, SpaceLineFilter)
result = ApplyFilters(result, LicenseFilter, SpaceLineFilter)
// do not use FormatterFilter here because we need to know whether manifest could be formatted
var err error
golden, err = formatTestYAML(golden)
if err != nil {
return false, "", fmt.Errorf("golden file format err: %s", err)
}
result, err = formatTestYAML(result)
if err != nil {
return false, "", fmt.Errorf("result file format err: %s", err)
}
var diffBuilder strings.Builder
var diffFlag bool
var line int
scannerG := bufio.NewScanner(strings.NewReader(strings.TrimSpace(golden)))
scannerR := bufio.NewScanner(strings.NewReader(strings.TrimSpace(result)))
for scannerG.Scan() && scannerR.Scan() {
line += 1
lineG := scannerG.Text()
lineR := scannerR.Text()
// judge whether lineG and lindR are the same. if not, add this diff line to diffBuilder.
if !isTestYAMLLineEqual(lineG, lineR) {
diffFlag = true
diffBuilder.WriteString(
fmt.Sprintf("line %d diff:\n--golden--\n%s\n--result--\n%s\n", line, lineG, lineR),
)
}
}
// additional lines processing
// [lineStart, lineEnd] represents additional lines
// scan golden ends.
if len(scannerG.Text()) == 0 {
var addBuilder strings.Builder
lineStart, lineEnd := line+1, line
for scannerR.Scan() {
lineEnd += 1
addBuilder.WriteString(scannerR.Text() + "\n")
}
// length of result is equal to length of golden
if lineStart > lineEnd {
// result is equal to golden
if !diffFlag {
return true, "", nil
}
return false, diffBuilder.String(), nil
}
// result is longer than golden, we add these additional lines to diffBuilder
diffBuilder.WriteString(
fmt.Sprintf("line %d to %d:\n--result addition--\n%s", lineStart, lineEnd, addBuilder.String()),
)
return false, diffBuilder.String(), nil
}
// scan result ends, we know that golden is longer than result.
// due to scannerG.Scan has been invoked before, we add the first additional line.
var addBuilder strings.Builder
lineStart, lineEnd := line+1, line+1
addBuilder.WriteString(scannerG.Text() + "\n")
for scannerG.Scan() {
lineEnd += 1
addBuilder.WriteString(scannerG.Text() + "\n")
}
diffBuilder.WriteString(
fmt.Sprintf("line %d to %d:\n--golden addition--\n%s", lineStart, lineEnd, addBuilder.String()),
)
return false, diffBuilder.String(), nil
}