blob: 23f8605fe93bec85d1f29aef4fecfa0ac22ff109 [file] [log] [blame]
// Copyright (c) 2021, 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 org.junit.Assert.assertTrue;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapChecker;
import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapChecker.VerifyMappingFileHashResult;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class MappingFileHashTest extends TestBase {
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
return getTestParameters().withNoneRuntime().build();
}
public MappingFileHashTest(TestParameters parameters) {
parameters.assertNoneRuntime();
}
@Test
public void testUnixLineEnd() throws Exception {
String newline = "\n";
// Hash as given by sha256 command on the content using unix-style newlines.
String hash = "539a6b5614c65c7473a995507163a4559cea3229d3cada164a2ca4935bbbd597";
verifyHash(newline, hash);
}
@Test
public void testWindowsLineEnd() throws Exception {
// R8 will only use \n in mapping files, but if a file is written using dos-style newlines,
// those newlines will be part of the content hashing. This is a regression test that the file
// will compute the right hash in such cases.
String newline = "\r\n";
// Hash as given by sha256 command on the content using dos-style newlines.
String hash = "6ef47f7b9b6d5013628073ebdadad27dd2e7e57ef911e9d6cbee0f92c434e48a";
verifyHash(newline, hash);
}
private void verifyHash(String newline, String hash) throws Exception {
// Some header info. This should never affect the hash.
String header =
String.join(
newline,
"# compiler: R8",
"", // Empty header line.
"# junk header info: " + System.nanoTime(),
"# pg_map_hash: SHA-256 " + hash);
// Actually hashed content (modulo newlines).
String hashed =
String.join(
newline,
"triviæl.Triviål -> a.œ:",
" void main(java.lang.String[]) -> a",
"" // Always end with newline.
);
String content = String.join(newline, header, hashed);
VerifyMappingFileHashResult result = ProguardMapChecker.validateProguardMapHash(content);
assertTrue(result.isOk());
}
}