blob: 00e8d8f5bb4534ab56c3eae9b58f2fd6c6364c2d [file] [log] [blame]
// 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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.dex.code.DexConstString;
import com.android.tools.r8.dex.code.DexInvokeVirtual;
import com.android.tools.r8.dex.code.DexReturnVoid;
import com.android.tools.r8.dex.code.DexSgetObject;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.StringUtils;
import org.junit.Test;
public class RunArtSmokeTest extends SmaliTestBase {
@Test
public void test() throws Exception {
// Build simple "Hello, world!" application.
SmaliBuilder builder = new SmaliBuilder(DEFAULT_CLASS_NAME);
MethodSignature mainSignature = builder.addMainMethod(
2,
" sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;",
" const-string v1, \"Hello, world!\"",
" invoke-virtual { v0, v1 }, Ljava/io/PrintStream;->println(Ljava/lang/String;)V",
" return-void"
);
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
assertEquals(1, getNumberOfProgramClasses(processedApplication));
// Return the processed method for inspection.
DexEncodedMethod main = getMethod(processedApplication, mainSignature);
assertNotNull(main);
DexCode code = main.getCode().asDexCode();
assertTrue(code.instructions[0] instanceof DexSgetObject);
assertTrue(code.instructions[1] instanceof DexConstString);
assertTrue(code.instructions[2] instanceof DexInvokeVirtual);
assertTrue(code.instructions[3] instanceof DexReturnVoid);
// Run the generated code in Art.
String result = runArt(processedApplication);
assertEquals(StringUtils.lines("Hello, world!"), result);
}
}