// 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.

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