test(trim-paths): exercise with real world debugger

This commit is contained in:
Weihang Lo 2023-11-30 19:38:46 -05:00
parent 1ef8575839
commit 5c32fe0432
No known key found for this signature in database
GPG Key ID: D7DBF189825E82E7
3 changed files with 72 additions and 5 deletions

View File

@ -148,7 +148,7 @@ jobs:
- run: rustup target add ${{ matrix.other }} - run: rustup target add ${{ matrix.other }}
- run: rustup component add rustc-dev llvm-tools-preview rust-docs - run: rustup component add rustc-dev llvm-tools-preview rust-docs
if: startsWith(matrix.rust, 'nightly') if: startsWith(matrix.rust, 'nightly')
- run: sudo apt update -y && sudo apt install gcc-multilib libsecret-1-0 libsecret-1-dev -y - run: sudo apt update -y && sudo apt install lldb gcc-multilib libsecret-1-0 libsecret-1-dev -y
if: matrix.os == 'ubuntu-latest' if: matrix.os == 'ubuntu-latest'
- run: rustup component add rustfmt || echo "rustfmt not available" - run: rustup component add rustfmt || echo "rustfmt not available"
- name: Configure extra test environment - name: Configure extra test environment

View File

@ -208,10 +208,11 @@ fn has_command(command: &str) -> bool {
let output = match Command::new(command).arg("--version").output() { let output = match Command::new(command).arg("--version").output() {
Ok(output) => output, Ok(output) => output,
Err(e) => { Err(e) => {
// hg is not installed on GitHub macOS or certain constrained // * hg is not installed on GitHub macOS or certain constrained
// environments like Docker. Consider installing it if Cargo gains // environments like Docker. Consider installing it if Cargo
// more hg support, but otherwise it isn't critical. // gains more hg support, but otherwise it isn't critical.
if is_ci() && command != "hg" { // * lldb is not pre-installed on Ubuntu and Windows, so skip.
if is_ci() && !["hg", "lldb"].contains(&command) {
panic!( panic!(
"expected command `{}` to be somewhere in PATH: {}", "expected command `{}` to be somewhere in PATH: {}",
command, e command, e

View File

@ -612,3 +612,69 @@ fn custom_build_env_var_trim_paths() {
.run(); .run();
} }
} }
#[cfg(unix)]
#[cargo_test(requires_lldb, nightly, reason = "-Zremap-path-scope is unstable")]
fn lldb_works_after_trimmed() {
use cargo_test_support::compare::match_contains;
let run_lldb = |path| {
std::process::Command::new("lldb")
.args(["-o", "breakpoint set --file src/main.rs --line 4"])
.args(["-o", "run"])
.args(["-o", "continue"])
.args(["-o", "exit"])
.arg("--no-use-colors")
.arg(path)
.output()
.expect("lldb works")
};
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
[profile.dev]
trim-paths = "object"
"#,
)
.file(
"src/main.rs",
r#"
fn main() {
let msg = "Hello, Ferris!";
println!("{msg}");
}
"#,
)
.build();
p.cargo("build --verbose -Ztrim-paths")
.masquerade_as_nightly_cargo(&["-Ztrim-paths"])
.with_stderr_contains(
"\
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]",
)
.run();
let bin_path = p.bin("foo");
assert!(bin_path.is_file());
let stdout = String::from_utf8(run_lldb(bin_path).stdout).unwrap();
match_contains("[..]stopped[..]", &stdout, None).unwrap();
match_contains("[..]stop reason = breakpoint[..]", &stdout, None).unwrap();
match_contains(
"\
(lldb) continue
Hello, Ferris!",
&stdout,
None,
)
.unwrap();
}