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

import com.android.tools.r8.OutputMode;
import com.android.tools.r8.utils.AndroidApp;
import java.nio.file.Path;
import java.util.Collections;
import org.junit.rules.TemporaryFolder;

// Shared test configuration for D8 compiled resources from the "debugTestResources" target.
public class D8DebugTestResourcesConfig extends D8DebugTestConfig {

  private static AndroidApp compiledResources = null;

  private static synchronized AndroidApp getCompiledResources() {
    if (compiledResources == null) {
      compiledResources = d8Compile(Collections.singletonList(DebugTestBase.DEBUGGEE_JAR), null);
    }
    return compiledResources;
  }

  public D8DebugTestResourcesConfig(TemporaryFolder temp) {
    try {
      Path path = temp.newFolder().toPath().resolve("d8_debug_test_resources.jar");
      getCompiledResources().writeForTesting(path, OutputMode.DexIndexed);
      addPaths(path);
    } catch (Throwable e) {
      throw new RuntimeException(e);
    }
  }
}
