Skip to content
Closed
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
216c5eb
feat(r8-tests): Add R8 ambiguous tests
romtsn Dec 19, 2025
7ae46d0
Update tests
romtsn Dec 23, 2025
1deef0a
Change expected of test_ambiguous_missing_line_stacktrace
romtsn Dec 23, 2025
558ed43
fix(r8-tests): Correctly handle no-line mappings
romtsn Dec 23, 2025
59a8dd7
Remove import
romtsn Dec 23, 2025
cf3f732
Preserve input lineno when no mapping is available
romtsn Dec 23, 2025
147a43e
feat(r8-tests): Add R8 synthetic tests
romtsn Dec 23, 2025
7800a1f
feat(r8-tests): Add R8 source file tests
romtsn Dec 23, 2025
6989e38
Fix fixtures
romtsn Jan 8, 2026
e40221f
Add MD file explaining failures
romtsn Jan 8, 2026
20a5bee
feat(r8-tests): Add R8 line number handling tests
romtsn Jan 19, 2026
f048b2c
feat(r8-tests): Add R8 exception handling tests
romtsn Jan 19, 2026
3ab9f46
Fix formatting
romtsn Jan 19, 2026
20d7b62
Add MD file explaining failures
romtsn Jan 20, 2026
e44baf3
Merge branch 'master' into rz/feat/r8-tests-synthetic
romtsn Jan 28, 2026
a9125eb
Remove r8-ambiguous.NOTES
romtsn Jan 28, 2026
c2fdcab
Merge branch 'rz/feat/r8-tests-synthetic' into rz/feat/r8-tests-sourc…
romtsn Jan 28, 2026
a045327
fix(r8-tests): Fix no-line original line preservation for source file…
romtsn Jan 28, 2026
365a009
Merge branch 'rz/fix/r8-tests-source-file-no-line' into rz/feat/r8-te…
romtsn Jan 28, 2026
40fc00b
fix(r8-tests): Fix retrace line handling for edge cases
romtsn Jan 29, 2026
764b7f4
fix(r8-tests): Fix no-line original line preservation for source file…
romtsn Jan 29, 2026
a97412f
Drop r8-synthetic
romtsn Jan 29, 2026
462616e
Merge branch 'rz/feat/r8-tests-source-files' into rz/feat/r8-tests-li…
romtsn Jan 30, 2026
7a695ff
Merge branch 'rz/feat/r8-tests-line-number-handling' into rz/fix/r8-t…
romtsn Jan 30, 2026
ca666d2
Merge branch 'master' into rz/feat/r8-tests-line-number-handling
romtsn Jan 30, 2026
ebf7915
Merge branch 'rz/feat/r8-tests-line-number-handling' into rz/fix/r8-t…
romtsn Jan 30, 2026
ade0b4c
Merge branch 'rz/fix/r8-tests-line-number-handling' into rz/feat/r8-t…
romtsn Jan 30, 2026
6e5070b
remove the tests we don't need
romtsn Jan 30, 2026
94d628e
feat(r8-tests): Add R8 method overloading tests
romtsn Jan 19, 2026
24a5ed0
fix(r8-tests): Fix overload lookup to include line-ranged candidates …
romtsn Jan 30, 2026
5aeaf34
feat(r8-tests): Add R8 special formats tests
romtsn Jan 19, 2026
043f673
drop tests we dont need
romtsn Jan 30, 2026
f7004a5
Merge remote-tracking branch 'origin/master' into rz/feat/r8-tests-sp…
romtsn Feb 16, 2026
aba90d1
chore: Remove r8-method-overloading.NOTES.md
romtsn Feb 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions tests/r8-special-formats.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//! Tests for R8 retrace "Special Formats" fixtures.
//!
//! Ported from the upstream R8 retrace fixtures in:
//! - `src/test/java/com/android/tools/r8/retrace/stacktraces/NamedModuleStackTrace.java`
//! - `src/test/java/com/android/tools/r8/retrace/stacktraces/AutoStackTrace.java`
//! - `src/test/java/com/android/tools/r8/retrace/stacktraces/PGStackTrace.java`
//! - `src/test/java/com/android/tools/r8/retrace/stacktraces/LongLineStackTrace.java`
//!
//! Notes:
//! - Fixture mapping indentation is normalized to 4-space member indentation so it is parsed by this
//! crate's Proguard mapping parser.
//! - Expected stacktrace indentation is normalized to this crate's output (`" at ..."`).
#![allow(clippy::unwrap_used)]

use proguard::{ProguardCache, ProguardMapper, ProguardMapping};

