| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // See also test_async_utils.dart which has some stack manipulation code. |
| |
| /// Report call site for `expect()` call. Returns the number of frames that |
| /// should be elided if a stack were to be modified to hide the expect call, or |
| /// zero if no such call was found. |
| /// |
| /// If the head of the stack trace consists of a failure as a result of calling |
| /// the test_widgets [expect] function, this will fill the given StringBuffer |
| /// with the precise file and line number that called that function. |
| int reportExpectCall(StackTrace stack, StringBuffer information) { |
| final RegExp line0 = new RegExp(r'^#0 +fail \(.+\)$'); |
| final RegExp line1 = new RegExp(r'^#1 +_expect \(.+\)$'); |
| final RegExp line2 = new RegExp(r'^#2 +expect \(.+\)$'); |
| final RegExp line3 = new RegExp(r'^#3 +expect \(.+\)$'); |
| final RegExp line4 = new RegExp(r'^#4 +[^(]+ \((.+?):([0-9]+)(?::[0-9]+)?\)$'); |
| final List<String> stackLines = stack.toString().split('\n'); |
| if (line0.firstMatch(stackLines[0]) != null && |
| line1.firstMatch(stackLines[1]) != null && |
| line2.firstMatch(stackLines[2]) != null && |
| line3.firstMatch(stackLines[3]) != null |
| ) { |
| final Match expectMatch = line4.firstMatch(stackLines[4]); |
| assert(expectMatch != null); |
| assert(expectMatch.groupCount == 2); |
| information.writeln('This was caught by the test expectation on the following line:'); |
| information.writeln(' ${expectMatch.group(1)} line ${expectMatch.group(2)}'); |
| return 4; |
| } |
| return 0; |
| } |