// Copyright (c) 2021, the R8 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.

package com.android.tools.r8.retrace.stacktraces;

import com.android.tools.r8.utils.StringUtils;
import java.util.Arrays;
import java.util.List;

public class InlineInOutlineStackTrace implements StackTraceForTest {

  @Override
  public List<String> obfuscatedStackTrace() {
    return Arrays.asList("java.io.IOException: INVALID_SENDER", "\tat a.a(:2)", "\tat b.s(:27)");
  }

  @Override
  public String mapping() {
    return StringUtils.lines(
        "# { id: 'com.android.tools.r8.mapping', version: '2.0' }",
        "outline.Class -> a:",
        "  1:2:int some.inlinee():75:76 -> a",
        "  1:2:int outline():0 -> a",
        "# { 'id':'com.android.tools.r8.outline' }",
        "some.Class -> b:",
        "  1:1:void foo.bar.Baz.qux():42:42 -> s",
        "  5:5:int foo.bar.baz.outlineCaller(int):98:98 -> s",
        "  5:5:int outlineCaller(int):24 -> s",
        "  27:27:int outlineCaller(int):0:0 -> s",
        "# { 'id':'com.android.tools.r8.outlineCallsite', 'positions': { '1': 4, '2': 5 } }");
  }

  @Override
  public List<String> retracedStackTrace() {
    return Arrays.asList(
        "java.io.IOException: INVALID_SENDER",
        "\tat some.inlinee(some.java:76)",
        "\tat foo.bar.baz.outlineCaller(baz.java:98)",
        "\tat some.Class.outlineCaller(Class.java:24)");
  }

  @Override
  public List<String> retraceVerboseStackTrace() {
    return Arrays.asList(
        "java.io.IOException: INVALID_SENDER",
        "\tat some.int inlinee()(some.java:76)",
        "\tat foo.bar.baz.int outlineCaller(int)(baz.java:98)",
        "\tat some.Class.int outlineCaller(int)(Class.java:24)");
  }

  @Override
  public int expectedWarnings() {
    return 0;
  }
}
