// 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() throws Throwable {
    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().write(path, OutputMode.DexIndexed);
      addPaths(path);
    } catch (Throwable e) {
      throw new RuntimeException(e);
    }
  }
}
