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

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.retrace.ProguardMapProducer;
import com.android.tools.r8.retrace.RetraceSourceFileResult;
import com.android.tools.r8.retrace.Retracer;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Parameterized.class)
public class RetraceApiInferSourceFileTest extends RetraceApiTestBase {

  public RetraceApiInferSourceFileTest(TestParameters parameters) {
    super(parameters);
  }

  @Override
  protected Class<? extends RetraceApiBinaryTest> binaryTestClass() {
    return ApiTest.class;
  }

  public static class ApiTest implements RetraceApiBinaryTest {

    private final String mapping =
        "some.Class -> a:\n"
            + "  1:3:int strawberry(int):99:101 -> s\n"
            + "  4:5:int mango(float):121:122 -> s";

    @Test
    public void testRetracingSourceFile() {
      List<RetraceSourceFileResult> sourceFileResults = new ArrayList<>();
      Retracer.createDefault(ProguardMapProducer.fromString(mapping), new DiagnosticsHandler() {})
          .retraceClass(Reference.classFromTypeName("a"))
          .forEach(clazz -> sourceFileResults.add(clazz.getSourceFile()));
      assertEquals(1, sourceFileResults.size());
      assertFalse(sourceFileResults.get(0).hasRetraceResult());
    }
  }
}
