Skip to content

Commit 66cb2b1

Browse files
committed
Relax check file match with stack trace
1 parent d0b85f1 commit 66cb2b1

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

compiler/test/dotty/tools/vulpix/FileDiff.scala

+14-11
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,21 @@ object FileDiff {
3535
else None
3636
}
3737

38-
def matches(actual: String, expect: String): Boolean = {
39-
val actual1 = actual.stripLineEnd
40-
val expect1 = expect.stripLineEnd
38+
def matches(actual: String, expect: String): Boolean =
39+
val actual1 = actual.stripLineEnd
40+
val expect1 = expect.stripLineEnd
41+
// handle check file path mismatch on windows
42+
def matchesWindowsPath = File.separatorChar == '\\' && actual1.replace('\\', '/') == expect1
43+
// obscure line numbers in frames of stack trace output
44+
def obscureFrameLine(s: String): Option[String] =
45+
//at scala.quoted.runtime.impl.QuotesImpl$reflect$ClassDef$.module(QuotesImpl.scala:257)
46+
val frame = """\s+at [^(]+\([^:]+:(\d+)\)""".r
47+
frame.findFirstMatchIn(s).map(m => s"${m.before(1)}_${m.after(1)}")
48+
def matchesStackFrame =
49+
actual1.endsWith(")") && expect1.endsWith(")") && obscureFrameLine(actual1) == obscureFrameLine(expect1)
50+
actual1 == expect1 || matchesStackFrame || matchesWindowsPath
4151

42-
// handle check file path mismatch on windows
43-
actual1 == expect1 || File.separatorChar == '\\' && actual1.replace('\\', '/') == expect1
44-
}
45-
46-
def matches(actual: Seq[String], expect: Seq[String]): Boolean = {
47-
actual.length == expect.length
48-
&& actual.lazyZip(expect).forall(matches)
49-
}
52+
def matches(actual: Seq[String], expect: Seq[String]): Boolean = actual.corresponds(expect)(matches)
5053

5154
def dump(path: String, content: Seq[String]): Unit = {
5255
val outFile = dotty.tools.io.File(path)

0 commit comments

Comments
 (0)