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

// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf_obfuscate.so --obfuscate

import 'dart:io';

import 'package:expect/config.dart';
import 'package:native_stack_traces/native_stack_traces.dart';
import 'package:path/path.dart' as path;

import 'dwarf_stack_trace_test.dart' as base;

@pragma("vm:prefer-inline")
bar() {
  // Keep the 'throw' and its argument on separate lines.
  throw // force linebreak with dart format
  "Hello, Dwarf!";
}

@pragma("vm:never-inline")
foo() {
  bar();
}

Future<void> main() async {
  String rawStack = "";
  try {
    foo();
  } catch (e, st) {
    rawStack = st.toString();
  }

  if (!isVmAotConfiguration) {
    return; // Not running from an AOT compiled snapshot.
  }

  if (Platform.isAndroid) {
    return; // Generated dwarf.so not available on the test device.
  }

  final dwarf = Dwarf.fromFile(
    path.join(
      Platform.environment['TEST_COMPILATION_DIR']!,
      "dwarf_obfuscate.so",
    ),
  )!;

  await base.checkStackTrace(rawStack, dwarf, expectedCallsInfo);
}

final expectedCallsInfo = <List<DartCallInfo>>[
  // The first frame should correspond to the throw in bar, which was inlined
  // into foo (so we'll get information for two calls for that PC address).
  [
    DartCallInfo(
      function: "bar",
      filename: "dwarf_stack_trace_obfuscate_test.dart",
      line: 18,
      column: 3,
      inlined: true,
    ),
    DartCallInfo(
      function: "foo",
      filename: "dwarf_stack_trace_obfuscate_test.dart",
      line: 24,
      column: 3,
      inlined: false,
    ),
  ],
  // The second frame corresponds to call to foo in main.
  [
    DartCallInfo(
      function: "main",
      filename: "dwarf_stack_trace_obfuscate_test.dart",
      line: 30,
      column: 5,
      inlined: false,
    ),
  ],
  // Don't assume anything about any of the frames below the call to foo
  // in main, as this makes the test too brittle.
];
