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

import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Test;

public class ComputeBlockTryRangeTest extends SmaliTestBase {

  @Test
  public void jumpIntoTryRange() throws CompilationFailedException {

    SmaliBuilder builder = new SmaliBuilder("Test");

    builder.addStaticMethod(
        "void", "main", Arrays.asList("java.lang.String[]"), 2,
        "  sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;",
        "  const v0, 1",
        "  invoke-static {v0}, LTest;->method(I)I",
        "  move-result v0",
        "  invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V",
        "  const v0, 0",
        "  invoke-static {v0}, LTest;->method(I)I",
        "  move-result v0",
        "  invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V",
        "  return-void");

    MethodSignature methodSig = builder.addStaticMethod(
        "int", "method", Collections.singletonList("int"), 1,
        "  const v0, 42",
        "  goto :in_try",
        ":try_start",
        ":dead_code",
        "  const v0, 0",
        ":in_try",
        "  div-int/2addr v0, v1",
        "  return v0",
        ":try_end",
        "  .catch Ljava/io/IOException; {:try_start .. :try_end} :dead_code",
        "  .catch Ljava/lang/Throwable; {:try_start .. :try_end} :return_half",
        ":return_half",
        "  const v1, 2",
        "  goto :in_try"
    );

    AndroidApp originalApplication = buildApplication(builder);
    AndroidApp processedApplication = processApplication(originalApplication);

    DexEncodedMethod method = getMethod(processedApplication, methodSig);
    assert method.getCode().asDexCode().tries.length > 0;
  }
}
