From 7105f6544f66f09f6847a7f5153a04ee3c2e7656 Mon Sep 17 00:00:00 2001 From: zhom <2717306+zhom@users.noreply.github.com> Date: Fri, 8 Aug 2025 07:10:27 +0400 Subject: [PATCH] test: cross-platform binary check --- src-tauri/src/api_client.rs | 1 + src-tauri/src/browser.rs | 75 ++++++++-- src-tauri/src/browser_version_service.rs | 177 ++++++++++++++++++++--- 3 files changed, 221 insertions(+), 32 deletions(-) diff --git a/src-tauri/src/api_client.rs b/src-tauri/src/api_client.rs index 50710b4..bb15f22 100644 --- a/src-tauri/src/api_client.rs +++ b/src-tauri/src/api_client.rs @@ -1678,6 +1678,7 @@ mod tests { "name": "Release v1.81.9 (Chromium 137.0.7151.104)", "prerelease": false, "published_at": "2024-01-15T10:00:00Z", + "draft": false, "assets": [ { "name": "brave-v1.81.9-universal.dmg", diff --git a/src-tauri/src/browser.rs b/src-tauri/src/browser.rs index d87d777..57c87bb 100644 --- a/src-tauri/src/browser.rs +++ b/src-tauri/src/browser.rs @@ -1037,9 +1037,34 @@ mod tests { let browser_dir = binaries_dir.join("firefox").join("139.0"); fs::create_dir_all(&browser_dir).unwrap(); - // Create a mock .app directory - let app_dir = browser_dir.join("Firefox.app"); - fs::create_dir_all(&app_dir).unwrap(); + #[cfg(target_os = "macos")] + { + // Create a mock .app directory for macOS + let app_dir = browser_dir.join("Firefox.app"); + fs::create_dir_all(&app_dir).unwrap(); + } + + #[cfg(target_os = "linux")] + { + // Create a mock firefox subdirectory and executable for Linux + let firefox_subdir = browser_dir.join("firefox"); + fs::create_dir_all(&firefox_subdir).unwrap(); + let executable_path = firefox_subdir.join("firefox"); + fs::write(&executable_path, "mock executable").unwrap(); + + // Set executable permissions on Linux + use std::os::unix::fs::PermissionsExt; + let mut permissions = executable_path.metadata().unwrap().permissions(); + permissions.set_mode(0o755); + fs::set_permissions(&executable_path, permissions).unwrap(); + } + + #[cfg(target_os = "windows")] + { + // Create a mock firefox.exe for Windows + let executable_path = browser_dir.join("firefox.exe"); + fs::write(&executable_path, "mock executable").unwrap(); + } let browser = FirefoxBrowser::new(BrowserType::Firefox); assert!(browser.is_version_downloaded("139.0", binaries_dir)); @@ -1048,15 +1073,39 @@ mod tests { // Test with Chromium browser with new path structure let chromium_dir = binaries_dir.join("chromium").join("1465660"); fs::create_dir_all(&chromium_dir).unwrap(); - let chromium_app_dir = chromium_dir.join("Chromium.app"); - fs::create_dir_all(chromium_app_dir.join("Contents").join("MacOS")).unwrap(); - // Create a mock executable - let executable_path = chromium_app_dir - .join("Contents") - .join("MacOS") - .join("Chromium"); - fs::write(&executable_path, "mock executable").unwrap(); + #[cfg(target_os = "macos")] + { + let chromium_app_dir = chromium_dir.join("Chromium.app"); + fs::create_dir_all(chromium_app_dir.join("Contents").join("MacOS")).unwrap(); + + // Create a mock executable + let executable_path = chromium_app_dir + .join("Contents") + .join("MacOS") + .join("Chromium"); + fs::write(&executable_path, "mock executable").unwrap(); + } + + #[cfg(target_os = "linux")] + { + // Create a mock chromium executable for Linux + let executable_path = chromium_dir.join("chromium"); + fs::write(&executable_path, "mock executable").unwrap(); + + // Set executable permissions on Linux + use std::os::unix::fs::PermissionsExt; + let mut permissions = executable_path.metadata().unwrap().permissions(); + permissions.set_mode(0o755); + fs::set_permissions(&executable_path, permissions).unwrap(); + } + + #[cfg(target_os = "windows")] + { + // Create a mock chromium.exe for Windows + let executable_path = chromium_dir.join("chromium.exe"); + fs::write(&executable_path, "mock executable").unwrap(); + } let chromium_browser = ChromiumBrowser::new(BrowserType::Chromium); assert!(chromium_browser.is_version_downloaded("1465660", binaries_dir)); @@ -1068,11 +1117,11 @@ mod tests { let temp_dir = TempDir::new().unwrap(); let binaries_dir = temp_dir.path(); - // Create browser directory but no .app directory with new path structure + // Create browser directory but no proper executable structure let browser_dir = binaries_dir.join("firefox").join("139.0"); fs::create_dir_all(&browser_dir).unwrap(); - // Create some other files but no .app + // Create some other files but no proper executable structure fs::write(browser_dir.join("readme.txt"), "Some content").unwrap(); let browser = FirefoxBrowser::new(BrowserType::Firefox); diff --git a/src-tauri/src/browser_version_service.rs b/src-tauri/src/browser_version_service.rs index 0594c1a..465f0e5 100644 --- a/src-tauri/src/browser_version_service.rs +++ b/src-tauri/src/browser_version_service.rs @@ -1016,59 +1016,198 @@ mod tests { fn test_get_download_info() { let service = BrowserVersionService::instance(); - // Test Firefox + // Test Firefox - platform-specific expectations let firefox_info = service.get_download_info("firefox", "139.0").unwrap(); - assert_eq!(firefox_info.filename, "Firefox 139.0.dmg"); + + #[cfg(target_os = "macos")] + { + assert_eq!(firefox_info.filename, "Firefox 139.0.dmg"); + assert!(firefox_info.is_archive); + } + + #[cfg(target_os = "linux")] + { + assert_eq!(firefox_info.filename, "firefox-139.0.tar.xz"); + assert!(firefox_info.is_archive); + } + + #[cfg(target_os = "windows")] + { + assert_eq!(firefox_info.filename, "Firefox Setup 139.0.exe"); + assert!(!firefox_info.is_archive); + } + assert!(firefox_info .url .contains("download-installer.cdn.mozilla.net")); assert!(firefox_info.url.contains("/pub/firefox/releases/139.0/")); - assert!(firefox_info.is_archive); // Test Firefox Developer let firefox_dev_info = service .get_download_info("firefox-developer", "139.0b1") .unwrap(); - assert_eq!(firefox_dev_info.filename, "Firefox 139.0b1.dmg"); + + #[cfg(target_os = "macos")] + { + assert_eq!(firefox_dev_info.filename, "Firefox 139.0b1.dmg"); + assert!(firefox_dev_info.is_archive); + } + + #[cfg(target_os = "linux")] + { + assert_eq!(firefox_dev_info.filename, "firefox-139.0b1.tar.xz"); + assert!(firefox_dev_info.is_archive); + } + + #[cfg(target_os = "windows")] + { + assert_eq!(firefox_dev_info.filename, "Firefox Setup 139.0b1.exe"); + assert!(!firefox_dev_info.is_archive); + } + assert!(firefox_dev_info .url .contains("download-installer.cdn.mozilla.net")); assert!(firefox_dev_info .url .contains("/pub/devedition/releases/139.0b1/")); - assert!(firefox_dev_info.is_archive); // Test Mullvad Browser let mullvad_info = service .get_download_info("mullvad-browser", "14.5a6") .unwrap(); - assert_eq!(mullvad_info.filename, "mullvad-browser-macos-14.5a6.dmg"); - assert!(mullvad_info.url.contains("mullvad-browser-macos-14.5a6")); - assert!(mullvad_info.is_archive); + + #[cfg(target_os = "macos")] + { + assert_eq!(mullvad_info.filename, "mullvad-browser-macos-14.5a6.dmg"); + assert!(mullvad_info.url.contains("mullvad-browser-macos-14.5a6")); + assert!(mullvad_info.is_archive); + } + + #[cfg(target_os = "linux")] + { + assert_eq!( + mullvad_info.filename, + "mullvad-browser-x86_64-14.5a6.tar.xz" + ); + assert!(mullvad_info.url.contains("mullvad-browser-x86_64-14.5a6")); + assert!(mullvad_info.is_archive); + } + + #[cfg(target_os = "windows")] + { + assert_eq!( + mullvad_info.filename, + "mullvad-browser-windows-x86_64-14.5a6.exe" + ); + assert!(mullvad_info + .url + .contains("mullvad-browser-windows-x86_64-14.5a6")); + assert!(!mullvad_info.is_archive); + } // Test Zen Browser let zen_info = service.get_download_info("zen", "1.11b").unwrap(); - assert_eq!(zen_info.filename, "zen-1.11b.dmg"); - assert!(zen_info.url.contains("zen.macos-universal.dmg")); - assert!(zen_info.is_archive); + + #[cfg(target_os = "macos")] + { + assert_eq!(zen_info.filename, "zen-1.11b.dmg"); + assert!(zen_info.url.contains("zen.macos-universal.dmg")); + assert!(zen_info.is_archive); + } + + #[cfg(target_os = "linux")] + { + assert_eq!(zen_info.filename, "zen-1.11b-x86_64.tar.xz"); + assert!(zen_info.url.contains("zen.linux-x86_64.tar.xz")); + assert!(zen_info.is_archive); + } + + #[cfg(target_os = "windows")] + { + assert_eq!(zen_info.filename, "zen-1.11b.exe"); + assert!(zen_info.url.contains("zen.installer.exe")); + assert!(!zen_info.is_archive); + } // Test Tor Browser let tor_info = service.get_download_info("tor-browser", "14.0.4").unwrap(); - assert_eq!(tor_info.filename, "tor-browser-macos-14.0.4.dmg"); - assert!(tor_info.url.contains("tor-browser-macos-14.0.4")); - assert!(tor_info.is_archive); + + #[cfg(target_os = "macos")] + { + assert_eq!(tor_info.filename, "tor-browser-macos-14.0.4.dmg"); + assert!(tor_info.url.contains("tor-browser-macos-14.0.4")); + assert!(tor_info.is_archive); + } + + #[cfg(target_os = "linux")] + { + assert_eq!(tor_info.filename, "tor-browser-linux-x86_64-14.0.4.tar.xz"); + assert!(tor_info.url.contains("tor-browser-linux-x86_64-14.0.4")); + assert!(tor_info.is_archive); + } + + #[cfg(target_os = "windows")] + { + assert_eq!( + tor_info.filename, + "tor-browser-windows-x86_64-portable-14.0.4.exe" + ); + assert!(tor_info + .url + .contains("tor-browser-windows-x86_64-portable-14.0.4")); + assert!(!tor_info.is_archive); + } // Test Chromium let chromium_info = service.get_download_info("chromium", "1465660").unwrap(); - assert_eq!(chromium_info.filename, "chromium-1465660-mac.zip"); - assert!(chromium_info.url.contains("chrome-mac.zip")); + + #[cfg(target_os = "macos")] + { + assert_eq!(chromium_info.filename, "chromium-1465660-mac.zip"); + assert!(chromium_info.url.contains("chrome-mac.zip")); + } + + #[cfg(target_os = "linux")] + { + assert_eq!(chromium_info.filename, "chromium-1465660-linux.zip"); + assert!(chromium_info.url.contains("chrome-linux.zip")); + } + + #[cfg(target_os = "windows")] + { + assert_eq!(chromium_info.filename, "chromium-1465660-win.zip"); + assert!(chromium_info.url.contains("chrome-win.zip")); + } + assert!(chromium_info.is_archive); // Test Brave - Note: Brave uses dynamic URL resolution, so get_download_info provides a template URL let brave_info = service.get_download_info("brave", "v1.81.9").unwrap(); - assert_eq!(brave_info.filename, "Brave-Browser-universal.dmg"); - assert_eq!(brave_info.url, "https://github.com/brave/brave-browser/releases/download/v1.81.9/Brave-Browser-universal.dmg"); - assert!(brave_info.is_archive); + + #[cfg(target_os = "macos")] + { + assert_eq!(brave_info.filename, "Brave-Browser-universal.dmg"); + assert_eq!(brave_info.url, "https://github.com/brave/brave-browser/releases/download/v1.81.9/Brave-Browser-universal.dmg"); + assert!(brave_info.is_archive); + } + + #[cfg(target_os = "linux")] + { + assert_eq!(brave_info.filename, "brave-browser-v1.81.9-linux-amd64.zip"); + assert_eq!(brave_info.url, "https://github.com/brave/brave-browser/releases/download/v1.81.9/brave-browser-v1.81.9-linux-amd64.zip"); + assert!(brave_info.is_archive); + } + + #[cfg(target_os = "windows")] + { + assert_eq!(brave_info.filename, "brave-v1.81.9.exe"); + assert_eq!( + brave_info.url, + "https://github.com/brave/brave-browser/releases/download/v1.81.9/brave-v1.81.9.exe" + ); + assert!(!brave_info.is_archive); + } // Test unsupported browser let unsupported_result = service.get_download_info("unsupported", "1.0.0");