[tint] Minor fix to better support fix-tests with more than one string
Bug: 407736996
Change-Id: Icdd4619dc02c4cb48a40a60f459e827e38842dc1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/234634
Commit-Queue: Peter McNeeley <petermcneeley@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/tools/src/cmd/fix-tests/main.go b/tools/src/cmd/fix-tests/main.go
index 6647585..f5ea3f2 100644
--- a/tools/src/cmd/fix-tests/main.go
+++ b/tools/src/cmd/fix-tests/main.go
@@ -252,7 +252,6 @@
var file string
var fix func(testSource string) (string, error)
if parts := reExpectEq.FindStringSubmatch(failure); len(parts) == 5 {
- // EXPECT_EQ(a, b)
a, b := unescape(parts[3]), unescape(parts[4])
file = parts[1]
fix = func(testSource string) (string, error) {
@@ -267,24 +266,33 @@
mr_a_esc := longestSubstringMatch(a_esc, testSource)
mr_b_esc := longestSubstringMatch(b_esc, testSource)
- is_largest := func(mr MatchRange) bool {
+ // Perfect matches are prioritized for the cases where there may be more than matchable string in test function.
+ // This is common in tint where there is both the 'src' and 'expect' strings of non-failing transform test.
+ var a_perfect = len(a) == Size(mr_a)
+ var b_perfect = len(b) == Size(mr_b)
+ var a_esc_perfect = len(a_esc) == Size(mr_a_esc)
+ var b_esc_perfect = len(b_esc) == Size(mr_b_esc)
+ var has_perfect = a_perfect || b_perfect || a_esc_perfect || b_esc_perfect
+
+ use_largest := func(mr MatchRange) bool {
return Size(mr) >= Size(mr_a) && Size(mr) >= Size(mr_b) &&
- Size(mr) >= Size(mr_a_esc) && Size(mr) >= Size(mr_b_esc)
+ Size(mr) >= Size(mr_a_esc) && Size(mr) >= Size(mr_b_esc) && !has_perfect
}
+
// assumed mr_b_esc is best match
expected_str := b_esc
replace_str := a_esc
mr_largest := mr_b_esc
- if is_largest(mr_a) {
+ if use_largest(mr_a) || a_perfect {
expected_str = a
replace_str = b
mr_largest = mr_a
- } else if is_largest(mr_b) {
+ } else if use_largest(mr_b) || b_perfect {
expected_str = b
replace_str = a
mr_largest = mr_b
- } else if is_largest(mr_a_esc) {
+ } else if use_largest(mr_a_esc) || a_esc_perfect {
expected_str = a_esc
replace_str = b_esc
mr_largest = mr_a_esc