|  | // 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.utils; | 
|  |  | 
|  | import static org.junit.Assert.assertEquals; | 
|  |  | 
|  | import com.android.tools.r8.ToolHelper; | 
|  | import com.android.tools.r8.ToolHelper.ArtCommandBuilder; | 
|  | import com.android.tools.r8.ToolHelper.DexVm; | 
|  | import com.android.tools.r8.ToolHelper.DexVm.Kind; | 
|  | import org.junit.Assert; | 
|  | import org.junit.Assume; | 
|  | import org.junit.Before; | 
|  | import org.junit.Test; | 
|  |  | 
|  | public class ArtCommandBuilderTest { | 
|  |  | 
|  | private static final String SCRIPT = | 
|  | System.getProperty("os.name").startsWith("Linux") ? "/bin/bash " : "tools/docker/run.sh "; | 
|  |  | 
|  | @Before | 
|  | public void setUp() { | 
|  | Assume.assumeTrue(ToolHelper.artSupported()); | 
|  | Assume.assumeTrue(ToolHelper.getDexVm().getKind() == Kind.HOST); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void noArguments() { | 
|  | ArtCommandBuilder builder = new ArtCommandBuilder(); | 
|  | Assert.assertEquals(SCRIPT + ToolHelper.getArtBinary(), builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void simple() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder.appendClasspath("xxx.dex").setMainClass("Test"); | 
|  | assertEquals(SCRIPT + ToolHelper.getArtBinary() + " -cp xxx.dex Test", builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void classpath() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder.appendClasspath("xxx.dex").appendClasspath("yyy.jar"); | 
|  | assertEquals(SCRIPT + ToolHelper.getArtBinary() + " -cp xxx.dex:yyy.jar", | 
|  | builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void artOptions() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder.appendArtOption("-d").appendArtOption("--test"); | 
|  | assertEquals(SCRIPT + ToolHelper.getArtBinary() + " -d --test", builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void artSystemProperties() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder.appendArtSystemProperty("a.b.c", "1").appendArtSystemProperty("x.y.z", "2"); | 
|  | assertEquals(SCRIPT + ToolHelper.getArtBinary() + " -Da.b.c=1 -Dx.y.z=2", | 
|  | builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void programOptions() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder.setMainClass("Test").appendProgramArgument("hello").appendProgramArgument("world"); | 
|  | assertEquals(SCRIPT + ToolHelper.getArtBinary() + " Test hello world", builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void allOfTheAbove() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder | 
|  | .appendArtOption("-d") | 
|  | .appendArtOption("--test") | 
|  | .appendArtSystemProperty("a.b.c", "1") | 
|  | .appendArtSystemProperty("x.y.z", "2") | 
|  | .appendClasspath("xxx.dex") | 
|  | .appendClasspath("yyy.jar") | 
|  | .setMainClass("Test") | 
|  | .appendProgramArgument("hello") | 
|  | .appendProgramArgument("world"); | 
|  | assertEquals( | 
|  | SCRIPT + ToolHelper.getArtBinary() | 
|  | + " -d --test -Da.b.c=1 -Dx.y.z=2 -cp xxx.dex:yyy.jar Test hello world", | 
|  | builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void allOfTheAboveWithClasspathAndSystemPropertiesBeforeOptions() { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(); | 
|  | builder | 
|  | .appendClasspath("xxx.dex") | 
|  | .appendClasspath("yyy.jar") | 
|  | .appendArtSystemProperty("a.b.c", "1") | 
|  | .appendArtSystemProperty("x.y.z", "2") | 
|  | .appendArtOption("-d") | 
|  | .appendArtOption("--test") | 
|  | .setMainClass("Test") | 
|  | .appendProgramArgument("hello") | 
|  | .appendProgramArgument("world"); | 
|  | assertEquals( | 
|  | SCRIPT + ToolHelper.getArtBinary() | 
|  | + " -d --test -Da.b.c=1 -Dx.y.z=2 -cp xxx.dex:yyy.jar Test hello world", | 
|  | builder.build()); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void testVersion() { | 
|  | for (DexVm version : ToolHelper.getArtVersions()) { | 
|  | ToolHelper.ArtCommandBuilder builder = new ToolHelper.ArtCommandBuilder(version); | 
|  | builder.setMainClass("Test").appendProgramArgument("hello").appendProgramArgument("world"); | 
|  | assertEquals(SCRIPT + ToolHelper.getArtBinary(version) | 
|  | + " Test hello world", builder.build()); | 
|  | } | 
|  | } | 
|  | } |