tests: fix env guard and pipe read for tab dnd
This commit is contained in:
parent
7f321cb0a3
commit
ce0868582b
2 changed files with 27 additions and 14 deletions
|
|
@ -881,7 +881,9 @@ mod tests {
|
|||
impl EnvVarGuard {
|
||||
fn set(key: &'static str, value: &Path) -> Self {
|
||||
let original = env::var(key).ok();
|
||||
std::env::set_var(key, value);
|
||||
// std::env::{set_var, remove_var} are unsafe on newer toolchains;
|
||||
// we limit scope here to the test helper that toggles a single key.
|
||||
unsafe { std::env::set_var(key, value) };
|
||||
Self { key, original }
|
||||
}
|
||||
}
|
||||
|
|
@ -889,9 +891,9 @@ mod tests {
|
|||
impl Drop for EnvVarGuard {
|
||||
fn drop(&mut self) {
|
||||
if let Some(ref original) = self.original {
|
||||
std::env::set_var(self.key, original);
|
||||
unsafe { std::env::set_var(self.key, original) };
|
||||
} else {
|
||||
std::env::remove_var(self.key);
|
||||
unsafe { std::env::remove_var(self.key) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1108,7 +1110,8 @@ Icon=vmware-workstation\n\
|
|||
let resolved = resolve_desktop_entry(&mut cache, &ctx, &DesktopResolveOptions::default());
|
||||
assert!(resolved.icon().is_some());
|
||||
assert!(resolved.exec().is_some());
|
||||
assert_eq!(resolved.startup_wm_class(), Some(&format!("crx_{}", id)));
|
||||
let expected = format!("crx_{}", id);
|
||||
assert_eq!(resolved.startup_wm_class(), Some(expected.as_str()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -9,18 +9,28 @@ use std::process::{Command, Stdio, exit};
|
|||
#[cfg(feature = "tokio")]
|
||||
use tokio::io::AsyncReadExt;
|
||||
|
||||
#[cfg(feature = "tokio")]
|
||||
async fn read_from_pipe(read: OwnedFd) -> Option<u32> {
|
||||
let mut read = tokio::net::unix::pipe::Receiver::from_owned_fd(read).unwrap();
|
||||
read.read_u32().await.ok()
|
||||
}
|
||||
#[cfg(feature = "tokio")]
|
||||
{
|
||||
let mut read = tokio::net::unix::pipe::Receiver::from_owned_fd(read).unwrap();
|
||||
return read.read_u32().await.ok();
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "smol", not(feature = "tokio")))]
|
||||
async fn read_from_pipe(read: OwnedFd) -> Option<u32> {
|
||||
let mut read = smol::Async::new(std::fs::File::from(read)).unwrap();
|
||||
let mut bytes = [0; 4];
|
||||
read.read_exact(&mut bytes).await.ok()?;
|
||||
Some(u32::from_be_bytes(bytes))
|
||||
#[cfg(all(feature = "smol", not(feature = "tokio")))]
|
||||
{
|
||||
let mut read = smol::Async::new(std::fs::File::from(read)).unwrap();
|
||||
let mut bytes = [0; 4];
|
||||
read.read_exact(&mut bytes).await.ok()?;
|
||||
return Some(u32::from_be_bytes(bytes));
|
||||
}
|
||||
|
||||
#[cfg(not(any(feature = "tokio", feature = "smol")))]
|
||||
{
|
||||
use rustix::fd::AsFd;
|
||||
let mut bytes = [0u8; 4];
|
||||
rustix::io::read(&read, &mut bytes).ok()?;
|
||||
return Some(u32::from_be_bytes(bytes));
|
||||
}
|
||||
}
|
||||
|
||||
/// Performs a double fork with setsid to spawn and detach a command.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue