| // Copyright (c) 2019, 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.naming; | |
| import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage; | |
| import static com.android.tools.r8.DiagnosticsMatcher.diagnosticPosition; | |
| import static com.android.tools.r8.DiagnosticsMatcher.diagnosticType; | |
| import static com.android.tools.r8.PositionMatcher.positionLine; | |
| import static junit.framework.TestCase.assertNotNull; | |
| import static org.hamcrest.CoreMatchers.allOf; | |
| import static org.hamcrest.core.StringContains.containsString; | |
| import com.android.tools.r8.TestBase; | |
| import com.android.tools.r8.TestDiagnosticMessagesImpl; | |
| import com.android.tools.r8.TestParameters; | |
| import com.android.tools.r8.TestParametersCollection; | |
| import com.android.tools.r8.naming.mappinginformation.MappingInformationDiagnostics; | |
| import com.android.tools.r8.utils.Reporter; | |
| import com.android.tools.r8.utils.StringUtils; | |
| import com.google.common.collect.ImmutableList; | |
| import java.io.IOException; | |
| 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 ProguardMapReaderArgumentsTest extends TestBase { | |
| @Parameters(name = "{0}") | |
| public static TestParametersCollection data() { | |
| return getTestParameters().withNoneRuntime().build(); | |
| } | |
| public ProguardMapReaderArgumentsTest(TestParameters parameters) { | |
| parameters.assertNoneRuntime(); | |
| } | |
| @Test | |
| public void testMethodCanParseMemberComments() throws IOException { | |
| TestDiagnosticMessagesImpl testDiagnosticMessages = new TestDiagnosticMessagesImpl(); | |
| Reporter reporter = new Reporter(testDiagnosticMessages); | |
| String mapWithArgumentRemovalInformation = | |
| StringUtils.join( | |
| "\n", | |
| "android.constraint.Placeholder -> a.b.b.f:", | |
| "# Just a comment", // Regular comment | |
| " int mContentId -> b", | |
| "# {}", // Valid JSON with no information | |
| " 147:161:void updatePreLayout(android.constraint.Layout) -> a", | |
| "# {foo:bar}}}", // Not valid JSON | |
| " 194:204:void updatePostMeasure(android.constraint.Layout) -> b", | |
| "# { 'id': 'bar' }", // Valid json but no handler for bar. | |
| " 194:204:void updatePostMeasure(android.constraint.Layout) -> c"); | |
| ClassNameMapper cnm = | |
| ClassNameMapper.mapperFromString(mapWithArgumentRemovalInformation, reporter); | |
| ClassNamingForNameMapper classNaming = cnm.getClassNaming("a.b.b.f"); | |
| assertNotNull(classNaming); | |
| testDiagnosticMessages.assertOnlyInfos(); | |
| testDiagnosticMessages | |
| .assertInfosMatch( | |
| ImmutableList.of( | |
| allOf( | |
| diagnosticMessage(containsString("Could not locate 'id'")), | |
| diagnosticPosition(positionLine(4))), | |
| allOf( | |
| diagnosticMessage(containsString("Not valid JSON")), | |
| diagnosticPosition(positionLine(6))), | |
| allOf( | |
| diagnosticMessage(containsString("Could not find a handler for bar")), | |
| diagnosticPosition(positionLine(8))))) | |
| .assertAllInfosMatch(diagnosticType(MappingInformationDiagnostics.class)); | |
| } | |
| } |