// Copyright (c) 2015, 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

import "dart:convert" show LineSplitter;

import "package:expect/expect.dart";

void main() {
  var st0;
  var st1;
  // Primitive way to get stack trace,.
  try {
    throw 0;
  } catch (_, s) {
    st0 = s;
  }
  st1 = StackTrace.current;

  var st0s = findMain(st0);
  var st1s = findMain(st1);
  // Stack traces are not equal (contains at least a different line number,
  // and possible different frame numbers).
  // They are *similar*, so check that they agree on everything but numbers.
  var digits = new RegExp(r"\d+");
  Expect.equals(st0s.replaceAll(digits, "0"), st1s.replaceAll(digits, "0"));
}

String findMain(StackTrace stack) {
  var string = "$stack";
  var lines = LineSplitter.split(string).toList();
  while (lines.isNotEmpty && !lines.first.contains("main")) {
    lines.removeAt(0);
  }
  return lines.join("\n");
}
