| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| // Tests that stack traces from data URIs don't contain the entire URI, and |
| // instead just have the substitute file name: <data:application/dart> |
| |
| import "dart:isolate"; |
| import "package:expect/expect.dart"; |
| import 'dart:async'; |
| |
| void main() { |
| // This data URI encodes: |
| /* |
| import "dart:isolate"; |
| void main(_, p){ |
| try { |
| throw("Hello World"); |
| } catch (e, s) { |
| p.send("$e\n$s"); |
| } |
| } |
| */ |
| final uri = Uri.parse( |
| "data:application/dart;charset=utf8,import%20%22dart%3Aisolate%22%3Bvoi" + |
| "d%20main(_%2Cp)%7Btry%7Bthrow(%22Hello%20World%22)%3B%7Dcatch(e%2C" + |
| "%20s)%7Bp.send(%22%24e%5Cn%24s%22)%3B%7D%7D"); |
| ReceivePort port = new ReceivePort(); |
| Isolate.spawnUri(uri, [], port.sendPort); |
| port.listen((trace) { |
| // Test that the trace contains the exception message. |
| Expect.isTrue(trace.contains("Hello World")); |
| |
| // Test that the trace contains data URI substitute. |
| Expect.isTrue(trace.contains("<data:application/dart>")); |
| |
| // Test that the trace doesn't contain any leftover URL encoded junk. |
| Expect.isFalse(trace.contains("%20")); |
| |
| port.close(); |
| }); |
| } |