>>> linkquisition: Building testing/linkquisition 3.1.10-r0 (using abuild 3.18.0_rc5-r1) started Tue, 06 Oct 2026 00:56:12 +0000 >>> linkquisition: Validating /home/buildozer/aports/testing/linkquisition/APKBUILD... >>> WARNING: linkquisition: Go packages require network connection to build. Maybe add 'net' to options >>> linkquisition: Analyzing dependencies... >>> linkquisition: Installing for build: build-base libdecor mesa-egl mesa-gl bash go libxkbcommon-dev mesa-dev scdoc wayland-dev ( 1/95) Installing libxau (1.0.12-r0) ( 2/95) Installing libmd (1.2.0-r0) ( 3/95) Installing libbsd (0.12.2-r0) ( 4/95) Installing libxdmcp (1.1.5-r1) ( 5/95) Installing libxcb (1.17.0-r2) ( 6/95) Installing libx11 (1.8.13-r0) ( 7/95) Installing libxext (1.3.7-r0) ( 8/95) Installing libxrender (0.9.12-r0) ( 9/95) Installing libbz2 (1.0.8-r6) (10/95) Installing libpng (1.6.59-r0) (11/95) Installing freetype (2.14.3-r0) (12/95) Installing fontconfig (2.18.1-r0) (13/95) Installing pixman (0.46.4-r0) (14/95) Installing cairo (1.18.4-r1) (15/95) Installing dbus-libs (1.16.2-r3) (16/95) Installing libffi (3.8.0-r0) (17/95) Installing libintl (1.0-r0) (18/95) Installing libeconf (0.8.4-r0) (19/95) Installing libblkid (2.42.4-r2) (20/95) Installing libmount (2.42.4-r2) (21/95) Installing glib (2.90.0-r0) (22/95) Installing libxft (2.3.9-r0) (23/95) Installing fribidi (1.0.16-r3) (24/95) Installing graphite2 (1.3.15-r0) (25/95) Installing harfbuzz (14.2.1-r0) (26/95) Installing pango (1.58.2-r0) (27/95) Installing wayland-libs-client (1.26.0-r0) (28/95) Installing wayland-libs-cursor (1.26.0-r0) (29/95) Installing libdecor (0.2.5-r0) (30/95) Installing xz-libs (5.8.4-r0) (31/95) Installing libxml2 (2.13.9-r2) (32/95) Installing llvm23-libs (23.1.2-r0) (33/95) Installing spirv-tools (1.4.357.0-r0) (34/95) Installing hwdata-pci (0.412-r0) (35/95) Installing libpciaccess (0.19-r0) (36/95) Installing libdrm (2.4.134-r0) (37/95) Installing libelf (0.195-r0) (38/95) Installing libxshmfence (1.3.3-r0) (39/95) Installing mesa (26.2.4-r0) (40/95) Installing mesa-gles (26.2.4-r0) (41/95) Installing mesa-gbm (26.2.4-r0) (42/95) Installing mesa-egl (26.2.4-r0) (43/95) Installing libxxf86vm (1.1.7-r0) (44/95) Installing mesa-gl (26.2.4-r0) (45/95) Installing readline (8.3.3-r1) (46/95) Installing bash (5.3.9-r2) Executing bash-5.3.9-r2.post-install (47/95) Installing go (1.27.1-r0) (48/95) Installing xkeyboard-config (2.48-r0) (49/95) Installing libxkbcommon (1.13.2-r0) (50/95) Installing libxkbcommon-x11 (1.13.2-r0) (51/95) Installing zlib-dev (1.3.2-r0) (52/95) Installing xz (5.8.4-r0) (53/95) Installing xz-dev (5.8.4-r0) (54/95) Installing libxml2-utils (2.13.9-r2) (55/95) Installing libxml2-dev (2.13.9-r2) (56/95) Installing xorgproto (2025.1-r0) (57/95) Installing libxau-dev (1.0.12-r0) (58/95) Installing mpdecimal (4.0.1-r0) (59/95) Installing libpanelw (6.6_p20260822-r0) (60/95) Installing sqlite-libs (3.53.4-r0) (61/95) Installing python3 (3.14.8-r0) (62/95) Installing python3-pycache-pyc0 (3.14.8-r0) (63/95) Installing pyc (3.14.8-r0) (64/95) Installing xcb-proto-pyc (1.17.0-r1) (65/95) Installing python3-pyc (3.14.8-r0) (66/95) Installing xcb-proto (1.17.0-r1) (67/95) Installing libxdmcp-dev (1.1.5-r1) (68/95) Installing libxcb-dev (1.17.0-r2) (69/95) Installing libxkbcommon-dev (1.13.2-r0) (70/95) Installing linux-headers (7.2.1-r0) (71/95) Installing libpciaccess-dev (0.19-r0) (72/95) Installing libdrm-dev (2.4.134-r0) (73/95) Installing libxdamage (1.1.7-r0) (74/95) Installing xtrans (1.6.0-r0) (75/95) Installing libx11-dev (1.8.13-r0) (76/95) Installing libxfixes (6.0.2-r0) (77/95) Installing libxfixes-dev (6.0.2-r0) (78/95) Installing libxdamage-dev (1.1.7-r0) (79/95) Installing libxshmfence-dev (1.3.3-r0) (80/95) Installing clang23-headers (23.1.2-r0) (81/95) Installing libclc (23.1.2-r0) (82/95) Installing spirv-llvm-translator-libs (23.1.1-r0) (83/95) Installing clang23-libs (23.1.2-r0) (84/95) Installing mesa-rusticl (26.2.4-r0) (85/95) Installing libxext-dev (1.3.7-r0) (86/95) Installing libxxf86vm-dev (1.1.7-r0) (87/95) Installing mesa-dev (26.2.4-r0) (88/95) Installing scdoc (1.11.5-r0) (89/95) Installing expat (2.8.5-r0) (90/95) Installing expat-dev (2.8.5-r0) (91/95) Installing libffi-dev (3.8.0-r0) (92/95) Installing wayland-libs-egl (1.26.0-r0) (93/95) Installing wayland-libs-server (1.26.0-r0) (94/95) Installing wayland-dev (1.26.0-r0) (95/95) Installing .makedepends-linkquisition (20261006.005612) Executing busybox-1.38.0-r7.trigger Executing glib-2.90.0-r0.trigger OK: 1103.3 MiB in 202 packages >>> linkquisition: Cleaning up srcdir >>> linkquisition: Cleaning up pkgdir >>> linkquisition: Cleaning up tmpdir >>> linkquisition: Fetching https://distfiles.alpinelinux.org/distfiles/edge/linkquisition-3.1.10.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) wget: server returned error: HTTP/1.1 404 Not Found >>> linkquisition: Fetching linkquisition-3.1.10.tar.gz::https://github.com/Strobotti/linkquisition/archive/refs/tags/v3.1.10.tar.gz Connecting to github.com (140.82.121.3:443) Connecting to codeload.github.com (140.82.121.9:443) saving to '/var/cache/distfiles/edge/linkquisition-3.1.10.tar.gz.part' linkquisition-3.1.10 81% |************************* | 9668k 0:00:00 ETA linkquisition-3.1.10 100% |********************************| 11.6M 0:00:00 ETA '/var/cache/distfiles/edge/linkquisition-3.1.10.tar.gz.part' saved /var/cache/distfiles/edge/linkquisition-3.1.10.tar.gz: OK >>> linkquisition: Fetching https://distfiles.alpinelinux.org/distfiles/edge/linkquisition-3.1.10.tar.gz /var/cache/distfiles/edge/linkquisition-3.1.10.tar.gz: OK >>> linkquisition: Unpacking /var/cache/distfiles/edge/linkquisition-3.1.10.tar.gz... Generating wayland-client-protocol.h and wayland-client-protocol-code.h Generating viewporter-client-protocol.h and viewporter-client-protocol-code.h Generating xdg-shell-client-protocol.h and xdg-shell-client-protocol-code.h Generating idle-inhibit-unstable-v1-client-protocol.h and idle-inhibit-unstable-v1-client-protocol-code.h Generating pointer-constraints-unstable-v1-client-protocol.h and pointer-constraints-unstable-v1-client-protocol-code.h Generating relative-pointer-unstable-v1-client-protocol.h and relative-pointer-unstable-v1-client-protocol-code.h Generating fractional-scale-v1-client-protocol.h and fractional-scale-v1-client-protocol-code.h Generating xdg-activation-v1-client-protocol.h and xdg-activation-v1-client-protocol-code.h Generating xdg-decoration-unstable-v1-client-protocol.h and xdg-decoration-unstable-v1-client-protocol-code.h Done. Generated 18 files in vendor/github.com/go-gl/glfw/v3.4/glfw/glfw/src/ === RUN TestNewPluginServiceProvider --- PASS: TestNewPluginServiceProvider (0.00s) === RUN TestNewPluginServiceProvider_NilLogger --- PASS: TestNewPluginServiceProvider_NilLogger (0.00s) === RUN TestPluginResult_DefaultValues --- PASS: TestPluginResult_DefaultValues (0.00s) === RUN TestPluginMetadata_SettingDescriptors --- PASS: TestPluginMetadata_SettingDescriptors (0.00s) === RUN TestFileSettingsService_IsConfigured_ReturnsFalseWhenNoFile --- PASS: TestFileSettingsService_IsConfigured_ReturnsFalseWhenNoFile (0.00s) === RUN TestFileSettingsService_WriteAndReadSettings --- PASS: TestFileSettingsService_WriteAndReadSettings (0.00s) === RUN TestFileSettingsService_IsConfigured_ReturnsTrueAfterWrite --- PASS: TestFileSettingsService_IsConfigured_ReturnsTrueAfterWrite (0.00s) === RUN TestFileSettingsService_GetSettings_ReturnsDefaultWhenNotConfigured --- PASS: TestFileSettingsService_GetSettings_ReturnsDefaultWhenNotConfigured (0.00s) === RUN TestFileSettingsService_GetSettings_ReturnsStoredSettings --- PASS: TestFileSettingsService_GetSettings_ReturnsStoredSettings (0.00s) === RUN TestFileSettingsService_ScanBrowsers_CreatesConfig --- PASS: TestFileSettingsService_ScanBrowsers_CreatesConfig (0.00s) === RUN TestFileSettingsService_ScanBrowsers_PreservesExistingRules --- PASS: TestFileSettingsService_ScanBrowsers_PreservesExistingRules (0.00s) === RUN TestFileSettingsService_ReadSettings_ReturnsErrorForCorruptFile --- PASS: TestFileSettingsService_ReadSettings_ReturnsErrorForCorruptFile (0.00s) === RUN TestFileSettingsService_IsConfigured_ReturnsFalseForCorruptFile --- PASS: TestFileSettingsService_IsConfigured_ReturnsFalseForCorruptFile (0.00s) === RUN TestFileSettingsService_ReadSettings_CompilesRegexPatterns --- PASS: TestFileSettingsService_ReadSettings_CompilesRegexPatterns (0.00s) === RUN TestFileSettingsService_GetSettings_ReturnsDefaultForCorruptFile --- PASS: TestFileSettingsService_GetSettings_ReturnsDefaultForCorruptFile (0.00s) === RUN TestFileSettingsService_ScanBrowsers_ReturnsErrorWhenGetAvailableBrowsersFails --- PASS: TestFileSettingsService_ScanBrowsers_ReturnsErrorWhenGetAvailableBrowsersFails (0.00s) === RUN TestFileSettingsService_ScanBrowsers_ReturnsErrorWhenWriteFails --- PASS: TestFileSettingsService_ScanBrowsers_ReturnsErrorWhenWriteFails (0.00s) === RUN TestFileSettingsService_ScanBrowsers_MergesWithExistingConfigOnRescan --- PASS: TestFileSettingsService_ScanBrowsers_MergesWithExistingConfigOnRescan (0.00s) === RUN TestFileSettingsService_ScanBrowsers_PersistsIconPath --- PASS: TestFileSettingsService_ScanBrowsers_PersistsIconPath (0.00s) === RUN TestFileSettingsService_WriteSettings_ReturnsErrorForUnwritablePath --- PASS: TestFileSettingsService_WriteSettings_ReturnsErrorForUnwritablePath (0.00s) === RUN TestBrowserSettings_MatchesUrl === RUN TestBrowserSettings_MatchesUrl/site_matches === RUN TestBrowserSettings_MatchesUrl/site_does_not_match_if_the_subdomain_is_different === RUN TestBrowserSettings_MatchesUrl/domain_matches === RUN TestBrowserSettings_MatchesUrl/domain_matches,_without_path === RUN TestBrowserSettings_MatchesUrl/domain_matches_even_if_the_subdomain_is_different === RUN TestBrowserSettings_MatchesUrl/domain_matches_even_if_the_subdomain_is_different,_without_path === RUN TestBrowserSettings_MatchesUrl/domain_does_not_match === RUN TestBrowserSettings_MatchesUrl/regex_matches === RUN TestBrowserSettings_MatchesUrl/regex_does_not_match --- PASS: TestBrowserSettings_MatchesUrl (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/site_matches (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/site_does_not_match_if_the_subdomain_is_different (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/domain_matches (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/domain_matches,_without_path (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/domain_matches_even_if_the_subdomain_is_different (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/domain_matches_even_if_the_subdomain_is_different,_without_path (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/domain_does_not_match (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/regex_matches (0.00s) --- PASS: TestBrowserSettings_MatchesUrl/regex_does_not_match (0.00s) === RUN TestBrowserSettings_MatchesUrl_CaseInsensitive === RUN TestBrowserSettings_MatchesUrl_CaseInsensitive/site_match_is_case-insensitive_(rule_uppercase,_URL_lowercase) === RUN TestBrowserSettings_MatchesUrl_CaseInsensitive/site_match_is_case-insensitive_(rule_mixed_case,_URL_lowercase) === RUN TestBrowserSettings_MatchesUrl_CaseInsensitive/domain_match_is_case-insensitive_(rule_uppercase) === RUN TestBrowserSettings_MatchesUrl_CaseInsensitive/domain_match_is_case-insensitive_(URL_uppercase) === RUN TestBrowserSettings_MatchesUrl_CaseInsensitive/site_match_is_case-insensitive_(URL_uppercase) --- PASS: TestBrowserSettings_MatchesUrl_CaseInsensitive (0.00s) --- PASS: TestBrowserSettings_MatchesUrl_CaseInsensitive/site_match_is_case-insensitive_(rule_uppercase,_URL_lowercase) (0.00s) --- PASS: TestBrowserSettings_MatchesUrl_CaseInsensitive/site_match_is_case-insensitive_(rule_mixed_case,_URL_lowercase) (0.00s) --- PASS: TestBrowserSettings_MatchesUrl_CaseInsensitive/domain_match_is_case-insensitive_(rule_uppercase) (0.00s) --- PASS: TestBrowserSettings_MatchesUrl_CaseInsensitive/domain_match_is_case-insensitive_(URL_uppercase) (0.00s) --- PASS: TestBrowserSettings_MatchesUrl_CaseInsensitive/site_match_is_case-insensitive_(URL_uppercase) (0.00s) === RUN TestSettings_NormalizeBrowsers === RUN TestSettings_NormalizeBrowsers/no_hidden_browsers_causes_no_changes === RUN TestSettings_NormalizeBrowsers/one_hidden_browser_is_moved_to_the_end === RUN TestSettings_NormalizeBrowsers/only_hidden_browsers_causes_no_changes --- PASS: TestSettings_NormalizeBrowsers (0.00s) --- PASS: TestSettings_NormalizeBrowsers/no_hidden_browsers_causes_no_changes (0.00s) --- PASS: TestSettings_NormalizeBrowsers/one_hidden_browser_is_moved_to_the_end (0.00s) --- PASS: TestSettings_NormalizeBrowsers/only_hidden_browsers_causes_no_changes (0.00s) === RUN TestSettings_UpdateWithBrowsers === RUN TestSettings_UpdateWithBrowsers/no_changes === RUN TestSettings_UpdateWithBrowsers/one_browser_added_appends_to_the_end === RUN TestSettings_UpdateWithBrowsers/a_browser_which_was_auto-added_is_removed_when_it's_no_longer_present === RUN TestSettings_UpdateWithBrowsers/a_hidden_browser_still_present_on_the_system_stays_hidden --- PASS: TestSettings_UpdateWithBrowsers (0.00s) --- PASS: TestSettings_UpdateWithBrowsers/no_changes (0.00s) --- PASS: TestSettings_UpdateWithBrowsers/one_browser_added_appends_to_the_end (0.00s) --- PASS: TestSettings_UpdateWithBrowsers/a_browser_which_was_auto-added_is_removed_when_it's_no_longer_present (0.00s) --- PASS: TestSettings_UpdateWithBrowsers/a_hidden_browser_still_present_on_the_system_stays_hidden (0.00s) === RUN TestSettings_UpdateWithBrowsers_PreservesNonBrowserFields --- PASS: TestSettings_UpdateWithBrowsers_PreservesNonBrowserFields (0.00s) === RUN TestSettings_UpdateWithBrowsers_RefreshesIconPaths --- PASS: TestSettings_UpdateWithBrowsers_RefreshesIconPaths (0.00s) === RUN TestSettings_UpdateWithBrowsers_PreservesManualIconPath --- PASS: TestSettings_UpdateWithBrowsers_PreservesManualIconPath (0.00s) === RUN TestSettings_UpdateWithBrowsers_NewBrowserGetsIconPath --- PASS: TestSettings_UpdateWithBrowsers_NewBrowserGetsIconPath (0.00s) === RUN TestSettings_GetSelectableBrowsers === RUN TestSettings_GetSelectableBrowsers/returns_only_visible_browsers === RUN TestSettings_GetSelectableBrowsers/returns_empty_slice_when_all_are_hidden === RUN TestSettings_GetSelectableBrowsers/returns_all_when_none_are_hidden === RUN TestSettings_GetSelectableBrowsers/returns_nil_when_there_are_no_browsers --- PASS: TestSettings_GetSelectableBrowsers (0.00s) --- PASS: TestSettings_GetSelectableBrowsers/returns_only_visible_browsers (0.00s) --- PASS: TestSettings_GetSelectableBrowsers/returns_empty_slice_when_all_are_hidden (0.00s) --- PASS: TestSettings_GetSelectableBrowsers/returns_all_when_none_are_hidden (0.00s) --- PASS: TestSettings_GetSelectableBrowsers/returns_nil_when_there_are_no_browsers (0.00s) === RUN TestSettings_GetMatchingBrowser === RUN TestSettings_GetMatchingBrowser/returns_matching_browser_for_site_rule === RUN TestSettings_GetMatchingBrowser/returns_matching_browser_for_domain_rule === RUN TestSettings_GetMatchingBrowser/returns_ErrNoMatchFound_when_no_browser_matches === RUN TestSettings_GetMatchingBrowser/returns_first_match_when_multiple_browsers_could_match --- PASS: TestSettings_GetMatchingBrowser (0.00s) --- PASS: TestSettings_GetMatchingBrowser/returns_matching_browser_for_site_rule (0.00s) --- PASS: TestSettings_GetMatchingBrowser/returns_matching_browser_for_domain_rule (0.00s) --- PASS: TestSettings_GetMatchingBrowser/returns_ErrNoMatchFound_when_no_browser_matches (0.00s) --- PASS: TestSettings_GetMatchingBrowser/returns_first_match_when_multiple_browsers_could_match (0.00s) === RUN TestSettings_AddRuleToBrowser === RUN TestSettings_AddRuleToBrowser/adds_a_rule_to_the_matching_browser === RUN TestSettings_AddRuleToBrowser/does_nothing_when_browser_command_does_not_match === RUN TestSettings_AddRuleToBrowser/appends_to_existing_matches --- PASS: TestSettings_AddRuleToBrowser (0.00s) --- PASS: TestSettings_AddRuleToBrowser/adds_a_rule_to_the_matching_browser (0.00s) --- PASS: TestSettings_AddRuleToBrowser/does_nothing_when_browser_command_does_not_match (0.00s) --- PASS: TestSettings_AddRuleToBrowser/appends_to_existing_matches (0.00s) === RUN TestMapSettingsLogLevelToSlog === RUN TestMapSettingsLogLevelToSlog/debug === RUN TestMapSettingsLogLevelToSlog/info === RUN TestMapSettingsLogLevelToSlog/warn === RUN TestMapSettingsLogLevelToSlog/error === RUN TestMapSettingsLogLevelToSlog/unknown_defaults_to_warn === RUN TestMapSettingsLogLevelToSlog/empty_defaults_to_warn === RUN TestMapSettingsLogLevelToSlog/case_insensitive_DEBUG === RUN TestMapSettingsLogLevelToSlog/case_insensitive_Warn --- PASS: TestMapSettingsLogLevelToSlog (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/debug (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/info (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/warn (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/error (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/unknown_defaults_to_warn (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/empty_defaults_to_warn (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/case_insensitive_DEBUG (0.00s) --- PASS: TestMapSettingsLogLevelToSlog/case_insensitive_Warn (0.00s) === RUN TestBrowserSettings_CompileRegexMatches === RUN TestBrowserSettings_CompileRegexMatches/valid_regex_patterns_are_compiled === RUN TestBrowserSettings_CompileRegexMatches/invalid_regex_patterns_are_skipped_gracefully 2026/10/06 00:59:28 WARN Invalid regex pattern in browser match rule browser=Firefox pattern=[invalid error="error parsing regexp: missing closing ]: `[invalid`" --- PASS: TestBrowserSettings_CompileRegexMatches (0.00s) --- PASS: TestBrowserSettings_CompileRegexMatches/valid_regex_patterns_are_compiled (0.00s) --- PASS: TestBrowserSettings_CompileRegexMatches/invalid_regex_patterns_are_skipped_gracefully (0.00s) === RUN TestSettings_CompileAllRegexMatches --- PASS: TestSettings_CompileAllRegexMatches (0.00s) === RUN TestBrowserSettings_MatchesUrl_FallbackCompilesRegexOnDemand --- PASS: TestBrowserSettings_MatchesUrl_FallbackCompilesRegexOnDemand (0.00s) === RUN TestUiSettings_GetPickerLayout === RUN TestUiSettings_GetPickerLayout/defaults_to_horizontal_when_empty === RUN TestUiSettings_GetPickerLayout/returns_vertical_when_explicitly_set === RUN TestUiSettings_GetPickerLayout/returns_horizontal_when_set === RUN TestUiSettings_GetPickerLayout/defaults_to_horizontal_for_unknown_value --- PASS: TestUiSettings_GetPickerLayout (0.00s) --- PASS: TestUiSettings_GetPickerLayout/defaults_to_horizontal_when_empty (0.00s) --- PASS: TestUiSettings_GetPickerLayout/returns_vertical_when_explicitly_set (0.00s) --- PASS: TestUiSettings_GetPickerLayout/returns_horizontal_when_set (0.00s) --- PASS: TestUiSettings_GetPickerLayout/defaults_to_horizontal_for_unknown_value (0.00s) === RUN TestUiSettings_GetMaxItemsPerRow === RUN TestUiSettings_GetMaxItemsPerRow/defaults_to_DefaultMaxItemsPerRow_when_zero === RUN TestUiSettings_GetMaxItemsPerRow/returns_configured_value_when_positive === RUN TestUiSettings_GetMaxItemsPerRow/defaults_when_negative --- PASS: TestUiSettings_GetMaxItemsPerRow (0.00s) --- PASS: TestUiSettings_GetMaxItemsPerRow/defaults_to_DefaultMaxItemsPerRow_when_zero (0.00s) --- PASS: TestUiSettings_GetMaxItemsPerRow/returns_configured_value_when_positive (0.00s) --- PASS: TestUiSettings_GetMaxItemsPerRow/defaults_when_negative (0.00s) === RUN TestUiSettings_GetTheme === RUN TestUiSettings_GetTheme/defaults_to_system_when_empty === RUN TestUiSettings_GetTheme/returns_dark_when_set === RUN TestUiSettings_GetTheme/returns_light_when_set === RUN TestUiSettings_GetTheme/returns_system_when_explicitly_set === RUN TestUiSettings_GetTheme/defaults_to_system_for_unknown_value --- PASS: TestUiSettings_GetTheme (0.00s) --- PASS: TestUiSettings_GetTheme/defaults_to_system_when_empty (0.00s) --- PASS: TestUiSettings_GetTheme/returns_dark_when_set (0.00s) --- PASS: TestUiSettings_GetTheme/returns_light_when_set (0.00s) --- PASS: TestUiSettings_GetTheme/returns_system_when_explicitly_set (0.00s) --- PASS: TestUiSettings_GetTheme/defaults_to_system_for_unknown_value (0.00s) === RUN TestUiSettings_GetFaviconStrategy === RUN TestUiSettings_GetFaviconStrategy/defaults_to_direct_when_empty === RUN TestUiSettings_GetFaviconStrategy/returns_direct_when_explicitly_set === RUN TestUiSettings_GetFaviconStrategy/returns_parsed_when_set === RUN TestUiSettings_GetFaviconStrategy/returns_google_when_set === RUN TestUiSettings_GetFaviconStrategy/defaults_to_direct_for_unknown_value --- PASS: TestUiSettings_GetFaviconStrategy (0.00s) --- PASS: TestUiSettings_GetFaviconStrategy/defaults_to_direct_when_empty (0.00s) --- PASS: TestUiSettings_GetFaviconStrategy/returns_direct_when_explicitly_set (0.00s) --- PASS: TestUiSettings_GetFaviconStrategy/returns_parsed_when_set (0.00s) --- PASS: TestUiSettings_GetFaviconStrategy/returns_google_when_set (0.00s) --- PASS: TestUiSettings_GetFaviconStrategy/defaults_to_direct_for_unknown_value (0.00s) === RUN TestSecurityCacheSettings_GetTTL === RUN TestSecurityCacheSettings_GetTTL/defaults_to_24h_when_TTLHours_is_zero === RUN TestSecurityCacheSettings_GetTTL/returns_configured_TTL === RUN TestSecurityCacheSettings_GetTTL/defaults_to_24h_for_negative_value --- PASS: TestSecurityCacheSettings_GetTTL (0.00s) --- PASS: TestSecurityCacheSettings_GetTTL/defaults_to_24h_when_TTLHours_is_zero (0.00s) --- PASS: TestSecurityCacheSettings_GetTTL/returns_configured_TTL (0.00s) --- PASS: TestSecurityCacheSettings_GetTTL/defaults_to_24h_for_negative_value (0.00s) === RUN TestURL_GetDomain === RUN TestURL_GetDomain/domain_is_returned_from_full_URL_with_path_and_query === RUN TestURL_GetDomain/subdomain_is_not_www === RUN TestURL_GetDomain/domain_is_returned_even_if_there_is_no_subdomain === RUN TestURL_GetDomain/domain_is_correctly_returned_even_if_TLD_has_multiple_parts === RUN TestURL_GetDomain/domain_is_correctly_returned_even_if_the_subdomain_has_multiple_parts === RUN TestURL_GetDomain/domain_is_correctly_returned_even_if_the_brits_make_your_life_a_living_hell === RUN TestURL_GetDomain/ip_address_will_be_returned_as_is --- PASS: TestURL_GetDomain (0.00s) --- PASS: TestURL_GetDomain/domain_is_returned_from_full_URL_with_path_and_query (0.00s) --- PASS: TestURL_GetDomain/subdomain_is_not_www (0.00s) --- PASS: TestURL_GetDomain/domain_is_returned_even_if_there_is_no_subdomain (0.00s) --- PASS: TestURL_GetDomain/domain_is_correctly_returned_even_if_TLD_has_multiple_parts (0.00s) --- PASS: TestURL_GetDomain/domain_is_correctly_returned_even_if_the_subdomain_has_multiple_parts (0.00s) --- PASS: TestURL_GetDomain/domain_is_correctly_returned_even_if_the_brits_make_your_life_a_living_hell (0.00s) --- PASS: TestURL_GetDomain/ip_address_will_be_returned_as_is (0.00s) === RUN TestURL_GetDomain_ErrorCases === RUN TestURL_GetDomain_ErrorCases/invalid_URL_returns_error === RUN TestURL_GetDomain_ErrorCases/empty_string_returns_error --- PASS: TestURL_GetDomain_ErrorCases (0.00s) --- PASS: TestURL_GetDomain_ErrorCases/invalid_URL_returns_error (0.00s) --- PASS: TestURL_GetDomain_ErrorCases/empty_string_returns_error (0.00s) === RUN TestURL_GetDomain_WithPorts === RUN TestURL_GetDomain_WithPorts/port_is_stripped_from_standard_domain === RUN TestURL_GetDomain_WithPorts/port_is_stripped_from_localhost-like_domain === RUN TestURL_GetDomain_WithPorts/port_is_stripped_from_IP_address === RUN TestURL_GetDomain_WithPorts/non-standard_port_on_subdomain --- PASS: TestURL_GetDomain_WithPorts (0.00s) --- PASS: TestURL_GetDomain_WithPorts/port_is_stripped_from_standard_domain (0.00s) --- PASS: TestURL_GetDomain_WithPorts/port_is_stripped_from_localhost-like_domain (0.00s) --- PASS: TestURL_GetDomain_WithPorts/port_is_stripped_from_IP_address (0.00s) --- PASS: TestURL_GetDomain_WithPorts/non-standard_port_on_subdomain (0.00s) === RUN TestURL_GetSite_WithPorts === RUN TestURL_GetSite_WithPorts/site_includes_port_number === RUN TestURL_GetSite_WithPorts/site_includes_explicit_standard_port === RUN TestURL_GetSite_WithPorts/site_includes_non-standard_port_on_IP --- PASS: TestURL_GetSite_WithPorts (0.00s) --- PASS: TestURL_GetSite_WithPorts/site_includes_port_number (0.00s) --- PASS: TestURL_GetSite_WithPorts/site_includes_explicit_standard_port (0.00s) --- PASS: TestURL_GetSite_WithPorts/site_includes_non-standard_port_on_IP (0.00s) === RUN TestURL_GetSite === RUN TestURL_GetSite/site_is_returned_from_full_URL_with_path_and_query === RUN TestURL_GetSite/subdomain_is_not_www === RUN TestURL_GetSite/site_is_returned_even_if_there_is_no_subdomain === RUN TestURL_GetSite/site_is_correctly_returned_even_if_TLD_has_multiple_parts === RUN TestURL_GetSite/site_is_correctly_returned_even_if_the_subdomain_has_multiple_parts === RUN TestURL_GetSite/site_is_correctly_returned_even_if_the_brits_make_your_life_a_living_hell === RUN TestURL_GetSite/ip_address_will_be_returned_as_is === RUN TestURL_GetSite/non-http_URL_returns_empty_string === RUN TestURL_GetSite/empty_string_returns_empty === RUN TestURL_GetSite/just_a_path_returns_empty --- PASS: TestURL_GetSite (0.00s) --- PASS: TestURL_GetSite/site_is_returned_from_full_URL_with_path_and_query (0.00s) --- PASS: TestURL_GetSite/subdomain_is_not_www (0.00s) --- PASS: TestURL_GetSite/site_is_returned_even_if_there_is_no_subdomain (0.00s) --- PASS: TestURL_GetSite/site_is_correctly_returned_even_if_TLD_has_multiple_parts (0.00s) --- PASS: TestURL_GetSite/site_is_correctly_returned_even_if_the_subdomain_has_multiple_parts (0.00s) --- PASS: TestURL_GetSite/site_is_correctly_returned_even_if_the_brits_make_your_life_a_living_hell (0.00s) --- PASS: TestURL_GetSite/ip_address_will_be_returned_as_is (0.00s) --- PASS: TestURL_GetSite/non-http_URL_returns_empty_string (0.00s) --- PASS: TestURL_GetSite/empty_string_returns_empty (0.00s) --- PASS: TestURL_GetSite/just_a_path_returns_empty (0.00s) PASS ok github.com/strobotti/linkquisition 0.018s === RUN TestProcessPlugins_NoPlugins --- PASS: TestProcessPlugins_NoPlugins (0.00s) === RUN TestProcessPlugins_SinglePlugin_Continue --- PASS: TestProcessPlugins_SinglePlugin_Continue (0.00s) === RUN TestProcessPlugins_SinglePlugin_Block --- PASS: TestProcessPlugins_SinglePlugin_Block (0.00s) === RUN TestProcessPlugins_SinglePlugin_Warn --- PASS: TestProcessPlugins_SinglePlugin_Warn (0.00s) === RUN TestProcessPlugins_SinglePlugin_OpenDirect --- PASS: TestProcessPlugins_SinglePlugin_OpenDirect (0.00s) === RUN TestProcessPlugins_ChainStopsOnBlock --- PASS: TestProcessPlugins_ChainStopsOnBlock (0.00s) === RUN TestProcessPlugins_MultiplePlugins_Chained --- PASS: TestProcessPlugins_MultiplePlugins_Chained (0.00s) === RUN TestCollectUIHooks_NoPlugins --- PASS: TestCollectUIHooks_NoPlugins (0.00s) === RUN TestCollectUIHooks_NoHookPlugins --- PASS: TestCollectUIHooks_NoHookPlugins (0.00s) === RUN TestShutdownPlugins_Empty application_test.go:237: shutdownPlugins with no plugins did not panic --- PASS: TestShutdownPlugins_Empty (0.00s) === RUN TestShutdownPlugins_WithPlugins --- PASS: TestShutdownPlugins_WithPlugins (0.00s) === RUN TestRunBrowsersList_NoBrowsers --- PASS: TestRunBrowsersList_NoBrowsers (0.00s) === RUN TestRunBrowsersList_FormatsOutput --- PASS: TestRunBrowsersList_FormatsOutput (0.00s) === RUN TestBrowsersScan_Integration --- PASS: TestBrowsersScan_Integration (0.00s) === RUN TestBrowsersScan_CountsVisibleAndHidden --- PASS: TestBrowsersScan_CountsVisibleAndHidden (0.00s) === RUN TestGetSettingsValue_Locale --- PASS: TestGetSettingsValue_Locale (0.00s) === RUN TestGetSettingsValue_LogLevel --- PASS: TestGetSettingsValue_LogLevel (0.00s) === RUN TestGetSettingsValue_CaseInsensitive --- PASS: TestGetSettingsValue_CaseInsensitive (0.00s) === RUN TestGetSettingsValue_UnknownKey --- PASS: TestGetSettingsValue_UnknownKey (0.00s) === RUN TestSetSettingsValue_Locale --- PASS: TestSetSettingsValue_Locale (0.00s) === RUN TestSetSettingsValue_LogLevel_Valid --- PASS: TestSetSettingsValue_LogLevel_Valid (0.00s) === RUN TestSetSettingsValue_LogLevel_CaseInsensitiveValue --- PASS: TestSetSettingsValue_LogLevel_CaseInsensitiveValue (0.00s) === RUN TestSetSettingsValue_LogLevel_Invalid --- PASS: TestSetSettingsValue_LogLevel_Invalid (0.00s) === RUN TestSetSettingsValue_UnknownKey --- PASS: TestSetSettingsValue_UnknownKey (0.00s) === RUN TestGetSettingsValue_UITheme --- PASS: TestGetSettingsValue_UITheme (0.00s) === RUN TestGetSettingsValue_UITheme_Default --- PASS: TestGetSettingsValue_UITheme_Default (0.00s) === RUN TestSetSettingsValue_UITheme_Valid --- PASS: TestSetSettingsValue_UITheme_Valid (0.00s) === RUN TestSetSettingsValue_UITheme_Invalid --- PASS: TestSetSettingsValue_UITheme_Invalid (0.00s) === RUN TestConfigGetSet_Integration --- PASS: TestConfigGetSet_Integration (0.00s) === RUN TestFindPluginIndex_ExactName --- PASS: TestFindPluginIndex_ExactName (0.00s) === RUN TestFindPluginIndex_WithExtension --- PASS: TestFindPluginIndex_WithExtension (0.00s) === RUN TestFindPluginIndex_CaseInsensitive --- PASS: TestFindPluginIndex_CaseInsensitive (0.00s) === RUN TestFindPluginIndex_WithDirectory --- PASS: TestFindPluginIndex_WithDirectory (0.00s) === RUN TestFindPluginIndex_NotFound --- PASS: TestFindPluginIndex_NotFound (0.00s) === RUN TestPluginDisplayName --- PASS: TestPluginDisplayName (0.00s) === RUN TestSetPluginDisabledState_Integration --- PASS: TestSetPluginDisabledState_Integration (0.00s) === RUN TestDiscoverAvailablePlugins_FindsUnconfigured --- PASS: TestDiscoverAvailablePlugins_FindsUnconfigured (0.00s) === RUN TestDiscoverAvailablePlugins_IgnoresNonSoFiles --- PASS: TestDiscoverAvailablePlugins_IgnoresNonSoFiles (0.00s) === RUN TestDiscoverAvailablePlugins_EmptyDir --- PASS: TestDiscoverAvailablePlugins_EmptyDir (0.00s) === RUN TestDiscoverAvailablePlugins_NonexistentDir --- PASS: TestDiscoverAvailablePlugins_NonexistentDir (0.00s) === RUN TestFindBrowserByName_ExactMatch --- PASS: TestFindBrowserByName_ExactMatch (0.00s) === RUN TestFindBrowserByName_CaseInsensitive --- PASS: TestFindBrowserByName_CaseInsensitive (0.00s) === RUN TestFindBrowserByName_PartialMatch --- PASS: TestFindBrowserByName_PartialMatch (0.00s) === RUN TestFindBrowserByName_NotFound --- PASS: TestFindBrowserByName_NotFound (0.00s) === RUN TestFindBrowserByName_Ambiguous --- PASS: TestFindBrowserByName_Ambiguous (0.00s) === RUN TestFindBrowserByName_ExactMatchOverridesPartial --- PASS: TestFindBrowserByName_ExactMatchOverridesPartial (0.00s) === RUN TestRuleAdd_Integration --- PASS: TestRuleAdd_Integration (0.00s) === RUN TestRuleRemove_Integration --- PASS: TestRuleRemove_Integration (0.00s) === RUN TestSetDefault_AlreadyDefault --- PASS: TestSetDefault_AlreadyDefault (0.00s) === RUN TestSetDefault_Success --- PASS: TestSetDefault_Success (0.00s) === RUN TestSetDefault_Error --- PASS: TestSetDefault_Error (0.00s) === RUN TestSingleLine_NoNewlines --- PASS: TestSingleLine_NoNewlines (0.00s) === RUN TestSingleLine_WithNewlines --- PASS: TestSingleLine_WithNewlines (0.00s) === RUN TestSingleLine_ConsecutiveNewlines --- PASS: TestSingleLine_ConsecutiveNewlines (0.00s) === RUN TestSingleLine_Empty --- PASS: TestSingleLine_Empty (0.00s) === RUN TestSingleLine_OnlyNewlines --- PASS: TestSingleLine_OnlyNewlines (0.00s) === RUN TestTracePlugins_NoPlugins --- PASS: TestTracePlugins_NoPlugins (0.00s) === RUN TestTracePlugins_SinglePluginModifiesURL [1] strip-tracking: https://example.com/dirty?utm_source=test → https://example.com/clean --- PASS: TestTracePlugins_SinglePluginModifiesURL (0.00s) === RUN TestTracePlugins_PluginBlocks [1] blocker: ✗ BLOCKED Message: Blocked: known malware site (chain stopped) --- PASS: TestTracePlugins_PluginBlocks (0.00s) === RUN TestTracePlugins_PluginWarns [1] warner: ⚠ WARN Message: This URL looks suspicious (chain stopped) --- PASS: TestTracePlugins_PluginWarns (0.00s) === RUN TestTracePlugins_PluginOpenDirect [1] direct: → OPEN DIRECT (chain stopped) --- PASS: TestTracePlugins_PluginOpenDirect (0.00s) === RUN TestTracePlugins_ChainStopsOnBlock [1] blocker: ✗ BLOCKED Message: blocked (chain stopped) --- PASS: TestTracePlugins_ChainStopsOnBlock (0.00s) === RUN TestTracePlugins_ChainContinuesWithContinueChain [1] warn-but-continue: ⚠ WARN Message: heads up [2] modifier: https://example.com → https://example.com/modified --- PASS: TestTracePlugins_ChainContinuesWithContinueChain (0.00s) === RUN TestTracePlugins_MultiplePluginsModifyURL [1] step1: https://example.com/original → https://example.com/step1 [2] step2: https://example.com/step1 → https://example.com/step2 --- PASS: TestTracePlugins_MultiplePluginsModifyURL (0.00s) === RUN TestPrintBrowserMatch_BlockedSkips cmd_test_url_test.go:286: ok --- PASS: TestPrintBrowserMatch_BlockedSkips (0.00s) === RUN TestPrintBrowserMatch_OpenDirectSkips cmd_test_url_test.go:299: ok --- PASS: TestPrintBrowserMatch_OpenDirectSkips (0.00s) === RUN TestPrintBrowserMatch_MatchFound Browser matching: ✓ Matched: Firefox Command: firefox %u cmd_test_url_test.go:322: ok --- PASS: TestPrintBrowserMatch_MatchFound (0.00s) === RUN TestPrintBrowserMatch_NoMatch Browser matching: ✗ No rule matched — browser picker would be shown Available browsers: [1] Firefox cmd_test_url_test.go:346: ok --- PASS: TestPrintBrowserMatch_NoMatch (0.00s) === RUN TestPrintOutcome_Continue_NoChange cmd_test_url_test.go:357: ok --- PASS: TestPrintOutcome_Continue_NoChange (0.00s) === RUN TestPrintOutcome_Continue_URLChanged Final URL: https://example.com/clean cmd_test_url_test.go:368: ok --- PASS: TestPrintOutcome_Continue_URLChanged (0.00s) === RUN TestPrintOutcome_Block Result: BLOCKED Blocked by policy cmd_test_url_test.go:378: ok --- PASS: TestPrintOutcome_Block (0.00s) === RUN TestPrintOutcome_Warn Result: WARN (user would be prompted) Suspicious URL detected URL if user proceeds: https://suspicious.com cmd_test_url_test.go:388: ok --- PASS: TestPrintOutcome_Warn (0.00s) === RUN TestPrintOutcome_OpenDirect Result: OPEN DIRECT (bypass browser matching) URL: https://direct.com cmd_test_url_test.go:397: ok --- PASS: TestPrintOutcome_OpenDirect (0.00s) === RUN TestPrintPluginStep_Continue_Unchanged [1] sanitize: (unchanged) cmd_test_url_test.go:407: ok --- PASS: TestPrintPluginStep_Continue_Unchanged (0.00s) === RUN TestPrintPluginStep_Continue_Changed [1] sanitize: https://example.com/dirty → https://example.com/clean cmd_test_url_test.go:416: ok --- PASS: TestPrintPluginStep_Continue_Changed (0.00s) === RUN TestPrintPluginStep_Block [1] defang: ✗ BLOCKED Message: Blocked Multi-line message cmd_test_url_test.go:426: ok --- PASS: TestPrintPluginStep_Block (0.00s) === RUN TestPrintPluginStep_Warn [1] shenanigans: ⚠ WARN Message: Be careful cmd_test_url_test.go:436: ok --- PASS: TestPrintPluginStep_Warn (0.00s) === RUN TestPrintPluginStep_OpenDirect [1] terminus: → OPEN DIRECT cmd_test_url_test.go:445: ok --- PASS: TestPrintPluginStep_OpenDirect (0.00s) === RUN TestResolvePluginPathFromDisk_AbsolutePath --- PASS: TestResolvePluginPathFromDisk_AbsolutePath (0.00s) === RUN TestResolvePluginPathFromDisk_AppendsSoExtension --- PASS: TestResolvePluginPathFromDisk_AppendsSoExtension (0.00s) === RUN TestResolvePluginPathFromDisk_FallsBackToPluginFolder --- PASS: TestResolvePluginPathFromDisk_FallsBackToPluginFolder (0.00s) === RUN TestResolvePluginPathFromDisk_NotFound --- PASS: TestResolvePluginPathFromDisk_NotFound (0.00s) === RUN TestBrowserMatchesFilter_EmptyFilter --- PASS: TestBrowserMatchesFilter_EmptyFilter (0.00s) === RUN TestBrowserMatchesFilter_MatchesBrowserName --- PASS: TestBrowserMatchesFilter_MatchesBrowserName (0.00s) === RUN TestBrowserMatchesFilter_MatchesRuleValue --- PASS: TestBrowserMatchesFilter_MatchesRuleValue (0.00s) === RUN TestBrowserMatchesFilter_NoMatch --- PASS: TestBrowserMatchesFilter_NoMatch (0.00s) === RUN TestBrowserMatchesFilter_CaseInsensitive --- PASS: TestBrowserMatchesFilter_CaseInsensitive (0.00s) === RUN TestBrowserMatchesFilter_NoRules --- PASS: TestBrowserMatchesFilter_NoRules (0.00s) === RUN TestOpenExternalURLWithService_NotDefault --- PASS: TestOpenExternalURLWithService_NotDefault (0.00s) === RUN TestOpenExternalURLWithService_IsDefault_UseFirstBrowser --- PASS: TestOpenExternalURLWithService_IsDefault_UseFirstBrowser (0.00s) === RUN TestOpenExternalURLWithService_IsDefault_NoBrowsers_Fallback --- PASS: TestOpenExternalURLWithService_IsDefault_NoBrowsers_Fallback (0.00s) === RUN TestBuildDefaultSettings_ScalarTypes === PAUSE TestBuildDefaultSettings_ScalarTypes === RUN TestBuildDefaultSettings_NoDefaultOmitted === PAUSE TestBuildDefaultSettings_NoDefaultOmitted === RUN TestBuildDefaultSettings_StringList === PAUSE TestBuildDefaultSettings_StringList === RUN TestGetSettingStringList_WithDefault === PAUSE TestGetSettingStringList_WithDefault === RUN TestRotateLogFile_NoFile --- PASS: TestRotateLogFile_NoFile (0.00s) === RUN TestRotateLogFile_SmallFile --- PASS: TestRotateLogFile_SmallFile (0.00s) === RUN TestRotateLogFile_LargeFile --- PASS: TestRotateLogFile_LargeFile (0.00s) === RUN TestRotateLogFile_OverwritesOldBackup --- PASS: TestRotateLogFile_OverwritesOldBackup (0.00s) === RUN TestRotateLogFile_LogFilePath --- PASS: TestRotateLogFile_LogFilePath (0.00s) === RUN TestNormalizeInputURL_HTTPURLs === RUN TestNormalizeInputURL_HTTPURLs/https_URL_passes_through_unchanged === RUN TestNormalizeInputURL_HTTPURLs/http_URL_passes_through_unchanged --- PASS: TestNormalizeInputURL_HTTPURLs (0.00s) --- PASS: TestNormalizeInputURL_HTTPURLs/https_URL_passes_through_unchanged (0.00s) --- PASS: TestNormalizeInputURL_HTTPURLs/http_URL_passes_through_unchanged (0.00s) === RUN TestNormalizeInputURL_FileURLs === RUN TestNormalizeInputURL_FileURLs/file://_URL_passes_through_unchanged === RUN TestNormalizeInputURL_FileURLs/file://_URL_with_spaces_passes_through_unchanged --- PASS: TestNormalizeInputURL_FileURLs (0.00s) --- PASS: TestNormalizeInputURL_FileURLs/file://_URL_passes_through_unchanged (0.00s) --- PASS: TestNormalizeInputURL_FileURLs/file://_URL_with_spaces_passes_through_unchanged (0.00s) === RUN TestNormalizeInputURL_AbsolutePaths --- PASS: TestNormalizeInputURL_AbsolutePaths (0.00s) === RUN TestNormalizeInputURL_RelativePaths --- PASS: TestNormalizeInputURL_RelativePaths (0.00s) === RUN TestNormalizeInputURL_NonExistentRelativePath --- PASS: TestNormalizeInputURL_NonExistentRelativePath (0.00s) === RUN TestIsRelativePath === RUN TestIsRelativePath/URL_with_scheme_is_not_a_relative_path === RUN TestIsRelativePath/file://_URL_is_not_a_relative_path === RUN TestIsRelativePath/non-existent_file_is_not_detected_as_relative_path --- PASS: TestIsRelativePath (0.00s) --- PASS: TestIsRelativePath/URL_with_scheme_is_not_a_relative_path (0.00s) --- PASS: TestIsRelativePath/file://_URL_is_not_a_relative_path (0.00s) --- PASS: TestIsRelativePath/non-existent_file_is_not_detected_as_relative_path (0.00s) === RUN TestIsRelativePath_ExistingFile --- PASS: TestIsRelativePath_ExistingFile (0.00s) === CONT TestBuildDefaultSettings_StringList === CONT TestGetSettingStringList_WithDefault === CONT TestBuildDefaultSettings_ScalarTypes --- PASS: TestBuildDefaultSettings_StringList (0.00s) === RUN TestGetSettingStringList_WithDefault/returns_nil_when_no_value_and_no_default === CONT TestBuildDefaultSettings_NoDefaultOmitted --- PASS: TestBuildDefaultSettings_ScalarTypes (0.00s) === PAUSE TestGetSettingStringList_WithDefault/returns_nil_when_no_value_and_no_default --- PASS: TestBuildDefaultSettings_NoDefaultOmitted (0.00s) === RUN TestGetSettingStringList_WithDefault/returns_default_when_no_value_in_settings === PAUSE TestGetSettingStringList_WithDefault/returns_default_when_no_value_in_settings === RUN TestGetSettingStringList_WithDefault/returns_value_from_settings_over_default === PAUSE TestGetSettingStringList_WithDefault/returns_value_from_settings_over_default === CONT TestGetSettingStringList_WithDefault/returns_nil_when_no_value_and_no_default === CONT TestGetSettingStringList_WithDefault/returns_value_from_settings_over_default === CONT TestGetSettingStringList_WithDefault/returns_default_when_no_value_in_settings --- PASS: TestGetSettingStringList_WithDefault (0.00s) --- PASS: TestGetSettingStringList_WithDefault/returns_nil_when_no_value_and_no_default (0.00s) --- PASS: TestGetSettingStringList_WithDefault/returns_value_from_settings_over_default (0.00s) --- PASS: TestGetSettingStringList_WithDefault/returns_default_when_no_value_in_settings (0.00s) PASS ok github.com/strobotti/linkquisition/cmd 0.059s === RUN TestFetcher_FetchDirect --- PASS: TestFetcher_FetchDirect (0.00s) === RUN TestFetcher_FetchDirect_404 --- PASS: TestFetcher_FetchDirect_404 (0.00s) === RUN TestFetcher_FetchParsed --- PASS: TestFetcher_FetchParsed (0.00s) === RUN TestFetcher_FetchParsed_FallbackToDirect --- PASS: TestFetcher_FetchParsed_FallbackToDirect (0.00s) === RUN TestFetcher_FetchGoogle --- PASS: TestFetcher_FetchGoogle (0.00s) === RUN TestFetcher_Cache --- PASS: TestFetcher_Cache (0.00s) === RUN TestFetcher_Cache_Expired --- PASS: TestFetcher_Cache_Expired (0.00s) === RUN TestFetcher_InvalidURL --- PASS: TestFetcher_InvalidURL (0.00s) === RUN TestFetcher_EmptyHost --- PASS: TestFetcher_EmptyHost (0.00s) === RUN TestFetcher_ContextCanceled --- PASS: TestFetcher_ContextCanceled (0.00s) === RUN TestFetcher_RejectsHTMLResponse --- PASS: TestFetcher_RejectsHTMLResponse (0.00s) === RUN TestFetcher_RejectsNonImageData --- PASS: TestFetcher_RejectsNonImageData (0.00s) === RUN TestFetcher_CacheEvictsInvalidData --- PASS: TestFetcher_CacheEvictsInvalidData (0.00s) === RUN TestIsImageData === RUN TestIsImageData/PNG === RUN TestIsImageData/JPEG === RUN TestIsImageData/GIF87a === RUN TestIsImageData/GIF89a === RUN TestIsImageData/ICO === RUN TestIsImageData/BMP === RUN TestIsImageData/WebP === RUN TestIsImageData/SVG === RUN TestIsImageData/HTML === RUN TestIsImageData/JSON === RUN TestIsImageData/too_short === RUN TestIsImageData/empty --- PASS: TestIsImageData (0.00s) --- PASS: TestIsImageData/PNG (0.00s) --- PASS: TestIsImageData/JPEG (0.00s) --- PASS: TestIsImageData/GIF87a (0.00s) --- PASS: TestIsImageData/GIF89a (0.00s) --- PASS: TestIsImageData/ICO (0.00s) --- PASS: TestIsImageData/BMP (0.00s) --- PASS: TestIsImageData/WebP (0.00s) --- PASS: TestIsImageData/SVG (0.00s) --- PASS: TestIsImageData/HTML (0.00s) --- PASS: TestIsImageData/JSON (0.00s) --- PASS: TestIsImageData/too_short (0.00s) --- PASS: TestIsImageData/empty (0.00s) === RUN TestIsImageContentType === RUN TestIsImageContentType/image/png === RUN TestIsImageContentType/image/x-icon === RUN TestIsImageContentType/image/svg+xml === RUN TestIsImageContentType/image/png_with_charset === RUN TestIsImageContentType/text/html === RUN TestIsImageContentType/text/html_with_charset === RUN TestIsImageContentType/application/json === RUN TestIsImageContentType/empty --- PASS: TestIsImageContentType (0.00s) --- PASS: TestIsImageContentType/image/png (0.00s) --- PASS: TestIsImageContentType/image/x-icon (0.00s) --- PASS: TestIsImageContentType/image/svg+xml (0.00s) --- PASS: TestIsImageContentType/image/png_with_charset (0.00s) --- PASS: TestIsImageContentType/text/html (0.00s) --- PASS: TestIsImageContentType/text/html_with_charset (0.00s) --- PASS: TestIsImageContentType/application/json (0.00s) --- PASS: TestIsImageContentType/empty (0.00s) === RUN TestResolveIconURL === RUN TestResolveIconURL/absolute_https_URL === RUN TestResolveIconURL/absolute_http_URL === RUN TestResolveIconURL/protocol-relative_URL === RUN TestResolveIconURL/relative_path === RUN TestResolveIconURL/relative_path_without_leading_slash === RUN TestResolveIconURL/empty_href === RUN TestResolveIconURL/whitespace-only_href --- PASS: TestResolveIconURL (0.00s) --- PASS: TestResolveIconURL/absolute_https_URL (0.00s) --- PASS: TestResolveIconURL/absolute_http_URL (0.00s) --- PASS: TestResolveIconURL/protocol-relative_URL (0.00s) --- PASS: TestResolveIconURL/relative_path (0.00s) --- PASS: TestResolveIconURL/relative_path_without_leading_slash (0.00s) --- PASS: TestResolveIconURL/empty_href (0.00s) --- PASS: TestResolveIconURL/whitespace-only_href (0.00s) === RUN TestLinkIconRegex === RUN TestLinkIconRegex/standard_rel=icon === RUN TestLinkIconRegex/shortcut_icon === RUN TestLinkIconRegex/apple-touch-icon === RUN TestLinkIconRegex/with_type_attribute === RUN TestLinkIconRegex/single_quotes === RUN TestLinkIconRegex/no_match --- PASS: TestLinkIconRegex (0.00s) --- PASS: TestLinkIconRegex/standard_rel=icon (0.00s) --- PASS: TestLinkIconRegex/shortcut_icon (0.00s) --- PASS: TestLinkIconRegex/apple-touch-icon (0.00s) --- PASS: TestLinkIconRegex/with_type_attribute (0.00s) --- PASS: TestLinkIconRegex/single_quotes (0.00s) --- PASS: TestLinkIconRegex/no_match (0.00s) PASS ok github.com/strobotti/linkquisition/internal/favicon 0.013s === RUN TestDesktopEntryHasCategory_MatchesWebBrowser --- PASS: TestDesktopEntryHasCategory_MatchesWebBrowser (0.00s) === RUN TestDesktopEntryHasCategory_DoesNotMatchOtherCategory --- PASS: TestDesktopEntryHasCategory_DoesNotMatchOtherCategory (0.00s) === RUN TestDesktopEntryHasCategory_NoCategoriesLine --- PASS: TestDesktopEntryHasCategory_NoCategoriesLine (0.00s) === RUN TestDesktopEntryHasCategory_MissingFile --- PASS: TestDesktopEntryHasCategory_MissingFile (0.00s) === RUN TestDesktopEntryHasCategory_EmptyCategoriesLine --- PASS: TestDesktopEntryHasCategory_EmptyCategoriesLine (0.00s) === RUN TestDesktopEntryExecMatches_FullPath --- PASS: TestDesktopEntryExecMatches_FullPath (0.00s) === RUN TestDesktopEntryExecMatches_BaseName --- PASS: TestDesktopEntryExecMatches_BaseName (0.00s) === RUN TestDesktopEntryExecMatches_NoMatch --- PASS: TestDesktopEntryExecMatches_NoMatch (0.00s) === RUN TestDesktopEntryExecMatches_NoExecLine --- PASS: TestDesktopEntryExecMatches_NoExecLine (0.00s) === RUN TestDesktopEntryExecMatches_MissingFile --- PASS: TestDesktopEntryExecMatches_MissingFile (0.00s) === RUN TestGetApplicationPaths_UsesXDGDataDirs --- PASS: TestGetApplicationPaths_UsesXDGDataDirs (0.00s) === RUN TestGetApplicationPaths_DefaultsWhenUnset --- PASS: TestGetApplicationPaths_DefaultsWhenUnset (0.00s) === RUN TestGetDesktopEntryPathForFilename_Found --- PASS: TestGetDesktopEntryPathForFilename_Found (0.00s) === RUN TestGetDesktopEntryPathForFilename_NotFound --- PASS: TestGetDesktopEntryPathForFilename_NotFound (0.00s) === RUN TestGetDesktopEntryPathForBinary_Found --- PASS: TestGetDesktopEntryPathForBinary_Found (0.00s) === RUN TestGetDesktopEntryPathForBinary_MatchesBasename --- PASS: TestGetDesktopEntryPathForBinary_MatchesBasename (0.00s) === RUN TestGetDesktopEntryPathForBinary_NotFound --- PASS: TestGetDesktopEntryPathForBinary_NotFound (0.00s) === RUN TestGetAvailableBrowsers_FindsWebBrowsers --- PASS: TestGetAvailableBrowsers_FindsWebBrowsers (0.00s) === RUN TestGetAvailableBrowsers_SkipsLinkquisition --- PASS: TestGetAvailableBrowsers_SkipsLinkquisition (0.00s) === RUN TestGetAvailableBrowsers_EmptyPaths --- PASS: TestGetAvailableBrowsers_EmptyPaths (0.00s) === RUN TestExtractExecutable_FullPath --- PASS: TestExtractExecutable_FullPath (0.00s) === RUN TestExtractExecutable_FullPathWithMultipleArgs --- PASS: TestExtractExecutable_FullPathWithMultipleArgs (0.00s) === RUN TestExtractExecutable_BasenameOnly --- PASS: TestExtractExecutable_BasenameOnly (0.00s) === RUN TestExtractExecutable_EmptyString --- PASS: TestExtractExecutable_EmptyString (0.00s) === RUN TestExtractExecutable_ExpandsTilde --- PASS: TestExtractExecutable_ExpandsTilde (0.00s) === RUN TestExtractExecutable_ExpandsEnvVar --- PASS: TestExtractExecutable_ExpandsEnvVar (0.00s) === RUN TestDesktopEntryExecMatches_CommandWithExtraArgs --- PASS: TestDesktopEntryExecMatches_CommandWithExtraArgs (0.00s) === RUN TestDesktopEntryExecMatches_EnvVarInCommand --- PASS: TestDesktopEntryExecMatches_EnvVarInCommand (0.00s) === RUN TestGetApplicationPaths_IncludesUserLocal --- PASS: TestGetApplicationPaths_IncludesUserLocal (0.00s) PASS ok github.com/strobotti/linkquisition/internal/freedesktop 0.012s === RUN TestInit_DefaultEnglish --- PASS: TestInit_DefaultEnglish (0.01s) === RUN TestInit_ExplicitOverride --- PASS: TestInit_ExplicitOverride (0.01s) === RUN TestT_WithTemplateData --- PASS: TestT_WithTemplateData (0.01s) === RUN TestT_UnknownMessageID --- PASS: TestT_UnknownMessageID (0.01s) === RUN TestInit_UnsupportedLocale_FallsBackToEnglish --- PASS: TestInit_UnsupportedLocale_FallsBackToEnglish (0.01s) === RUN TestInit_FinnishLocale --- PASS: TestInit_FinnishLocale (0.01s) === RUN TestInit_FinnishLocale_WithTemplateData --- PASS: TestInit_FinnishLocale_WithTemplateData (0.01s) === RUN TestInit_SpanishLocale --- PASS: TestInit_SpanishLocale (0.01s) === RUN TestInit_SwedishLocale --- PASS: TestInit_SwedishLocale (0.01s) === RUN TestDetectLocale_OverrideTakesPrecedence --- PASS: TestDetectLocale_OverrideTakesPrecedence (0.00s) === RUN TestDetectLocale_EmptyOverrideFallsBack --- PASS: TestDetectLocale_EmptyOverrideFallsBack (0.00s) === RUN TestAvailableLocales --- PASS: TestAvailableLocales (0.00s) === RUN TestLocaleDisplayName === RUN TestLocaleDisplayName/de === RUN TestLocaleDisplayName/en === RUN TestLocaleDisplayName/es === RUN TestLocaleDisplayName/fi === RUN TestLocaleDisplayName/fr === RUN TestLocaleDisplayName/hu === RUN TestLocaleDisplayName/pt === RUN TestLocaleDisplayName/pt-BR === RUN TestLocaleDisplayName/sv === RUN TestLocaleDisplayName/uk === RUN TestLocaleDisplayName/unknown === RUN TestLocaleDisplayName/#00 --- PASS: TestLocaleDisplayName (0.00s) --- PASS: TestLocaleDisplayName/de (0.00s) --- PASS: TestLocaleDisplayName/en (0.00s) --- PASS: TestLocaleDisplayName/es (0.00s) --- PASS: TestLocaleDisplayName/fi (0.00s) --- PASS: TestLocaleDisplayName/fr (0.00s) --- PASS: TestLocaleDisplayName/hu (0.00s) --- PASS: TestLocaleDisplayName/pt (0.00s) --- PASS: TestLocaleDisplayName/pt-BR (0.00s) --- PASS: TestLocaleDisplayName/sv (0.00s) --- PASS: TestLocaleDisplayName/uk (0.00s) --- PASS: TestLocaleDisplayName/unknown (0.00s) --- PASS: TestLocaleDisplayName/#00 (0.00s) === RUN TestTWithCount_FallbackOnMissingPluralForms --- PASS: TestTWithCount_FallbackOnMissingPluralForms (0.01s) === RUN TestTWithCount_WithCustomTemplateData --- PASS: TestTWithCount_WithCustomTemplateData (0.01s) === RUN TestTWithCount_ZeroCount --- PASS: TestTWithCount_ZeroCount (0.01s) === RUN TestT_NilTemplateData --- PASS: TestT_NilTemplateData (0.01s) PASS ok github.com/strobotti/linkquisition/internal/i18n 0.127s === RUN TestSanitizeEnviron_RemovesTargetVars --- PASS: TestSanitizeEnviron_RemovesTargetVars (0.00s) === RUN TestSanitizeEnviron_CaseInsensitive --- PASS: TestSanitizeEnviron_CaseInsensitive (0.00s) === RUN TestSanitizeEnviron_PreservesUnrelatedVars --- PASS: TestSanitizeEnviron_PreservesUnrelatedVars (0.00s) === RUN TestSanitizeEnviron_DoesNotMutateInput --- PASS: TestSanitizeEnviron_DoesNotMutateInput (0.00s) === RUN TestSanitizeEnviron_EmptyInput --- PASS: TestSanitizeEnviron_EmptyInput (0.00s) === RUN TestSanitizeEnviron_AllVarsStripped --- PASS: TestSanitizeEnviron_AllVarsStripped (0.00s) === RUN TestSanitizeEnviron_VarWithEqualsInValue --- PASS: TestSanitizeEnviron_VarWithEqualsInValue (0.00s) PASS ok github.com/strobotti/linkquisition/internal/launchenv 0.004s === RUN TestGenerate === RUN TestGenerate/generates_valid_PNG_for_URL === RUN TestGenerate/uses_default_size_when_zero === RUN TestGenerate/returns_error_for_empty_content === RUN TestGenerate/handles_long_URLs --- PASS: TestGenerate (0.01s) --- PASS: TestGenerate/generates_valid_PNG_for_URL (0.00s) --- PASS: TestGenerate/uses_default_size_when_zero (0.00s) --- PASS: TestGenerate/returns_error_for_empty_content (0.00s) --- PASS: TestGenerate/handles_long_URLs (0.01s) PASS ok github.com/strobotti/linkquisition/internal/qrcode 0.017s === RUN TestCache_PutAndGet --- PASS: TestCache_PutAndGet (0.00s) === RUN TestCache_Miss --- PASS: TestCache_Miss (0.00s) === RUN TestCache_Expired --- PASS: TestCache_Expired (0.00s) === RUN TestCache_SeparateProviders --- PASS: TestCache_SeparateProviders (0.00s) === RUN TestCache_Clear --- PASS: TestCache_Clear (0.00s) === RUN TestClearAll --- PASS: TestClearAll (0.00s) === RUN TestCache_PruneExpired --- PASS: TestCache_PruneExpired (0.10s) === RUN TestNewChecker === RUN TestNewChecker/google_safe_browsing === RUN TestNewChecker/virustotal === RUN TestNewChecker/unknown_provider --- PASS: TestNewChecker (0.00s) --- PASS: TestNewChecker/google_safe_browsing (0.00s) --- PASS: TestNewChecker/virustotal (0.00s) --- PASS: TestNewChecker/unknown_provider (0.00s) === RUN TestThreatLevelOrdering --- PASS: TestThreatLevelOrdering (0.00s) PASS ok github.com/strobotti/linkquisition/internal/safety 0.114s ? github.com/strobotti/linkquisition/internal/ui [no test files] === RUN TestIsNewerVersion === RUN TestIsNewerVersion/same_version === RUN TestIsNewerVersion/patch_newer === RUN TestIsNewerVersion/minor_newer === RUN TestIsNewerVersion/major_newer === RUN TestIsNewerVersion/current_is_newer === RUN TestIsNewerVersion/dev_build === RUN TestIsNewerVersion/empty_current === RUN TestIsNewerVersion/pre-release_suffix --- PASS: TestIsNewerVersion (0.00s) --- PASS: TestIsNewerVersion/same_version (0.00s) --- PASS: TestIsNewerVersion/patch_newer (0.00s) --- PASS: TestIsNewerVersion/minor_newer (0.00s) --- PASS: TestIsNewerVersion/major_newer (0.00s) --- PASS: TestIsNewerVersion/current_is_newer (0.00s) --- PASS: TestIsNewerVersion/dev_build (0.00s) --- PASS: TestIsNewerVersion/empty_current (0.00s) --- PASS: TestIsNewerVersion/pre-release_suffix (0.00s) === RUN TestParseSemver === RUN TestParseSemver/2.13.0 === RUN TestParseSemver/0.1.0 === RUN TestParseSemver/10.20.30 === RUN TestParseSemver/1.0.0-rc1 === RUN TestParseSemver/invalid === RUN TestParseSemver/1.2 === RUN TestParseSemver/a.b.c --- PASS: TestParseSemver (0.00s) --- PASS: TestParseSemver/2.13.0 (0.00s) --- PASS: TestParseSemver/0.1.0 (0.00s) --- PASS: TestParseSemver/10.20.30 (0.00s) --- PASS: TestParseSemver/1.0.0-rc1 (0.00s) --- PASS: TestParseSemver/invalid (0.00s) --- PASS: TestParseSemver/1.2 (0.00s) --- PASS: TestParseSemver/a.b.c (0.00s) === RUN TestCheck --- PASS: TestCheck (0.00s) === RUN TestCheckUpToDate --- PASS: TestCheckUpToDate (0.00s) === RUN TestCheckHTTPError --- PASS: TestCheckHTTPError (0.00s) PASS ok github.com/strobotti/linkquisition/internal/updater 0.007s === RUN TestExtractDomain === RUN TestExtractDomain/full_URL_with_www === RUN TestExtractDomain/full_URL_without_www === RUN TestExtractDomain/subdomain === RUN TestExtractDomain/URL_without_scheme === RUN TestExtractDomain/http_scheme === RUN TestExtractDomain/URL_with_port === RUN TestExtractDomain/empty_string --- PASS: TestExtractDomain (0.00s) --- PASS: TestExtractDomain/full_URL_with_www (0.00s) --- PASS: TestExtractDomain/full_URL_without_www (0.00s) --- PASS: TestExtractDomain/subdomain (0.00s) --- PASS: TestExtractDomain/URL_without_scheme (0.00s) --- PASS: TestExtractDomain/http_scheme (0.00s) --- PASS: TestExtractDomain/URL_with_port (0.00s) --- PASS: TestExtractDomain/empty_string (0.00s) PASS ok github.com/strobotti/linkquisition/internal/whois 0.006s ? github.com/strobotti/linkquisition/mock [no test files] === RUN TestDefang_Setup_Defaults --- PASS: TestDefang_Setup_Defaults (0.01s) === RUN TestDefang_Setup_InvalidDuration --- PASS: TestDefang_Setup_InvalidDuration (0.00s) === RUN TestDefang_Setup_InvalidAction --- PASS: TestDefang_Setup_InvalidAction (0.00s) === RUN TestDefang_ProcessURL_WithCachedBlocklist === RUN TestDefang_ProcessURL_WithCachedBlocklist/blocked_domain_returns_ActionBlock === RUN TestDefang_ProcessURL_WithCachedBlocklist/another_blocked_domain_returns_ActionBlock === RUN TestDefang_ProcessURL_WithCachedBlocklist/127.0.0.1_entries_are_also_blocked === RUN TestDefang_ProcessURL_WithCachedBlocklist/safe_domain_is_not_blocked === RUN TestDefang_ProcessURL_WithCachedBlocklist/localhost_is_not_blocked === RUN TestDefang_ProcessURL_WithCachedBlocklist/action=log_returns_ActionContinue === RUN TestDefang_ProcessURL_WithCachedBlocklist/action=warn_returns_ActionWarn === RUN TestDefang_ProcessURL_WithCachedBlocklist/subdomain_of_blocked_domain_is_also_blocked === RUN TestDefang_ProcessURL_WithCachedBlocklist/parent_domain_of_blocked_domain_is_NOT_blocked === RUN TestDefang_ProcessURL_WithCachedBlocklist/URL_with_port_on_blocked_domain_is_blocked === RUN TestDefang_ProcessURL_WithCachedBlocklist/invalid_URL_is_returned_unchanged --- PASS: TestDefang_ProcessURL_WithCachedBlocklist (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/blocked_domain_returns_ActionBlock (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/another_blocked_domain_returns_ActionBlock (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/127.0.0.1_entries_are_also_blocked (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/safe_domain_is_not_blocked (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/localhost_is_not_blocked (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/action=log_returns_ActionContinue (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/action=warn_returns_ActionWarn (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/subdomain_of_blocked_domain_is_also_blocked (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/parent_domain_of_blocked_domain_is_NOT_blocked (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/URL_with_port_on_blocked_domain_is_blocked (0.00s) --- PASS: TestDefang_ProcessURL_WithCachedBlocklist/invalid_URL_is_returned_unchanged (0.00s) === RUN TestDefang_BackgroundFetch --- PASS: TestDefang_BackgroundFetch (0.00s) === RUN TestDefang_BackgroundFetch_ServerError --- PASS: TestDefang_BackgroundFetch_ServerError (0.00s) === RUN TestDefang_Shutdown_NoUpdate --- PASS: TestDefang_Shutdown_NoUpdate (0.00s) === RUN TestDefang_CaseInsensitive --- PASS: TestDefang_CaseInsensitive (0.00s) === RUN TestDefang_CustomSources --- PASS: TestDefang_CustomSources (0.01s) === RUN TestDefang_Metadata --- PASS: TestDefang_Metadata (0.00s) PASS ok github.com/strobotti/linkquisition/plugins/defang 0.031s === RUN TestSanitize_Setup_Defaults --- PASS: TestSanitize_Setup_Defaults (0.00s) === RUN TestSanitize_Setup_InvalidRegex --- PASS: TestSanitize_Setup_InvalidRegex (0.00s) === RUN TestSanitize_ProcessURL === RUN TestSanitize_ProcessURL/URL_without_query_params_is_unchanged === RUN TestSanitize_ProcessURL/URL_with_no_tracking_params_is_unchanged === RUN TestSanitize_ProcessURL/UTM_params_are_stripped_by_default === RUN TestSanitize_ProcessURL/fbclid_is_stripped_by_default === RUN TestSanitize_ProcessURL/gclid_is_stripped_by_default === RUN TestSanitize_ProcessURL/msclkid_is_stripped_by_default === RUN TestSanitize_ProcessURL/all_tracking_params_stripped_leaves_clean_URL === RUN TestSanitize_ProcessURL/stripDefaults=false_disables_default_list === RUN TestSanitize_ProcessURL/extraParams_are_stripped === RUN TestSanitize_ProcessURL/extraPatterns_work_with_regex === RUN TestSanitize_ProcessURL/onlyMatchingUrls_limits_sanitization_to_matching_URLs === RUN TestSanitize_ProcessURL/onlyMatchingUrls_allows_sanitization_for_matching_URLs === RUN TestSanitize_ProcessURL/invalid_extraPatterns_regex_entries_are_skipped === RUN TestSanitize_ProcessURL/URL_with_fragment_is_preserved === RUN TestSanitize_ProcessURL/malformed_URL_is_returned_unchanged === RUN TestSanitize_ProcessURL/extraParams_and_defaults_work_together === RUN TestSanitize_ProcessURL/HubSpot_params_are_stripped_by_default === RUN TestSanitize_ProcessURL/Mailchimp_params_are_stripped_by_default --- PASS: TestSanitize_ProcessURL (0.00s) --- PASS: TestSanitize_ProcessURL/URL_without_query_params_is_unchanged (0.00s) --- PASS: TestSanitize_ProcessURL/URL_with_no_tracking_params_is_unchanged (0.00s) --- PASS: TestSanitize_ProcessURL/UTM_params_are_stripped_by_default (0.00s) --- PASS: TestSanitize_ProcessURL/fbclid_is_stripped_by_default (0.00s) --- PASS: TestSanitize_ProcessURL/gclid_is_stripped_by_default (0.00s) --- PASS: TestSanitize_ProcessURL/msclkid_is_stripped_by_default (0.00s) --- PASS: TestSanitize_ProcessURL/all_tracking_params_stripped_leaves_clean_URL (0.00s) --- PASS: TestSanitize_ProcessURL/stripDefaults=false_disables_default_list (0.00s) --- PASS: TestSanitize_ProcessURL/extraParams_are_stripped (0.00s) --- PASS: TestSanitize_ProcessURL/extraPatterns_work_with_regex (0.00s) --- PASS: TestSanitize_ProcessURL/onlyMatchingUrls_limits_sanitization_to_matching_URLs (0.00s) --- PASS: TestSanitize_ProcessURL/onlyMatchingUrls_allows_sanitization_for_matching_URLs (0.00s) --- PASS: TestSanitize_ProcessURL/invalid_extraPatterns_regex_entries_are_skipped (0.00s) --- PASS: TestSanitize_ProcessURL/URL_with_fragment_is_preserved (0.00s) --- PASS: TestSanitize_ProcessURL/malformed_URL_is_returned_unchanged (0.00s) --- PASS: TestSanitize_ProcessURL/extraParams_and_defaults_work_together (0.00s) --- PASS: TestSanitize_ProcessURL/HubSpot_params_are_stripped_by_default (0.00s) --- PASS: TestSanitize_ProcessURL/Mailchimp_params_are_stripped_by_default (0.00s) === RUN TestSanitize_Metadata --- PASS: TestSanitize_Metadata (0.00s) PASS ok github.com/strobotti/linkquisition/plugins/sanitize 0.006s === RUN TestShenanigans_Metadata --- PASS: TestShenanigans_Metadata (0.00s) === RUN TestShenanigans_Setup_DefaultEffect --- PASS: TestShenanigans_Setup_DefaultEffect (0.00s) === RUN TestShenanigans_Setup_SpecificEffect --- PASS: TestShenanigans_Setup_SpecificEffect (0.00s) === RUN TestShenanigans_ProcessURL_PassThrough --- PASS: TestShenanigans_ProcessURL_PassThrough (0.00s) === RUN TestShenanigans_ImplementsPluginUIHook --- PASS: TestShenanigans_ImplementsPluginUIHook (0.00s) === RUN TestShenanigans_OnPickerShown_Matrix --- PASS: TestShenanigans_OnPickerShown_Matrix (0.00s) === RUN TestShenanigans_OnPickerShown_Fire --- PASS: TestShenanigans_OnPickerShown_Fire (0.00s) === RUN TestShenanigans_OnPickerShown_Snow --- PASS: TestShenanigans_OnPickerShown_Snow (0.00s) === RUN TestSnowState_Update --- PASS: TestSnowState_Update (0.00s) === RUN TestShenanigans_OnPickerShown_Plasma --- PASS: TestShenanigans_OnPickerShown_Plasma (0.00s) === RUN TestPlasmaState_Render --- PASS: TestPlasmaState_Render (0.00s) === RUN TestShenanigans_OnPickerShown_Starfield --- PASS: TestShenanigans_OnPickerShown_Starfield (0.00s) === RUN TestStarfieldState_Update --- PASS: TestStarfieldState_Update (0.00s) === RUN TestShenanigans_OnPickerShown_Aurora --- PASS: TestShenanigans_OnPickerShown_Aurora (0.01s) === RUN TestShenanigans_OnPickerShown_Glitch --- PASS: TestShenanigans_OnPickerShown_Glitch (0.00s) === RUN TestGlitchState_BurstCycle --- PASS: TestGlitchState_BurstCycle (0.00s) === RUN TestShenanigans_OnPickerShown_Pride --- PASS: TestShenanigans_OnPickerShown_Pride (0.01s) === RUN TestShenanigans_OnPickerShown_Football --- PASS: TestShenanigans_OnPickerShown_Football (0.00s) === RUN TestShenanigans_OnPickerShown_Fireworks --- PASS: TestShenanigans_OnPickerShown_Fireworks (0.00s) === RUN TestShenanigans_Shutdown --- PASS: TestShenanigans_Shutdown (0.00s) === RUN TestFireState_Update --- PASS: TestFireState_Update (0.00s) === RUN TestFireState_Render --- PASS: TestFireState_Render (0.00s) === RUN TestMatrixState_InitAndUpdate --- PASS: TestMatrixState_InitAndUpdate (0.00s) === RUN TestMatrixState_Render --- PASS: TestMatrixState_Render (0.00s) === RUN TestFireColor --- PASS: TestFireColor (0.00s) PASS ok github.com/strobotti/linkquisition/plugins/shenanigans 0.037s === RUN TestTerminus_Setup_Defaults --- PASS: TestTerminus_Setup_Defaults (0.00s) === RUN TestTerminus_Setup_CustomSettings --- PASS: TestTerminus_Setup_CustomSettings (0.00s) === RUN TestTerminus_Setup_MalformedTimeout --- PASS: TestTerminus_Setup_MalformedTimeout (0.00s) === RUN TestTerminus_Setup_InvalidConfigType --- PASS: TestTerminus_Setup_InvalidConfigType (0.00s) === RUN TestTerminus_ProcessURL === RUN TestTerminus_ProcessURL/original_url_should_be_returned_if_no_redirect_is_detected === RUN TestTerminus_ProcessURL/a_url_from_location_-header_should_be_returned_if_a_redirect_is_detected === RUN TestTerminus_ProcessURL/a_chain_of_redirects_works_as_expected === RUN TestTerminus_ProcessURL/a_chain_of_redirects_is_capped_to_5_hops === RUN TestTerminus_ProcessURL/location_is_a_relative_path_will_not_be_resolved === RUN TestTerminus_ProcessURL/location_is_to_the_same_exact_host_will_not_be_resolved === RUN TestTerminus_ProcessURL/location_is_to_the_same_exact_host_but_the_scheme_is_upgraded_from_http_to_https_will_be_resolved --- PASS: TestTerminus_ProcessURL (0.00s) --- PASS: TestTerminus_ProcessURL/original_url_should_be_returned_if_no_redirect_is_detected (0.00s) --- PASS: TestTerminus_ProcessURL/a_url_from_location_-header_should_be_returned_if_a_redirect_is_detected (0.00s) --- PASS: TestTerminus_ProcessURL/a_chain_of_redirects_works_as_expected (0.00s) --- PASS: TestTerminus_ProcessURL/a_chain_of_redirects_is_capped_to_5_hops (0.00s) --- PASS: TestTerminus_ProcessURL/location_is_a_relative_path_will_not_be_resolved (0.00s) --- PASS: TestTerminus_ProcessURL/location_is_to_the_same_exact_host_will_not_be_resolved (0.00s) --- PASS: TestTerminus_ProcessURL/location_is_to_the_same_exact_host_but_the_scheme_is_upgraded_from_http_to_https_will_be_resolved (0.00s) === RUN TestTerminus_Metadata --- PASS: TestTerminus_Metadata (0.00s) PASS ok github.com/strobotti/linkquisition/plugins/terminus 0.007s === RUN TestUnwrap_ProcessURL_EdgeCases === RUN TestUnwrap_ProcessURL_EdgeCases/empty_match_rule_is_skipped_gracefully === RUN TestUnwrap_ProcessURL_EdgeCases/matching_URL_but_missing_query_parameter_returns_original_URL === RUN TestUnwrap_ProcessURL_EdgeCases/no_rules_configured_returns_original_URL === RUN TestUnwrap_ProcessURL_EdgeCases/multiple_rules,_second_one_matches --- PASS: TestUnwrap_ProcessURL_EdgeCases (0.00s) --- PASS: TestUnwrap_ProcessURL_EdgeCases/empty_match_rule_is_skipped_gracefully (0.00s) --- PASS: TestUnwrap_ProcessURL_EdgeCases/matching_URL_but_missing_query_parameter_returns_original_URL (0.00s) --- PASS: TestUnwrap_ProcessURL_EdgeCases/no_rules_configured_returns_original_URL (0.00s) --- PASS: TestUnwrap_ProcessURL_EdgeCases/multiple_rules,_second_one_matches (0.00s) === RUN TestUnwrap_Setup_InvalidConfig --- PASS: TestUnwrap_Setup_InvalidConfig (0.00s) === RUN TestUnwrap_ProcessURL === RUN TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_unwrapped === RUN TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_not_unwrapped_if_the_URL_does_not_match_the_rule === RUN TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_not_unwrapped_if_the_unwrapped_URL_would_not_match_any_browser_rules === RUN TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_unwrapped_if_the_unwrapped_URL_would_match_a_browser_rule === RUN TestUnwrap_ProcessURL/Outlook_SafeLinks_(safelinks.protection.outlook.com)_are_unwrapped --- PASS: TestUnwrap_ProcessURL (0.00s) --- PASS: TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_unwrapped (0.00s) --- PASS: TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_not_unwrapped_if_the_URL_does_not_match_the_rule (0.00s) --- PASS: TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_not_unwrapped_if_the_unwrapped_URL_would_not_match_any_browser_rules (0.00s) --- PASS: TestUnwrap_ProcessURL/Microsoft_Teams_Defender_Safelinks_are_unwrapped_if_the_unwrapped_URL_would_match_a_browser_rule (0.00s) --- PASS: TestUnwrap_ProcessURL/Outlook_SafeLinks_(safelinks.protection.outlook.com)_are_unwrapped (0.00s) === RUN TestUnwrap_Metadata --- PASS: TestUnwrap_Metadata (0.00s) PASS ok github.com/strobotti/linkquisition/plugins/unwrap 0.006s ? github.com/strobotti/linkquisition/resources [no test files] >>> linkquisition: Entering fakeroot... >>> linkquisition-doc*: Running split function doc... 'usr/share/man' -> '/home/buildozer/aports/testing/linkquisition/pkg/linkquisition-doc/usr/share/man' 'usr/share/licenses' -> '/home/buildozer/aports/testing/linkquisition/pkg/linkquisition-doc/usr/share/licenses' >>> linkquisition-doc*: Preparing subpackage linkquisition-doc... >>> linkquisition-doc*: Running postcheck for linkquisition-doc >>> linkquisition*: Running postcheck for linkquisition >>> linkquisition*: Preparing package linkquisition... >>> linkquisition*: Stripping binaries >>> linkquisition*: Scanning shared objects >>> linkquisition*: Tracing dependencies... libdecor mesa-egl mesa-gl so:libGL.so.1 so:libc.musl-x86_64.so.1 so:libwayland-client.so.0 >>> linkquisition*: Package size: 33.8 MB >>> linkquisition*: Compressing data... >>> linkquisition*: Create checksum... >>> linkquisition*: Create linkquisition-3.1.10-r0.apk >>> linkquisition-doc*: Tracing dependencies... >>> linkquisition-doc*: Package size: 7.1 KB >>> linkquisition-doc*: Compressing data... >>> linkquisition-doc*: Create checksum... >>> linkquisition-doc*: Create linkquisition-doc-3.1.10-r0.apk >>> linkquisition: Build complete at Tue, 06 Oct 2026 00:59:33 +0000 elapsed time 0h 3m 21s >>> linkquisition: Cleaning up srcdir >>> linkquisition: Cleaning up pkgdir >>> linkquisition: Cleaning up tmpdir >>> linkquisition: Uninstalling dependencies... ( 1/95) Purging .makedepends-linkquisition (20261006.005612) ( 2/95) Purging libdecor (0.2.5-r0) ( 3/95) Purging bash (5.3.9-r2) Executing bash-5.3.9-r2.pre-deinstall ( 4/95) Purging go (1.27.1-r0) ( 5/95) Purging libxkbcommon-dev (1.13.2-r0) ( 6/95) Purging libxkbcommon-x11 (1.13.2-r0) ( 7/95) Purging libxkbcommon (1.13.2-r0) ( 8/95) Purging xkeyboard-config (2.48-r0) ( 9/95) Purging mesa-dev (26.2.4-r0) (10/95) Purging libxdamage-dev (1.1.7-r0) (11/95) Purging libxdamage (1.1.7-r0) (12/95) Purging libxshmfence-dev (1.3.3-r0) (13/95) Purging mesa-egl (26.2.4-r0) (14/95) Purging mesa-gbm (26.2.4-r0) (15/95) Purging mesa-gl (26.2.4-r0) (16/95) Purging mesa-gles (26.2.4-r0) (17/95) Purging mesa-rusticl (26.2.4-r0) (18/95) Purging mesa (26.2.4-r0) (19/95) Purging clang23-headers (23.1.2-r0) (20/95) Purging libclc (23.1.2-r0) (21/95) Purging scdoc (1.11.5-r0) (22/95) Purging wayland-dev (1.26.0-r0) (23/95) Purging expat-dev (2.8.5-r0) (24/95) Purging expat (2.8.5-r0) (25/95) Purging wayland-libs-cursor (1.26.0-r0) (26/95) Purging wayland-libs-egl (1.26.0-r0) (27/95) Purging wayland-libs-server (1.26.0-r0) (28/95) Purging clang23-libs (23.1.2-r0) (29/95) Purging dbus-libs (1.16.2-r3) (30/95) Purging libdrm-dev (2.4.134-r0) (31/95) Purging libdrm (2.4.134-r0) (32/95) Purging libelf (0.195-r0) (33/95) Purging libffi-dev (3.8.0-r0) (34/95) Purging linux-headers (7.2.1-r0) (35/95) Purging libpciaccess-dev (0.19-r0) (36/95) Purging libpciaccess (0.19-r0) (37/95) Purging hwdata-pci (0.412-r0) (38/95) Purging libxfixes-dev (6.0.2-r0) (39/95) Purging libxfixes (6.0.2-r0) (40/95) Purging libxml2-dev (2.13.9-r2) (41/95) Purging libxml2-utils (2.13.9-r2) (42/95) Purging libxshmfence (1.3.3-r0) (43/95) Purging libxxf86vm-dev (1.1.7-r0) (44/95) Purging libxxf86vm (1.1.7-r0) (45/95) Purging pango (1.58.2-r0) (46/95) Purging python3-pyc (3.14.8-r0) (47/95) Purging python3-pycache-pyc0 (3.14.8-r0) (48/95) Purging xcb-proto-pyc (1.17.0-r1) (49/95) Purging pyc (3.14.8-r0) (50/95) Purging spirv-llvm-translator-libs (23.1.1-r0) (51/95) Purging spirv-tools (1.4.357.0-r0) (52/95) Purging wayland-libs-client (1.26.0-r0) (53/95) Purging xz-dev (5.8.4-r0) (54/95) Purging xz (5.8.4-r0) (55/95) Purging zlib-dev (1.3.2-r0) (56/95) Purging cairo (1.18.4-r1) (57/95) Purging libxft (2.3.9-r0) (58/95) Purging fontconfig (2.18.1-r0) (59/95) Purging harfbuzz (14.2.1-r0) (60/95) Purging freetype (2.14.3-r0) (61/95) Purging fribidi (1.0.16-r3) (62/95) Purging glib (2.90.0-r0) (63/95) Purging graphite2 (1.3.15-r0) (64/95) Purging libmount (2.42.4-r2) (65/95) Purging libblkid (2.42.4-r2) (66/95) Purging libxext-dev (1.3.7-r0) (67/95) Purging libxext (1.3.7-r0) (68/95) Purging libx11-dev (1.8.13-r0) (69/95) Purging xtrans (1.6.0-r0) (70/95) Purging libxcb-dev (1.17.0-r2) (71/95) Purging xcb-proto (1.17.0-r1) (72/95) Purging python3 (3.14.8-r0) (73/95) Purging libxdmcp-dev (1.1.5-r1) (74/95) Purging libxrender (0.9.12-r0) (75/95) Purging libx11 (1.8.13-r0) (76/95) Purging libxcb (1.17.0-r2) (77/95) Purging libxdmcp (1.1.5-r1) (78/95) Purging libbsd (0.12.2-r0) (79/95) Purging libbz2 (1.0.8-r6) (80/95) Purging libeconf (0.8.4-r0) (81/95) Purging llvm23-libs (23.1.2-r0) (82/95) Purging libffi (3.8.0-r0) (83/95) Purging libintl (1.0-r0) (84/95) Purging libmd (1.2.0-r0) (85/95) Purging libpanelw (6.6_p20260822-r0) (86/95) Purging libpng (1.6.59-r0) (87/95) Purging libxau-dev (1.0.12-r0) (88/95) Purging libxau (1.0.12-r0) (89/95) Purging libxml2 (2.13.9-r2) (90/95) Purging mpdecimal (4.0.1-r0) (91/95) Purging pixman (0.46.4-r0) (92/95) Purging readline (8.3.3-r1) (93/95) Purging sqlite-libs (3.53.4-r0) (94/95) Purging xorgproto (2025.1-r0) (95/95) Purging xz-libs (5.8.4-r0) Executing busybox-1.38.0-r7.trigger OK: 442.1 MiB in 107 packages >>> linkquisition: Updating the testing/x86_64 repository index... >>> linkquisition: Signing the index...