Skip to content
Merged
Changes from all commits
Commits
Show all changes
29 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
caeb630
Merge remote-tracking branch 'origin/master' into rz/feat/r8-tests-ex…
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
98 changes: 98 additions & 0 deletions tests/r8-exception-handling.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
//! Tests for R8 retrace "Exception Handling" fixtures.
//!
//! Ported from the upstream R8 retrace fixtures in:
//! `src/test/java/com/android/tools/r8/retrace/stacktraces/`.
//!
//! 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 ..."`).
//! - These tests intentionally do **not** assert on R8 warning counts; this crate currently does not
//! surface equivalent diagnostics.
#![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());
}

// =============================================================================
// ObfucatedExceptionClassStackTrace
// =============================================================================

const OBFUSCATED_EXCEPTION_CLASS_MAPPING: &str = r#"foo.bar.baz -> a.b.c:
"#;

#[test]
fn test_obfuscated_exception_class_stacktrace() {
let input = r#"a.b.c: Problem when compiling program
at r8.main(App:800)
Caused by: a.b.c: You have to write the program first
at r8.retrace(App:184)
... 7 more
"#;

let expected = r#"foo.bar.baz: Problem when compiling program
at r8.main(App:800)
Caused by: foo.bar.baz: You have to write the program first
at r8.retrace(App:184)
... 7 more
"#;

assert_remap_stacktrace(OBFUSCATED_EXCEPTION_CLASS_MAPPING, input, expected);
}

// =============================================================================
// RetraceAssertionErrorStackTrace
// =============================================================================

const RETRACE_ASSERTION_ERROR_STACKTRACE_MAPPING: &str = r#"com.android.tools.r8.retrace.Retrace -> com.android.tools.r8.retrace.Retrace:
boolean $assertionsDisabled -> a
1:5:void <clinit>():34:38 -> <clinit>
1:1:void <init>():35:35 -> <init>
com.android.tools.r8.retrace.RetraceCore$StackTraceNode -> com.android.tools.r8.retrace.h:
java.util.List lines -> a
boolean $assertionsDisabled -> b
1:1:void <clinit>():24:24 -> <clinit>
1:4:void <init>(java.util.List):28:31 -> <init>
com.android.tools.r8.retrace.RetraceCore -> com.android.tools.r8.retrace.f:
1:3:com.android.tools.r8.retrace.RetraceCore$RetraceResult retrace():106:108 -> a
4:7:void retraceLine(java.util.List,int,java.util.List):112:115 -> a
8:8:void retraceLine(java.util.List,int,java.util.List):115 -> a
47:50:void retraceLine(java.util.List,int,java.util.List):116:119 -> a
com.android.tools.r8.retrace.Retrace -> com.android.tools.r8.retrace.Retrace:
1:9:void run(com.android.tools.r8.retrace.RetraceCommand):112:120 -> run
"#;

#[test]
fn test_retrace_assertion_error_stacktrace() {
let input = r#"java.lang.AssertionError
at com.android.tools.r8.retrace.h.<init>(:4)
at com.android.tools.r8.retrace.f.a(:48)
at com.android.tools.r8.retrace.f.a(:2)
at com.android.tools.r8.retrace.Retrace.run(:5)
at com.android.tools.r8.retrace.RetraceTests.testNullLineTrace(RetraceTests.java:73)
"#;

let expected = r#"java.lang.AssertionError
at com.android.tools.r8.retrace.RetraceCore$StackTraceNode.<init>(RetraceCore.java:31)
at com.android.tools.r8.retrace.RetraceCore.retraceLine(RetraceCore.java:117)
at com.android.tools.r8.retrace.RetraceCore.retrace(RetraceCore.java:107)
at com.android.tools.r8.retrace.Retrace.run(Retrace.java:116)
at com.android.tools.r8.retrace.RetraceTests.testNullLineTrace(RetraceTests.java:73)
"#;

assert_remap_stacktrace(RETRACE_ASSERTION_ERROR_STACKTRACE_MAPPING, input, expected);
}
Loading