// 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();
  });
}