fn assert_remap_stacktrace(mapping: &str, input: &str, expected: &str) {
let mapper = ProguardMapper::from(mapping);
let actual = mapper.remap_stacktrace(input).unwrap();
assert_eq!(actual.trim_end(), expected.trim_end());

let mapping = ProguardMapping::new(mapping.as_bytes());
let mut buf = Vec::new();
ProguardCache::write(&mapping, &mut buf).unwrap();
let cache = ProguardCache::parse(&buf).unwrap();
cache.test();

let actual = cache.remap_stacktrace(input).unwrap();
assert_eq!(actual.trim_end(), expected.trim_end());
}

// =============================================================================
// AutoStackTrace
// =============================================================================

const AUTO_STACKTRACE_MAPPING: &str = r#"com.android.tools.r8.AutoTest -> qtr:
46:46:void foo(int):200:200 -> a
17:19:void foo(int,int):23:25 -> a
"#;

#[test]
fn test_auto_stacktrace() {
let input = r#"java.io.IOException: INVALID_SENDER
at qtr.a(:com.google.android.gms@203915081@20.39.15 (060808-335085812):46)
at qtr.a(:com.google.android.gms@203915081@20.39.15 (060808-335085812):18)
"#;

let expected = r#"java.io.IOException: INVALID_SENDER
at com.android.tools.r8.AutoTest.foo(AutoTest.java:200)
at com.android.tools.r8.AutoTest.foo(AutoTest.java:24)
"#;

assert_remap_stacktrace(AUTO_STACKTRACE_MAPPING, input, expected);
}

// =============================================================================
// LongLineStackTrace
// =============================================================================

#[test]
fn test_long_line_stacktrace_passthrough() {
// Upstream fixture has an empty mapping and expects the single long line to be preserved.
// We keep this as a smoke test that we don't crash on very long lines.
let input = r#"asdf():::asfasidfsadfsafassdfsalfkaskldfasjkl908435 439593409 5309 843 5980349085 9043598 04930 5 9084389 549 385 908435098435980 4390 5890435908 4389 0509345890 23904239s909090safasiofas90f0-safads0-fas0-f-0f-0fasdf0-asswioj df jaiowj fioweoji fqiwope fopiwqej fqweiopj fwqejiof qwoepijf eiwoj fqwioepjf wiqeof jqweoifiqu t8324981qu2398 rt3289 rt2489t euhiorjg kdfgf8u432iojt3u8io432jk t3u49t 489u4389u t438u9 t43y89t 3 489t y8934t34 89ytu8943tu8 984u3 t 8u934asdf(:asdfas0dfasd0fa0)S)DFD)SDF_SD)FSDKFJlsalk;dfjaklsdf())(SDFSdfaklsdfas0d9fwe89rio223oi4rwoiuqaoiwqiowpjaklcvewtujoiwrjweof asdfjaswdj foisadj f aswioj df jaiowj fioweoji fqiwope fopiwqej fqweiopj fwqejiof qwoepijf eiwoj fqwioepjf wiqeof jqweoifiqu t8324981qu2398 rt3289 rt2489t euhiorjg kdfgf8u432iojt3u8io432jk t3u49t 489u4389u t438u9 t43y89t 3 489t y8934t34 89ytu8943tu8 984u3 t 8u93asdf(:asdfas0dfasd0fa0)S)DFD)SDF_SD)FSDKFJlsalk;dfjaklsdf())(SDFSdfaklsdfas0d9fwe89rio223oi4rwoiuqaoiwqiowpjaklcvewtujoiwrjweof asdfjaswdj foisadj f aswioj df jaiowj fioweoji fqiwope fopiwqej fqweiopj fwqejiof qwoepijf eiwoj fqwioepjf wiqeof jqweoifiqu t8324981qu2398 rt3289 rt2489t euhiorjg kdfgf8u432iojt3u8io432jk t3u49t 489u4389u t438u9 t43y89t 3 489t y8934t34 89ytu8943tu8 984u3 t 8u9344asdf(:asdfas0dfasd0fa0)S)DFD)SDF_SD)FSDKFJlsalk;dfjaklsdf())(SDFSdfaklsdfas0d9fwe89rio223oi4rwoiuqaoiwqiowpjaklcvewtujoiwrjweof asdfjaswdj foisadj f aswioj df jaiowj fioweoji fqiwope fopiwqej fqweiopj fwqejiof qwoepijf eiwoj fqwioepjf wiqeof jqweoifiqu t8324981qu2398 rt3289 rt2489t euhiorjg kdfgfasdfsdf123asdfas9dfas09df9a090asdasdfasfasdf290909009fw90wf9w0f9e09w0f90w
"#;

let expected = input;
assert_remap_stacktrace("", input, expected);
}
Loading