| // |
| // Copyright (C) 2021 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // Integration test for the R8 retracing tool. |
| |
| // The retracing tool is a developer tool and part of the build tools. |
| // The following tests are structured so that the app and retrace tool |
| // are invoked exactly as a normal build would. The check that they |
| // produce the correct result is then postponed to a test so that a |
| // retrace tool failure will not result in a build failure. |
| |
| // Rule to dexdump the content of a sample app. |
| // The dexdump is used to simulate a raw stack trace from the app. |
| genrule { |
| name: "r8retrace-dexdump-sample-app", |
| out: ["dexdump.txt"], |
| srcs: [":HelloActivityWithR8"], |
| tools: ["dexdump", "extractmarker"], |
| cmd: "$(location extractmarker) $(in) > $(out)" |
| + " && $(location dexdump) -d $(in) >> $(out)", |
| } |
| |
| // Tool and rule to create the raw stack trace from a dexdump. |
| java_binary_host { |
| name: "r8retrace-create-stacktrace-tool", |
| main_class: "com.android.tools.r8.CreateStacktraceFromDexDumpTool", |
| srcs: ["src/com/android/tools/r8/CreateStacktraceFromDexDumpTool.java"], |
| } |
| |
| genrule { |
| name: "r8retrace-create-stacktrace", |
| out: ["stacktrace.txt"], |
| srcs: [":r8retrace-dexdump-sample-app"], |
| tools: ["r8retrace-create-stacktrace-tool"], |
| cmd: "$(location r8retrace-create-stacktrace-tool) $(in) $(out)", |
| } |
| |
| // Run retrace on the stack trace to produce a retraced stack trace. |
| genrule { |
| name: "r8retrace-run-retrace", |
| out: ["retraced-stacktrace.txt"], |
| srcs: [":r8retrace-create-stacktrace", ":HelloActivityWithR8{.proguard_map}"], |
| tools: ["retrace"], |
| cmd: "$(location retrace)" |
| + " --map-search-path $(location :HelloActivityWithR8{.proguard_map})" |
| + " $(location :r8retrace-create-stacktrace)" |
| + " > $(out)", |
| } |
| |
| // Test checks that the raw and retraced stack traces are as expected. |
| // All the output files are added as resources here so that, in case of failure, their content |
| // can be included in the error message. |
| java_test_host { |
| name: "r8retrace-check-retraced-stacktrace", |
| test_suites: ["general-tests"], |
| srcs: ["src/com/android/tools/r8/CheckRetracedStacktraceTest.java"], |
| static_libs: ["junit"], |
| java_resources: [ |
| ":r8retrace-dexdump-sample-app", |
| ":HelloActivityWithR8{.proguard_map}", |
| ":r8retrace-create-stacktrace", |
| ":r8retrace-run-retrace", |
| ], |
| } |