| // 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.jasmin; |
| |
| |
| import com.android.tools.r8.ToolHelper; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.Collections; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.Parameterized; |
| import org.junit.runners.Parameterized.Parameters; |
| |
| @RunWith(Parameterized.class) |
| public class InvalidClassNames extends NameTestBase { |
| |
| private static final String RESULT = "MAIN"; |
| private static final String MAIN_CLASS = "Main"; |
| |
| @Parameters(name = "\"{0}\", jvm: {1}, art: {2}") |
| public static Collection<Object[]> data() { |
| Collection<Object[]> data = new ArrayList<>(); |
| data.addAll(NameTestBase.getCommonNameTestData(true)); |
| data.addAll( |
| Arrays.asList( |
| new Object[][] { |
| {new TestString("a/b/c/a/D/"), true, false}, |
| { |
| new TestString("a<b"), |
| !ToolHelper.isWindows() && !ToolHelper.isJava9Runtime(), |
| false |
| }, |
| { |
| new TestString("a>b"), |
| !ToolHelper.isWindows() && !ToolHelper.isJava9Runtime(), |
| false |
| }, |
| { |
| new TestString("<a>b"), |
| !ToolHelper.isWindows() && !ToolHelper.isJava9Runtime(), |
| false |
| }, |
| { |
| new TestString("<a>"), |
| !ToolHelper.isWindows() && !ToolHelper.isJava9Runtime(), |
| false |
| } |
| })); |
| return data; |
| } |
| |
| private String name; |
| private boolean validForJVM; |
| private boolean validForArt; |
| |
| public InvalidClassNames(TestString name, boolean validForJVM, boolean validForArt) { |
| this.name = name.getValue(); |
| this.validForJVM = validForJVM; |
| this.validForArt = validForArt; |
| } |
| |
| private JasminBuilder createJasminBuilder() { |
| JasminBuilder builder = new JasminBuilder(); |
| JasminBuilder.ClassBuilder clazz = builder.addClass(name); |
| clazz.addStaticMethod( |
| "run", |
| Collections.emptyList(), |
| "V", |
| ".limit stack 2", |
| ".limit locals 0", |
| " getstatic java/lang/System/out Ljava/io/PrintStream;", |
| " ldc \"" + RESULT + "\"", |
| " invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V", |
| " return"); |
| |
| clazz = builder.addClass(MAIN_CLASS); |
| clazz.addMainMethod( |
| ".limit stack 0", ".limit locals 1", "invokestatic " + name + "/run()V", " return"); |
| |
| return builder; |
| } |
| |
| @Test |
| public void invalidClassName() throws Exception { |
| runNameTesting(validForJVM, createJasminBuilder(), MAIN_CLASS, RESULT, validForArt, name); |
| } |
| } |