main 5041353

test success 3m 03s

  1. --- PASS: TestPrepareDownloadUseCase_Deduplication/multiple_existing_files_increment_suffix (0.00s)
  2. --- PASS: TestPrepareDownloadUseCase_Deduplication/fs.Exists_error_assumes_file_exists_(conservative) (0.00s)
  3. --- PASS: TestPrepareDownloadUseCase_Deduplication/non-existing_file_uses_original_name (0.00s)
  4. === RUN TestReadSystemviewConfigUseCase_Current
  5. --- PASS: TestReadSystemviewConfigUseCase_Current (0.00s)
  6. === RUN TestReadSystemviewConfigUseCase_Default
  7. --- PASS: TestReadSystemviewConfigUseCase_Default (0.00s)
  8. === RUN TestNewReadSystemviewConfigUseCase_NilReaderPanics
  9. --- PASS: TestNewReadSystemviewConfigUseCase_NilReaderPanics (0.00s)
  10. === RUN TestReadSystemviewConfigUseCase_NilUseCaseReturnsSentinel
  11. --- PASS: TestReadSystemviewConfigUseCase_NilUseCaseReturnsSentinel (0.00s)
  12. === RUN TestReadSystemviewConfigUseCase_CurrentResolvedAppearanceUsesPayloadSnapshot
  13. --- PASS: TestReadSystemviewConfigUseCase_CurrentResolvedAppearanceUsesPayloadSnapshot (0.00s)
  14. === RUN TestReadSystemviewConfigUseCase_CurrentResolvedAppearanceKeepsEditableAppearanceUnchanged
  15. --- PASS: TestReadSystemviewConfigUseCase_CurrentResolvedAppearanceKeepsEditableAppearanceUnchanged (0.00s)
  16. === RUN TestReadSystemviewConfigUseCase_DefaultDoesNotOverlayResolvedAppearance
  17. --- PASS: TestReadSystemviewConfigUseCase_DefaultDoesNotOverlayResolvedAppearance (0.00s)
  18. === RUN TestRelayPaneReuse_PrunesExpiredAndMissingPanes
  19. --- PASS: TestRelayPaneReuse_PrunesExpiredAndMissingPanes (0.00s)
  20. === RUN TestResolveTheme_ExternalDisabled_UsesConfigPalettes
  21. --- PASS: TestResolveTheme_ExternalDisabled_UsesConfigPalettes (0.00s)
  22. === RUN TestResolveTheme_NoConfig_UsesDefaults
  23. --- PASS: TestResolveTheme_NoConfig_UsesDefaults (0.00s)
  24. === RUN TestResolveTheme_ValidExternal_OverridesPaletteColors
  25. --- PASS: TestResolveTheme_ValidExternal_OverridesPaletteColors (0.00s)
  26. === RUN TestResolveTheme_ValidExternal_DoesNotOverrideNonPaletteFields
  27. --- PASS: TestResolveTheme_ValidExternal_DoesNotOverrideNonPaletteFields (0.00s)
  28. === RUN TestResolveTheme_PartialExternal_MergesOverConfig
  29. --- PASS: TestResolveTheme_PartialExternal_MergesOverConfig (0.00s)
  30. === RUN TestResolveTheme_PartialExternal_MergesOverDefaults
  31. --- PASS: TestResolveTheme_PartialExternal_MergesOverDefaults (0.00s)
  32. === RUN TestResolveTheme_PartialExternal_RepairsInvalidConfigFallbackFields
  33. --- PASS: TestResolveTheme_PartialExternal_RepairsInvalidConfigFallbackFields (0.00s)
  34. === RUN TestResolveTheme_PrefersDark_SelectsDarkPalette
  35. --- PASS: TestResolveTheme_PrefersDark_SelectsDarkPalette (0.00s)
  36. === RUN TestResolveTheme_PrefersLight_SelectsLightPalette
  37. --- PASS: TestResolveTheme_PrefersLight_SelectsLightPalette (0.00s)
  38. === RUN TestResolveTheme_MalformedExternalAtStartup_FallsBackToConfig
  39. --- PASS: TestResolveTheme_MalformedExternalAtStartup_FallsBackToConfig (0.00s)
  40. === RUN TestResolveTheme_MissingExternalAtStartup_FallsBackWithWarning
  41. --- PASS: TestResolveTheme_MissingExternalAtStartup_FallsBackWithWarning (0.00s)
  42. === RUN TestResolveTheme_ReadErrorAtStartup_FallsBackWithWarning
  43. --- PASS: TestResolveTheme_ReadErrorAtStartup_FallsBackWithWarning (0.00s)
  44. === RUN TestResolveTheme_ReadErrorAfterValid_KeepsLastGoodForSameIdentity
  45. --- PASS: TestResolveTheme_ReadErrorAfterValid_KeepsLastGoodForSameIdentity (0.00s)
  46. === RUN TestResolveTheme_ExternalIdentityChangeClearsLastGoodBeforeReadError
  47. --- PASS: TestResolveTheme_ExternalIdentityChangeClearsLastGoodBeforeReadError (0.00s)
  48. === RUN TestResolveTheme_MissingExternalAfterValid_KeepsLastGood
  49. --- PASS: TestResolveTheme_MissingExternalAfterValid_KeepsLastGood (0.00s)
  50. === RUN TestResolveTheme_MalformedExternalMissingPalette_FallsBack
  51. --- PASS: TestResolveTheme_MalformedExternalMissingPalette_FallsBack (0.00s)
  52. === RUN TestResolveTheme_MalformedAfterValid_KeepsLastGood
  53. --- PASS: TestResolveTheme_MalformedAfterValid_KeepsLastGood (0.00s)
  54. === RUN TestResolveTheme_DisablingExternalAfterValid_ClearsLastGood
  55. --- PASS: TestResolveTheme_DisablingExternalAfterValid_ClearsLastGood (0.00s)
  56. === RUN TestResolveTheme_DisablingExternalTwice_Noop
  57. --- PASS: TestResolveTheme_DisablingExternalTwice_Noop (0.00s)
  58. === RUN TestResolveTheme_OutputContainsAllFields
  59. --- PASS: TestResolveTheme_OutputContainsAllFields (0.00s)
  60. === RUN TestResolveTheme_AllOutputPalettesAreCSSSafeHex
  61. --- PASS: TestResolveTheme_AllOutputPalettesAreCSSSafeHex (0.00s)
  62. === RUN TestResolveTheme_NoConfigFonts_UsesDefaults
  63. --- PASS: TestResolveTheme_NoConfigFonts_UsesDefaults (0.00s)
  64. === RUN TestResolveTheme_NoConfigModeColors_UsesDefaults
  65. --- PASS: TestResolveTheme_NoConfigModeColors_UsesDefaults (0.00s)
  66. === RUN TestResolveTheme_InvalidModeColors_FallsBackToDefaults
  67. --- PASS: TestResolveTheme_InvalidModeColors_FallsBackToDefaults (0.00s)
  68. === RUN TestResolveTheme_UIScaleDefaultsToOne
  69. === RUN TestResolveTheme_UIScaleDefaultsToOne/zero
  70. === RUN TestResolveTheme_UIScaleDefaultsToOne/negative
  71. === RUN TestResolveTheme_UIScaleDefaultsToOne/positive
  72. --- PASS: TestResolveTheme_UIScaleDefaultsToOne (0.00s)
  73. --- PASS: TestResolveTheme_UIScaleDefaultsToOne/zero (0.00s)
  74. --- PASS: TestResolveTheme_UIScaleDefaultsToOne/negative (0.00s)
  75. --- PASS: TestResolveTheme_UIScaleDefaultsToOne/positive (0.00s)
  76. === RUN TestResolveTheme_ColorSchemeSourceIsCaptured
  77. --- PASS: TestResolveTheme_ColorSchemeSourceIsCaptured (0.00s)
  78. === RUN TestResolveTheme_RefreshDelegatesToExecute
  79. --- PASS: TestResolveTheme_RefreshDelegatesToExecute (0.00s)
  80. === RUN TestResolveThemeInputFromConfig_MapsAppearanceStylingAndPreference
  81. --- PASS: TestResolveThemeInputFromConfig_MapsAppearanceStylingAndPreference (0.00s)
  82. === RUN TestResolveThemeInputFromConfig_AllowsNilConfig
  83. --- PASS: TestResolveThemeInputFromConfig_AllowsNilConfig (0.00s)
  84. === RUN TestResolveThemeInputFromConfigVimColorFallback
  85. --- PASS: TestResolveThemeInputFromConfigVimColorFallback (0.00s)
  86. === RUN TestRuntimeResidencyDisabledQuitsOnLastWindow
  87. --- PASS: TestRuntimeResidencyDisabledQuitsOnLastWindow (0.00s)
  88. === RUN TestRuntimeResidencyNegativeTimeoutDisables
  89. --- PASS: TestRuntimeResidencyNegativeTimeoutDisables (0.00s)
  90. === RUN TestRuntimeResidencyFirstIdleArmsDeadline
  91. --- PASS: TestRuntimeResidencyFirstIdleArmsDeadline (0.00s)
  92. === RUN TestRuntimeResidencyReopenCancelsDeadline
  93. --- PASS: TestRuntimeResidencyReopenCancelsDeadline (0.00s)
  94. === RUN TestRuntimeResidencyFailedReopenRestoresIdle
  95. --- PASS: TestRuntimeResidencyFailedReopenRestoresIdle (0.00s)
  96. === RUN TestRuntimeResidencyPopupRemainingPreventsIdle
  97. --- PASS: TestRuntimeResidencyPopupRemainingPreventsIdle (0.00s)
  98. === RUN TestRuntimeResidencyDuplicateCloseIsIdempotent
  99. --- PASS: TestRuntimeResidencyDuplicateCloseIsIdempotent (0.00s)
  100. === RUN TestRuntimeResidencyStaleExpiryIgnored
  101. --- PASS: TestRuntimeResidencyStaleExpiryIgnored (0.00s)
  102. === RUN TestRuntimeResidencyExplicitQuitNeverWaits
  103. --- PASS: TestRuntimeResidencyExplicitQuitNeverWaits (0.00s)
  104. === RUN TestRuntimeResidencyWorkBlocksIdleUntilDrained
  105. --- PASS: TestRuntimeResidencyWorkBlocksIdleUntilDrained (0.00s)
  106. === RUN TestRuntimeResidencyWorkCancelsArmedDeadline
  107. --- PASS: TestRuntimeResidencyWorkCancelsArmedDeadline (0.00s)
  108. === RUN TestSaveModeLegendCollapsedUseCase_PersistsValue
  109. --- PASS: TestSaveModeLegendCollapsedUseCase_PersistsValue (0.00s)
  110. === RUN TestSaveModeLegendCollapsedUseCase_ReturnsSaverError
  111. --- PASS: TestSaveModeLegendCollapsedUseCase_ReturnsSaverError (0.00s)
  112. === RUN TestSaveModeLegendCollapsedUseCase_NilSaverReturnsError
  113. --- PASS: TestSaveModeLegendCollapsedUseCase_NilSaverReturnsError (0.00s)
  114. === RUN TestSaveOmniboxInitialBehaviorUseCase_AllowsRecent
  115. --- PASS: TestSaveOmniboxInitialBehaviorUseCase_AllowsRecent (0.00s)
  116. === RUN TestSaveOmniboxInitialBehaviorUseCase_AllowsTrimmedMostVisited
  117. --- PASS: TestSaveOmniboxInitialBehaviorUseCase_AllowsTrimmedMostVisited (0.00s)
  118. === RUN TestSaveOmniboxInitialBehaviorUseCase_RejectsNone
  119. --- PASS: TestSaveOmniboxInitialBehaviorUseCase_RejectsNone (0.00s)
  120. === RUN TestSaveOmniboxInitialBehaviorUseCase_RejectsEmptyString
  121. --- PASS: TestSaveOmniboxInitialBehaviorUseCase_RejectsEmptyString (0.00s)
  122. === RUN TestSaveOmniboxInitialBehaviorUseCase_NilSaverReturnsError
  123. --- PASS: TestSaveOmniboxInitialBehaviorUseCase_NilSaverReturnsError (0.00s)
  124. === RUN TestFilterBangs
  125. === RUN TestFilterBangs/bang_only_returns_all_sorted
  126. === RUN TestFilterBangs/filters_by_prefix
  127. === RUN TestFilterBangs/filters_by_prefix_case-insensitive
  128. === RUN TestFilterBangs/stops_prefix_at_space
  129. === RUN TestFilterBangs/falls_back_to_url_when_description_empty
  130. --- PASS: TestFilterBangs (0.00s)
  131. --- PASS: TestFilterBangs/bang_only_returns_all_sorted (0.00s)
  132. --- PASS: TestFilterBangs/filters_by_prefix (0.00s)
  133. --- PASS: TestFilterBangs/filters_by_prefix_case-insensitive (0.00s)
  134. --- PASS: TestFilterBangs/stops_prefix_at_space (0.00s)
  135. --- PASS: TestFilterBangs/falls_back_to_url_when_description_empty (0.00s)
  136. === RUN TestDetectBangKey
  137. === RUN TestDetectBangKey/no_bang_prefix
  138. === RUN TestDetectBangKey/bang_only_has_no_space
  139. === RUN TestDetectBangKey/space_at_position_1
  140. === RUN TestDetectBangKey/unknown_bang
  141. === RUN TestDetectBangKey/case-insensitive_match
  142. === RUN TestDetectBangKey/valid_bang_key
  143. === RUN TestDetectBangKey/description_fallback_to_URL
  144. --- PASS: TestDetectBangKey (0.00s)
  145. --- PASS: TestDetectBangKey/no_bang_prefix (0.00s)
  146. --- PASS: TestDetectBangKey/bang_only_has_no_space (0.00s)
  147. --- PASS: TestDetectBangKey/space_at_position_1 (0.00s)
  148. --- PASS: TestDetectBangKey/unknown_bang (0.00s)
  149. --- PASS: TestDetectBangKey/case-insensitive_match (0.00s)
  150. --- PASS: TestDetectBangKey/valid_bang_key (0.00s)
  151. --- PASS: TestDetectBangKey/description_fallback_to_URL (0.00s)
  152. === RUN TestBuildNavigationText
  153. === RUN TestBuildNavigationText/not_a_bang_shortcut
  154. === RUN TestBuildNavigationText/bang_key_without_query
  155. === RUN TestBuildNavigationText/unknown_bang_key
  156. === RUN TestBuildNavigationText/normalizes_key_case
  157. === RUN TestBuildNavigationText/keeps_query_unchanged
  158. --- PASS: TestBuildNavigationText (0.00s)
  159. --- PASS: TestBuildNavigationText/not_a_bang_shortcut (0.00s)
  160. --- PASS: TestBuildNavigationText/bang_key_without_query (0.00s)
  161. --- PASS: TestBuildNavigationText/unknown_bang_key (0.00s)
  162. --- PASS: TestBuildNavigationText/normalizes_key_case (0.00s)
  163. --- PASS: TestBuildNavigationText/keeps_query_unchanged (0.00s)
  164. === RUN TestGetShortcut
  165. === RUN TestGetShortcut/exact_match
  166. === RUN TestGetShortcut/case_insensitive
  167. === RUN TestGetShortcut/not_found
  168. --- PASS: TestGetShortcut (0.00s)
  169. --- PASS: TestGetShortcut/exact_match (0.00s)
  170. --- PASS: TestGetShortcut/case_insensitive (0.00s)
  171. --- PASS: TestGetShortcut/not_found (0.00s)
  172. === RUN TestTransformLegacyConfigUseCase_Execute
  173. --- PASS: TestTransformLegacyConfigUseCase_Execute (0.00s)
  174. === RUN TestTransformLegacyConfigUseCase_Execute_CallsTransformer
  175. --- PASS: TestTransformLegacyConfigUseCase_Execute_CallsTransformer (0.00s)
  176. === RUN TestVimModePolicyEvaluate
  177. === RUN TestVimModePolicyEvaluate/activation_stays_allowed_while_page_editable_focused
  178. === RUN TestVimModePolicyEvaluate/activation_stays_allowed_when_page_is_not_editable
  179. === RUN TestVimModePolicyEvaluate/active_page_editable_focus_exits_vim_mode
  180. === RUN TestVimModePolicyEvaluate/background_page_editable_focus_does_not_exit_vim_mode
  181. === RUN TestVimModePolicyEvaluate/overlay_focus_exits_vim_mode
  182. === RUN TestVimModePolicyEvaluate/omnibox_focus_exits_vim_mode
  183. === RUN TestVimModePolicyEvaluate/find_bar_focus_exits_vim_mode
  184. === RUN TestVimModePolicyEvaluate/context_change_preserves_vim_mode_when_scoped_context_stays_valid
  185. === RUN TestVimModePolicyEvaluate/context_change_exits_vim_mode_when_scoped_context_is_lost
  186. === RUN TestVimModePolicyEvaluate/non_vim_mode_focus_change_stays_normal
  187. --- PASS: TestVimModePolicyEvaluate (0.00s)
  188. --- PASS: TestVimModePolicyEvaluate/activation_stays_allowed_while_page_editable_focused (0.00s)
  189. --- PASS: TestVimModePolicyEvaluate/activation_stays_allowed_when_page_is_not_editable (0.00s)
  190. --- PASS: TestVimModePolicyEvaluate/active_page_editable_focus_exits_vim_mode (0.00s)
  191. --- PASS: TestVimModePolicyEvaluate/background_page_editable_focus_does_not_exit_vim_mode (0.00s)
  192. --- PASS: TestVimModePolicyEvaluate/overlay_focus_exits_vim_mode (0.00s)
  193. --- PASS: TestVimModePolicyEvaluate/omnibox_focus_exits_vim_mode (0.00s)
  194. --- PASS: TestVimModePolicyEvaluate/find_bar_focus_exits_vim_mode (0.00s)
  195. --- PASS: TestVimModePolicyEvaluate/context_change_preserves_vim_mode_when_scoped_context_stays_valid (0.00s)
  196. --- PASS: TestVimModePolicyEvaluate/context_change_exits_vim_mode_when_scoped_context_is_lost (0.00s)
  197. --- PASS: TestVimModePolicyEvaluate/non_vim_mode_focus_change_stays_normal (0.00s)
  198. === RUN TestVimNavigationUseCaseExecuteDispatchesConfiguredActions
  199. --- PASS: TestVimNavigationUseCaseExecuteDispatchesConfiguredActions (0.00s)
  200. === RUN TestVimNavigationUseCaseClearSemanticNavigationHighlight
  201. --- PASS: TestVimNavigationUseCaseClearSemanticNavigationHighlight (0.00s)
  202. === RUN TestVimNavigationUseCaseNavigatePageFocus
  203. --- PASS: TestVimNavigationUseCaseNavigatePageFocus (0.00s)
  204. === RUN TestVimNavigationUseCaseIgnoresUnsupportedCapability
  205. --- PASS: TestVimNavigationUseCaseIgnoresUnsupportedCapability (0.00s)
  206. === RUN TestVimNavigationUseCaseStartsPageInteractions
  207. === RUN TestVimNavigationUseCaseStartsPageInteractions/hint-follow
  208. === RUN TestVimNavigationUseCaseStartsPageInteractions/hint-follow-new
  209. === RUN TestVimNavigationUseCaseStartsPageInteractions/hint-yank-url
  210. === RUN TestVimNavigationUseCaseStartsPageInteractions/visual
  211. === RUN TestVimNavigationUseCaseStartsPageInteractions/yank-section
  212. === RUN TestVimNavigationUseCaseStartsPageInteractions/yank-paragraph
  213. === RUN TestVimNavigationUseCaseStartsPageInteractions/yank-code
  214. === RUN TestVimNavigationUseCaseStartsPageInteractions/yank-table
  215. === RUN TestVimNavigationUseCaseStartsPageInteractions/yank-list
  216. --- PASS: TestVimNavigationUseCaseStartsPageInteractions (0.00s)
  217. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/hint-follow (0.00s)
  218. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/hint-follow-new (0.00s)
  219. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/hint-yank-url (0.00s)
  220. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/visual (0.00s)
  221. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/yank-section (0.00s)
  222. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/yank-paragraph (0.00s)
  223. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/yank-code (0.00s)
  224. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/yank-table (0.00s)
  225. --- PASS: TestVimNavigationUseCaseStartsPageInteractions/yank-list (0.00s)
  226. === RUN TestVimNavigationUseCasePageInteractionErrorDoesNotCapture
  227. --- PASS: TestVimNavigationUseCasePageInteractionErrorDoesNotCapture (0.00s)
  228. === RUN TestVimNavigationUseCasePageInteractionUnsupportedEngine
  229. --- PASS: TestVimNavigationUseCasePageInteractionUnsupportedEngine (0.00s)
  230. === RUN TestVimNavigationUseCaseForwardsPageKeysAndCancel
  231. --- PASS: TestVimNavigationUseCaseForwardsPageKeysAndCancel (0.00s)
  232. === RUN TestVimNavigationUseCaseWrapsPageKeyAndCancelErrors
  233. --- PASS: TestVimNavigationUseCaseWrapsPageKeyAndCancelErrors (0.00s)
  234. === RUN TestCleanupSessionsUseCase_ReconcileActiveBrowserSessions_EndsOnlyProvenDeadSessions
  235. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mended dead browser session<U+001B>[0m <U+001B>[36mpid=<U+001B>[0m222 <U+001B>[36msession_id=<U+001B>[0mdead
  236. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG skipping active session without process id <U+001B>[36msession_id=<U+001B>[0munknown
  237. --- PASS: TestCleanupSessionsUseCase_ReconcileActiveBrowserSessions_EndsOnlyProvenDeadSessions (0.00s)
  238. === RUN TestCleanupSessionsUseCase_ReconcileActiveBrowserSessions_SkipsWhenProbeErrors
  239. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mfailed to probe session process<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"probe failed"<U+001B>[0m<U+001B>[0m <U+001B>[36mpid=<U+001B>[0m333 <U+001B>[36msession_id=<U+001B>[0mactive
  240. --- PASS: TestCleanupSessionsUseCase_ReconcileActiveBrowserSessions_SkipsWhenProbeErrors (0.00s)
  241. === RUN TestCleanupSessionsUseCase_Execute_AgeAndCountCleanup
  242. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by age<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m3 <U+001B>[36mmax_age_days=<U+001B>[0m7
  243. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by count<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m2 <U+001B>[36mmax_count=<U+001B>[0m50
  244. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession cleanup completed<U+001B>[0m <U+001B>[36mby_age=<U+001B>[0m3 <U+001B>[36mby_count=<U+001B>[0m2 <U+001B>[36mtotal_deleted=<U+001B>[0m5
  245. --- PASS: TestCleanupSessionsUseCase_Execute_AgeAndCountCleanup (0.00s)
  246. === RUN TestCleanupSessionsUseCase_Execute_AgeOnlyCleanup
  247. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by age<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m5 <U+001B>[36mmax_age_days=<U+001B>[0m30
  248. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession cleanup completed<U+001B>[0m <U+001B>[36mby_age=<U+001B>[0m5 <U+001B>[36mby_count=<U+001B>[0m0 <U+001B>[36mtotal_deleted=<U+001B>[0m5
  249. --- PASS: TestCleanupSessionsUseCase_Execute_AgeOnlyCleanup (0.00s)
  250. === RUN TestCleanupSessionsUseCase_Execute_CountOnlyCleanup
  251. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by count<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m4 <U+001B>[36mmax_count=<U+001B>[0m10
  252. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession cleanup completed<U+001B>[0m <U+001B>[36mby_age=<U+001B>[0m0 <U+001B>[36mby_count=<U+001B>[0m4 <U+001B>[36mtotal_deleted=<U+001B>[0m4
  253. --- PASS: TestCleanupSessionsUseCase_Execute_CountOnlyCleanup (0.00s)
  254. === RUN TestCleanupSessionsUseCase_Execute_NoCleanupNeeded
  255. --- PASS: TestCleanupSessionsUseCase_Execute_NoCleanupNeeded (0.00s)
  256. === RUN TestCleanupSessionsUseCase_Execute_AgeDeleteError_ContinuesToCount
  257. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mfailed to delete sessions by age<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"db error"<U+001B>[0m<U+001B>[0m
  258. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by count<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m3 <U+001B>[36mmax_count=<U+001B>[0m50
  259. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession cleanup completed<U+001B>[0m <U+001B>[36mby_age=<U+001B>[0m0 <U+001B>[36mby_count=<U+001B>[0m3 <U+001B>[36mtotal_deleted=<U+001B>[0m3
  260. --- PASS: TestCleanupSessionsUseCase_Execute_AgeDeleteError_ContinuesToCount (0.00s)
  261. === RUN TestCleanupSessionsUseCase_Execute_CountDeleteError
  262. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by age<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m2 <U+001B>[36mmax_age_days=<U+001B>[0m7
  263. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mfailed to delete sessions by count<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"db error"<U+001B>[0m<U+001B>[0m
  264. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession cleanup completed<U+001B>[0m <U+001B>[36mby_age=<U+001B>[0m2 <U+001B>[36mby_count=<U+001B>[0m0 <U+001B>[36mtotal_deleted=<U+001B>[0m2
  265. --- PASS: TestCleanupSessionsUseCase_Execute_CountDeleteError (0.00s)
  266. === RUN TestCleanupSessionsUseCase_Execute_BothDisabled
  267. --- PASS: TestCleanupSessionsUseCase_Execute_BothDisabled (0.00s)
  268. === RUN TestCleanupSessionsUseCase_Execute_ZeroMaxSessions
  269. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mcleaned up old sessions by count<U+001B>[0m <U+001B>[36mdeleted=<U+001B>[0m10 <U+001B>[36mmax_count=<U+001B>[0m0
  270. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession cleanup completed<U+001B>[0m <U+001B>[36mby_age=<U+001B>[0m0 <U+001B>[36mby_count=<U+001B>[0m10 <U+001B>[36mtotal_deleted=<U+001B>[0m10
  271. --- PASS: TestCleanupSessionsUseCase_Execute_ZeroMaxSessions (0.00s)
  272. === RUN TestDeleteSessionUseCase_Execute_Success
  273. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mdeleting session<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_delete
  274. --- PASS: TestDeleteSessionUseCase_Execute_Success (0.00s)
  275. === RUN TestDeleteSessionUseCase_Execute_CannotDeleteCurrentSession
  276. --- PASS: TestDeleteSessionUseCase_Execute_CannotDeleteCurrentSession (0.00s)
  277. === RUN TestDeleteSessionUseCase_Execute_SessionNotFound
  278. --- PASS: TestDeleteSessionUseCase_Execute_SessionNotFound (0.00s)
  279. === RUN TestDeleteSessionUseCase_Execute_CannotDeleteActiveSession
  280. --- PASS: TestDeleteSessionUseCase_Execute_CannotDeleteActiveSession (0.00s)
  281. === RUN TestDeleteSessionUseCase_Execute_FindByIDError
  282. --- PASS: TestDeleteSessionUseCase_Execute_FindByIDError (0.00s)
  283. === RUN TestDeleteSessionUseCase_Execute_DeleteSnapshotErrorIgnored
  284. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mdeleting session<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_nosnapshot
  285. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG failed to delete session snapshot (may not exist) <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"no rows"<U+001B>[0m<U+001B>[0m
  286. --- PASS: TestDeleteSessionUseCase_Execute_DeleteSnapshotErrorIgnored (0.00s)
  287. === RUN TestDeleteSessionUseCase_Execute_DeleteSessionError
  288. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mdeleting session<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_deleteerror
  289. --- PASS: TestDeleteSessionUseCase_Execute_DeleteSessionError (0.00s)
  290. === RUN TestDeleteSessionUseCase_Execute_EmptyCurrentSessionAllowed
  291. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mdeleting session<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_nocurrent
  292. --- PASS: TestDeleteSessionUseCase_Execute_EmptyCurrentSessionAllowed (0.00s)
  293. === RUN TestGetConfigSchemaUseCase_Execute
  294. === RUN TestGetConfigSchemaUseCase_Execute/returns_schema_keys_from_provider
  295. === RUN TestGetConfigSchemaUseCase_Execute/returns_empty_slice_when_no_keys
  296. === RUN TestGetConfigSchemaUseCase_Execute/keys_include_all_expected_fields
  297. --- PASS: TestGetConfigSchemaUseCase_Execute (0.00s)
  298. --- PASS: TestGetConfigSchemaUseCase_Execute/returns_schema_keys_from_provider (0.00s)
  299. --- PASS: TestGetConfigSchemaUseCase_Execute/returns_empty_slice_when_no_keys (0.00s)
  300. --- PASS: TestGetConfigSchemaUseCase_Execute/keys_include_all_expected_fields (0.00s)
  301. === RUN TestGetLastRestorableSessionUseCase_NoSessions
  302. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: no restorable session found
  303. --- PASS: TestGetLastRestorableSessionUseCase_NoSessions (0.00s)
  304. === RUN TestGetLastRestorableSessionUseCase_OnlyCurrentSession
  305. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: no restorable session found
  306. --- PASS: TestGetLastRestorableSessionUseCase_OnlyCurrentSession (0.00s)
  307. === RUN TestGetLastRestorableSessionUseCase_SkipsCLISessions
  308. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: no restorable session found
  309. --- PASS: TestGetLastRestorableSessionUseCase_SkipsCLISessions (0.00s)
  310. === RUN TestGetLastRestorableSessionUseCase_SkipsActiveSessions
  311. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: skipping active session <U+001B>[36msession_id=<U+001B>[0m20251225_120000_actv
  312. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: no restorable session found
  313. --- PASS: TestGetLastRestorableSessionUseCase_SkipsActiveSessions (0.00s)
  314. === RUN TestGetLastRestorableSessionUseCase_SkipsNoSnapshot
  315. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: no restorable session found
  316. --- PASS: TestGetLastRestorableSessionUseCase_SkipsNoSnapshot (0.00s)
  317. === RUN TestGetLastRestorableSessionUseCase_SkipsEmptyTabs
  318. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: skipping session with no tabs <U+001B>[36msession_id=<U+001B>[0m20251225_120000_emty
  319. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-restore: no restorable session found
  320. --- PASS: TestGetLastRestorableSessionUseCase_SkipsEmptyTabs (0.00s)
  321. === RUN TestGetLastRestorableSessionUseCase_ReturnsEndedSession
  322. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mauto-restore: found restorable session<U+001B>[0m <U+001B>[36mpanes=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251225_120000_good <U+001B>[36mtabs=<U+001B>[0m1
  323. --- PASS: TestGetLastRestorableSessionUseCase_ReturnsEndedSession (0.00s)
  324. === RUN TestGetLastRestorableSessionUseCase_ReturnsCrashedSession
  325. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mauto-restore: found restorable session<U+001B>[0m <U+001B>[36mpanes=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251225_120000_crsh <U+001B>[36mtabs=<U+001B>[0m1
  326. --- PASS: TestGetLastRestorableSessionUseCase_ReturnsCrashedSession (0.00s)
  327. === RUN TestGetLastRestorableSessionUseCase_ReturnsMostRecent
  328. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mauto-restore: found restorable session<U+001B>[0m <U+001B>[36mpanes=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251225_140000_new1 <U+001B>[36mtabs=<U+001B>[0m1
  329. --- PASS: TestGetLastRestorableSessionUseCase_ReturnsMostRecent (0.00s)
  330. === RUN TestGetLastRestorableSessionUseCase_SkipsFirstIfNoSnapshot
  331. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mauto-restore: found restorable session<U+001B>[0m <U+001B>[36mpanes=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251225_120000_good <U+001B>[36mtabs=<U+001B>[0m1
  332. --- PASS: TestGetLastRestorableSessionUseCase_SkipsFirstIfNoSnapshot (0.00s)
  333. === RUN TestHandlePermissionUseCase_AutoAllowDisplayCapture
  334. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-allowing permission request <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["display"]
  335. --- PASS: TestHandlePermissionUseCase_AutoAllowDisplayCapture (0.01s)
  336. === RUN TestHandlePermissionUseCase_AutoAllowDeviceInfo
  337. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-allowing permission request <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://example.com <U+001B>[36mtypes=<U+001B>[0m["device_info"]
  338. --- PASS: TestHandlePermissionUseCase_AutoAllowDeviceInfo (0.00s)
  339. === RUN TestHandlePermissionUseCase_StoredPermissionGranted
  340. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG using stored permission: granted <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["microphone"]
  341. --- PASS: TestHandlePermissionUseCase_StoredPermissionGranted (0.00s)
  342. === RUN TestHandlePermissionUseCase_StoredPermissionDenied
  343. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG using stored permission: denied <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["camera"]
  344. --- PASS: TestHandlePermissionUseCase_StoredPermissionDenied (0.00s)
  345. === RUN TestHandlePermissionUseCase_ShowDialogForPrompt
  346. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user allowed permission <U+001B>[36mpersistent=<U+001B>[0mfalse
  347. --- PASS: TestHandlePermissionUseCase_ShowDialogForPrompt (0.00s)
  348. === RUN TestHandlePermissionUseCase_PersistAllowed
  349. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user allowed permission <U+001B>[36mpersistent=<U+001B>[0mtrue
  350. --- PASS: TestHandlePermissionUseCase_PersistAllowed (0.00s)
  351. === RUN TestHandlePermissionUseCase_PersistDenied
  352. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user denied permission
  353. --- PASS: TestHandlePermissionUseCase_PersistDenied (0.00s)
  354. === RUN TestHandlePermissionUseCase_EmptyOrigin
  355. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mpermission request with empty origin, denying<U+001B>[0m <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0m <U+001B>[36mtypes=<U+001B>[0m["microphone"]
  356. --- PASS: TestHandlePermissionUseCase_EmptyOrigin (0.00s)
  357. === RUN TestHandlePermissionUseCase_CombinedPermissions
  358. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG using stored permission: denied <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["microphone","camera"]
  359. --- PASS: TestHandlePermissionUseCase_CombinedPermissions (0.00s)
  360. === RUN TestHandlePermissionUseCase_QueryPermissionState_AutoAllow
  361. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG query: no stored permission for auto-allow type, returning granted <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://example.com <U+001B>[36mtype=<U+001B>[0mdisplay
  362. --- PASS: TestHandlePermissionUseCase_QueryPermissionState_AutoAllow (0.00s)
  363. === RUN TestHandlePermissionUseCase_QueryPermissionState_AutoAllowManualOverride
  364. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG query: returning stored permission <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36mdecision=<U+001B>[0mdenied <U+001B>[36morigin=<U+001B>[0mhttps://example.com <U+001B>[36mtype=<U+001B>[0mdisplay
  365. --- PASS: TestHandlePermissionUseCase_QueryPermissionState_AutoAllowManualOverride (0.00s)
  366. === RUN TestHandlePermissionUseCase_QueryPermissionState_Stored
  367. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG query: returning stored permission <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36mdecision=<U+001B>[0mdenied <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtype=<U+001B>[0mmicrophone
  368. --- PASS: TestHandlePermissionUseCase_QueryPermissionState_Stored (0.00s)
  369. === RUN TestHandlePermissionUseCase_QueryPermissionState_NoRecord
  370. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG query: no stored permission, returning prompt <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtype=<U+001B>[0mcamera
  371. --- PASS: TestHandlePermissionUseCase_QueryPermissionState_NoRecord (0.00s)
  372. === RUN TestHandlePermissionUseCase_QueryPermissionState_EmptyOriginReturnsPrompt
  373. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mquery: empty origin, returning prompt<U+001B>[0m <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0m <U+001B>[36mtype=<U+001B>[0mdisplay
  374. --- PASS: TestHandlePermissionUseCase_QueryPermissionState_EmptyOriginReturnsPrompt (0.00s)
  375. === RUN TestHandlePermissionUseCase_NonPersistableNotSaved
  376. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-allowing permission request <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["display"]
  377. --- PASS: TestHandlePermissionUseCase_NonPersistableNotSaved (0.00s)
  378. === RUN TestHandlePermissionUseCase_NoDialogPresenter
  379. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mno dialog presenter available, denying permission<U+001B>[0m <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com
  380. --- PASS: TestHandlePermissionUseCase_NoDialogPresenter (0.00s)
  381. === RUN TestHandlePermissionUseCase_DisplayOverrideDenied
  382. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG manual override denied auto-allow permission request <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["display"]
  383. --- PASS: TestHandlePermissionUseCase_DisplayOverrideDenied (0.00s)
  384. === RUN TestHandlePermissionUseCase_GetSetResetManualDecision
  385. --- PASS: TestHandlePermissionUseCase_GetSetResetManualDecision (0.00s)
  386. === RUN TestHandlePermissionUseCase_SetManualPermissionDecision_NonPersistable
  387. --- PASS: TestHandlePermissionUseCase_SetManualPermissionDecision_NonPersistable (0.00s)
  388. === RUN TestHandlePermissionUseCase_UsesInjectedLoggerFactory
  389. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mpermission request with empty origin, denying<U+001B>[0m <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0m <U+001B>[36mtypes=<U+001B>[0m["microphone"]
  390. --- PASS: TestHandlePermissionUseCase_UsesInjectedLoggerFactory (0.00s)
  391. === RUN TestHandlePermissionUseCase_WebsiteDataAccess_ShowsDialogAndPersists
  392. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mwebsite data access permission allowed<U+001B>[0m <U+001B>[36mcurrent_domain=<U+001B>[0m[redacted-url] <U+001B>[36mpersistent=<U+001B>[0mtrue <U+001B>[36mrequesting_domain=<U+001B>[0m[redacted-url]
  393. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user allowed permission <U+001B>[36mpersistent=<U+001B>[0mtrue
  394. --- PASS: TestHandlePermissionUseCase_WebsiteDataAccess_ShowsDialogAndPersists (0.00s)
  395. === RUN TestHandlePermissionUseCase_WebsiteDataAccess_UsesStoredGrant
  396. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1musing stored website data access permission: granted<U+001B>[0m <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36mcurrent_domain=<U+001B>[0m[redacted-url] <U+001B>[36morigin=<U+001B>[0mhttps://shop.example.com <U+001B>[36mrequesting_domain=<U+001B>[0m[redacted-url] <U+001B>[36mtypes=<U+001B>[0m["website_data_access"]
  397. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG using stored permission: granted <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://shop.example.com <U+001B>[36mtypes=<U+001B>[0m["website_data_access"]
  398. --- PASS: TestHandlePermissionUseCase_WebsiteDataAccess_UsesStoredGrant (0.00s)
  399. === RUN TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog
  400. === RUN TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/allow
  401. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user allowed permission <U+001B>[36mpersistent=<U+001B>[0mfalse
  402. === RUN TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/always_allow_is_never_persisted
  403. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user allowed permission <U+001B>[36mpersistent=<U+001B>[0mtrue
  404. === RUN TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/deny
  405. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user denied permission
  406. === RUN TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/always_deny_is_never_persisted
  407. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user denied permission
  408. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog (0.00s)
  409. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/allow (0.00s)
  410. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/always_allow_is_never_persisted (0.00s)
  411. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/deny (0.00s)
  412. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayShowsDialog/always_deny_is_never_persisted (0.00s)
  413. === RUN TestHandlePermissionUseCase_UnmediatedDisplayIgnoresStoredDecision
  414. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user denied permission
  415. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayIgnoresStoredDecision (0.00s)
  416. === RUN TestHandlePermissionUseCase_UnmediatedDisplayWithMicrophoneDoesNotPersistDisplay
  417. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG user allowed permission <U+001B>[36mpersistent=<U+001B>[0mtrue
  418. --- PASS: TestHandlePermissionUseCase_UnmediatedDisplayWithMicrophoneDoesNotPersistDisplay (0.00s)
  419. === RUN TestHandlePermissionUseCase_DisplayWithoutFlagStillAutoAllowed
  420. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG auto-allowing permission request <U+001B>[36mcomponent=<U+001B>[0mpermission <U+001B>[36morigin=<U+001B>[0mhttps://meet.example.com <U+001B>[36mtypes=<U+001B>[0m["display"]
  421. --- PASS: TestHandlePermissionUseCase_DisplayWithoutFlagStillAutoAllowed (0.00s)
  422. === RUN TestGetKeybindingsUseCase_Execute
  423. === RUN TestGetKeybindingsUseCase_Execute/returns_keybindings_from_provider
  424. === RUN TestGetKeybindingsUseCase_Execute/returns_error_when_provider_fails
  425. === RUN TestGetKeybindingsUseCase_Execute/returns_error_when_provider_is_nil
  426. --- PASS: TestGetKeybindingsUseCase_Execute (0.00s)
  427. --- PASS: TestGetKeybindingsUseCase_Execute/returns_keybindings_from_provider (0.00s)
  428. --- PASS: TestGetKeybindingsUseCase_Execute/returns_error_when_provider_fails (0.00s)
  429. --- PASS: TestGetKeybindingsUseCase_Execute/returns_error_when_provider_is_nil (0.00s)
  430. === RUN TestSetKeybindingUseCase_Execute
  431. === RUN TestSetKeybindingUseCase_Execute/accepts_vim_mode
  432. === RUN TestSetKeybindingUseCase_Execute/successfully_sets_keybinding
  433. === RUN TestSetKeybindingUseCase_Execute/returns_conflicts_when_detected
  434. === RUN TestSetKeybindingUseCase_Execute/returns_error_when_saver_fails
  435. === RUN TestSetKeybindingUseCase_Execute/returns_error_when_saver_is_nil
  436. === RUN TestSetKeybindingUseCase_Execute/returns_error_when_mode_is_empty
  437. === RUN TestSetKeybindingUseCase_Execute/returns_error_when_action_is_empty
  438. === RUN TestSetKeybindingUseCase_Execute/returns_error_for_invalid_mode
  439. --- PASS: TestSetKeybindingUseCase_Execute (0.00s)
  440. --- PASS: TestSetKeybindingUseCase_Execute/accepts_vim_mode (0.00s)
  441. --- PASS: TestSetKeybindingUseCase_Execute/successfully_sets_keybinding (0.00s)
  442. --- PASS: TestSetKeybindingUseCase_Execute/returns_conflicts_when_detected (0.00s)
  443. --- PASS: TestSetKeybindingUseCase_Execute/returns_error_when_saver_fails (0.00s)
  444. --- PASS: TestSetKeybindingUseCase_Execute/returns_error_when_saver_is_nil (0.00s)
  445. --- PASS: TestSetKeybindingUseCase_Execute/returns_error_when_mode_is_empty (0.00s)
  446. --- PASS: TestSetKeybindingUseCase_Execute/returns_error_when_action_is_empty (0.00s)
  447. --- PASS: TestSetKeybindingUseCase_Execute/returns_error_for_invalid_mode (0.00s)
  448. === RUN TestResetKeybindingUseCase_Execute
  449. === RUN TestResetKeybindingUseCase_Execute/successfully_resets_keybinding
  450. === RUN TestResetKeybindingUseCase_Execute/returns_error_when_saver_fails
  451. === RUN TestResetKeybindingUseCase_Execute/returns_error_when_saver_is_nil
  452. === RUN TestResetKeybindingUseCase_Execute/returns_error_when_mode_is_empty
  453. --- PASS: TestResetKeybindingUseCase_Execute (0.00s)
  454. --- PASS: TestResetKeybindingUseCase_Execute/successfully_resets_keybinding (0.00s)
  455. --- PASS: TestResetKeybindingUseCase_Execute/returns_error_when_saver_fails (0.00s)
  456. --- PASS: TestResetKeybindingUseCase_Execute/returns_error_when_saver_is_nil (0.00s)
  457. --- PASS: TestResetKeybindingUseCase_Execute/returns_error_when_mode_is_empty (0.00s)
  458. === RUN TestResetAllKeybindingsUseCase_Execute
  459. === RUN TestResetAllKeybindingsUseCase_Execute/successfully_resets_all_keybindings
  460. === RUN TestResetAllKeybindingsUseCase_Execute/returns_error_when_saver_fails
  461. === RUN TestResetAllKeybindingsUseCase_Execute/returns_error_when_saver_is_nil
  462. --- PASS: TestResetAllKeybindingsUseCase_Execute (0.00s)
  463. --- PASS: TestResetAllKeybindingsUseCase_Execute/successfully_resets_all_keybindings (0.00s)
  464. --- PASS: TestResetAllKeybindingsUseCase_Execute/returns_error_when_saver_fails (0.00s)
  465. --- PASS: TestResetAllKeybindingsUseCase_Execute/returns_error_when_saver_is_nil (0.00s)
  466. === RUN TestListSessionsUseCase_Execute_ReturnsSessionsWithState
  467. --- PASS: TestListSessionsUseCase_Execute_ReturnsSessionsWithState (0.00s)
  468. === RUN TestListSessionsUseCase_GetPurgeableSessions_ReturnsOnlyInactive
  469. --- PASS: TestListSessionsUseCase_GetPurgeableSessions_ReturnsOnlyInactive (0.00s)
  470. === RUN TestListSessionsUseCase_GetPurgeableSessions_EmptyWhenAllActive
  471. --- PASS: TestListSessionsUseCase_GetPurgeableSessions_EmptyWhenAllActive (0.00s)
  472. === RUN TestListSessionsUseCase_GetPurgeableSessions_HandlesGetSizeError
  473. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mfailed to get total snapshots size<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"assert.AnError general error for testing"<U+001B>[0m<U+001B>[0m
  474. --- PASS: TestListSessionsUseCase_GetPurgeableSessions_HandlesGetSizeError (0.00s)
  475. === RUN TestManageFavoritesUseCase_GetAllURLs_ReturnsURLSet
  476. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  477. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  478. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m3
  479. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorite URLs <U+001B>[36mcount=<U+001B>[0m3
  480. --- PASS: TestManageFavoritesUseCase_GetAllURLs_ReturnsURLSet (0.00s)
  481. === RUN TestManageFavoritesUseCase_GetAllURLs_ReturnsEmptySetWhenNoFavorites
  482. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  483. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  484. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m0
  485. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorite URLs <U+001B>[36mcount=<U+001B>[0m0
  486. --- PASS: TestManageFavoritesUseCase_GetAllURLs_ReturnsEmptySetWhenNoFavorites (0.00s)
  487. === RUN TestManageFavoritesUseCase_GetAllURLs_ReturnsErrorOnRepoFailure
  488. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  489. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  490. --- PASS: TestManageFavoritesUseCase_GetAllURLs_ReturnsErrorOnRepoFailure (0.00s)
  491. === RUN TestManageFavoritesUseCase_Toggle_AddsWhenNotFavorite
  492. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mexample.com
  493. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite added via toggle<U+001B>[0m <U+001B>[36mid=<U+001B>[0m0 <U+001B>[36murl=<U+001B>[0mexample.com
  494. --- PASS: TestManageFavoritesUseCase_Toggle_AddsWhenNotFavorite (0.00s)
  495. === RUN TestManageFavoritesUseCase_Toggle_RemovesWhenAlreadyFavorite
  496. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mexample.com
  497. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite removed via toggle<U+001B>[0m <U+001B>[36mid=<U+001B>[0m42 <U+001B>[36murl=<U+001B>[0mexample.com
  498. --- PASS: TestManageFavoritesUseCase_Toggle_RemovesWhenAlreadyFavorite (0.00s)
  499. === RUN TestManageFavoritesUseCase_Toggle_EmptyURLReturnsError
  500. --- PASS: TestManageFavoritesUseCase_Toggle_EmptyURLReturnsError (0.00s)
  501. === RUN TestManageFavoritesUseCase_ToggleNormalizesURLBeforeLookup
  502. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mexample.com
  503. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite added via toggle<U+001B>[0m <U+001B>[36mid=<U+001B>[0m0 <U+001B>[36murl=<U+001B>[0mexample.com
  504. --- PASS: TestManageFavoritesUseCase_ToggleNormalizesURLBeforeLookup (0.00s)
  505. === RUN TestManageFavoritesUseCase_Toggle_FindByURLErrorReturnsError
  506. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mexample.com
  507. --- PASS: TestManageFavoritesUseCase_Toggle_FindByURLErrorReturnsError (0.00s)
  508. === RUN TestManageFavoritesUseCase_Toggle_SaveErrorReturnsError
  509. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mexample.com
  510. --- PASS: TestManageFavoritesUseCase_Toggle_SaveErrorReturnsError (0.00s)
  511. === RUN TestManageFavoritesUseCase_Toggle_DeleteErrorReturnsError
  512. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mexample.com
  513. --- PASS: TestManageFavoritesUseCase_Toggle_DeleteErrorReturnsError (0.00s)
  514. === RUN TestManageFavoritesUseCase_UpdateFavoritePreservesShortcutWhenOmitted
  515. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG updating favorite <U+001B>[36mid=<U+001B>[0m42
  516. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite updated<U+001B>[0m <U+001B>[36mid=<U+001B>[0m42
  517. --- PASS: TestManageFavoritesUseCase_UpdateFavoritePreservesShortcutWhenOmitted (0.00s)
  518. === RUN TestManageFavoritesUseCase_UpdateFavoriteClearsShortcutWhenExplicit
  519. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG updating favorite <U+001B>[36mid=<U+001B>[0m42
  520. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite updated<U+001B>[0m <U+001B>[36mid=<U+001B>[0m42
  521. --- PASS: TestManageFavoritesUseCase_UpdateFavoriteClearsShortcutWhenExplicit (0.00s)
  522. === RUN TestManageFavoritesUseCase_FilterForOmnibox_RanksPrefixBeforeContains
  523. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  524. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m3
  525. --- PASS: TestManageFavoritesUseCase_FilterForOmnibox_RanksPrefixBeforeContains (0.00s)
  526. === RUN TestManageFavoritesUseCase_FilterForOmnibox_EmptyQueryKeepsRepositoryOrder
  527. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  528. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m2
  529. --- PASS: TestManageFavoritesUseCase_FilterForOmnibox_EmptyQueryKeepsRepositoryOrder (0.00s)
  530. === RUN TestManageFavoritesUseCase_GetAllURLs_UsesCache
  531. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  532. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  533. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m1
  534. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorite URLs <U+001B>[36mcount=<U+001B>[0m1
  535. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  536. --- PASS: TestManageFavoritesUseCase_GetAllURLs_UsesCache (0.00s)
  537. === RUN TestManageFavoritesUseCase_Toggle_InvalidatesCache
  538. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  539. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  540. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m1
  541. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorite URLs <U+001B>[36mcount=<U+001B>[0m1
  542. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG toggling favorite <U+001B>[36murl=<U+001B>[0mnew.example
  543. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite added via toggle<U+001B>[0m <U+001B>[36mid=<U+001B>[0m0 <U+001B>[36murl=<U+001B>[0mnew.example
  544. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorite URLs
  545. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting all favorites
  546. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorites <U+001B>[36mcount=<U+001B>[0m2
  547. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG retrieved favorite URLs <U+001B>[36mcount=<U+001B>[0m2
  548. --- PASS: TestManageFavoritesUseCase_Toggle_InvalidatesCache (0.00s)
  549. === RUN TestManageFavoritesUseCase_AddFavoriteNormalizesURL
  550. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite added<U+001B>[0m <U+001B>[36mid=<U+001B>[0m0 <U+001B>[36murl=<U+001B>[0mexample.com
  551. --- PASS: TestManageFavoritesUseCase_AddFavoriteNormalizesURL (0.00s)
  552. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsInvalidTagIDs
  553. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsInvalidTagIDs (0.00s)
  554. === RUN TestManageFavoritesUseCase_AddFavoriteAssignsTagsWithoutFolder
  555. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite added<U+001B>[0m <U+001B>[36mid=<U+001B>[0m42 <U+001B>[36murl=<U+001B>[0mexample.com
  556. --- PASS: TestManageFavoritesUseCase_AddFavoriteAssignsTagsWithoutFolder (0.00s)
  557. === RUN TestManageFavoritesUseCase_AddFavoriteReturnsAssignTagError
  558. --- PASS: TestManageFavoritesUseCase_AddFavoriteReturnsAssignTagError (0.00s)
  559. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL
  560. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/#00
  561. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/not_a_url
  562. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/javascript:alert(1)
  563. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/data:text/html,<script>alert(1)</script>
  564. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/https:///missing-host
  565. === RUN TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/dumb:///missing-host
  566. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL (0.00s)
  567. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/#00 (0.00s)
  568. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/not_a_url (0.00s)
  569. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/javascript:alert(1) (0.00s)
  570. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/data:text/html,<script>alert(1)</script> (0.00s)
  571. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/https:///missing-host (0.00s)
  572. --- PASS: TestManageFavoritesUseCase_AddFavoriteRejectsUnsafeOrMalformedURL/dumb:///missing-host (0.00s)
  573. === RUN TestManageFavoritesUseCase_AddFavoriteNormalizesOpaqueDumbRoute
  574. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mfavorite added<U+001B>[0m <U+001B>[36mid=<U+001B>[0m0 <U+001B>[36murl=<U+001B>[0mhistory
  575. --- PASS: TestManageFavoritesUseCase_AddFavoriteNormalizesOpaqueDumbRoute (0.00s)
  576. === RUN TestManageSessionUseCase_StartSession_SavesAndReturnsLogger
  577. <U+001B>[90m<nil><U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession started<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20261022_113524_502d <U+001B>[36mtype=<U+001B>[0mbrowser
  578. --- PASS: TestManageSessionUseCase_StartSession_SavesAndReturnsLogger (0.00s)
  579. === RUN TestManageSessionUseCase_StartSession_WhenSaveFails_CleansUp
  580. --- PASS: TestManageSessionUseCase_StartSession_WhenSaveFails_CleansUp (0.00s)
  581. === RUN TestRestoreSessionUseCase_Execute_ReturnsState
  582. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrestoring session state<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_restore
  583. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1msession state loaded for restoration<U+001B>[0m <U+001B>[36mpane_count=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251224_120000_restore <U+001B>[36mtab_count=<U+001B>[0m1
  584. --- PASS: TestRestoreSessionUseCase_Execute_ReturnsState (0.00s)
  585. === RUN TestRestoreSessionUseCase_Execute_RequiresSessionID
  586. --- PASS: TestRestoreSessionUseCase_Execute_RequiresSessionID (0.00s)
  587. === RUN TestRestoreSessionUseCase_Execute_SessionNotFound
  588. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrestoring session state<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_notfound
  589. --- PASS: TestRestoreSessionUseCase_Execute_SessionNotFound (0.00s)
  590. === RUN TestRestoreSessionUseCase_Execute_VersionMismatch
  591. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrestoring session state<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_version
  592. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1msession state version is newer than current version<U+001B>[0m <U+001B>[36mcurrent_version=<U+001B>[0m2 <U+001B>[36mstate_version=<U+001B>[0m3
  593. --- PASS: TestRestoreSessionUseCase_Execute_VersionMismatch (0.00s)
  594. === RUN TestRestoreSessionUseCase_Execute_GetSnapshotError
  595. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrestoring session state<U+001B>[0m <U+001B>[36msession_id=<U+001B>[0m20251224_120000_error
  596. --- PASS: TestRestoreSessionUseCase_Execute_GetSnapshotError (0.00s)
  597. === RUN TestRestoreSessionUseCase_DeleteSnapshot
  598. --- PASS: TestRestoreSessionUseCase_DeleteSnapshot (0.00s)
  599. === RUN TestSaveWebUIConfigUseCase_Validation
  600. === RUN TestSaveWebUIConfigUseCase_Validation/rejects_invalid_default_search_URL
  601. === RUN TestSaveWebUIConfigUseCase_Validation/rejects_invalid_performance_profile
  602. === RUN TestSaveWebUIConfigUseCase_Validation/rejects_NaN_UI_scale
  603. === RUN TestSaveWebUIConfigUseCase_Validation/rejects_infinite_UI_scale
  604. --- PASS: TestSaveWebUIConfigUseCase_Validation (0.00s)
  605. --- PASS: TestSaveWebUIConfigUseCase_Validation/rejects_invalid_default_search_URL (0.00s)
  606. --- PASS: TestSaveWebUIConfigUseCase_Validation/rejects_invalid_performance_profile (0.00s)
  607. --- PASS: TestSaveWebUIConfigUseCase_Validation/rejects_NaN_UI_scale (0.00s)
  608. --- PASS: TestSaveWebUIConfigUseCase_Validation/rejects_infinite_UI_scale (0.00s)
  609. === RUN TestSaveWebUIConfigUseCase_RejectsDuplicateTrimmedSearchShortcutKeys
  610. --- PASS: TestSaveWebUIConfigUseCase_RejectsDuplicateTrimmedSearchShortcutKeys (0.00s)
  611. === RUN TestSaveWebUIConfigUseCase_NormalizesAndSavesValidConfig
  612. --- PASS: TestSaveWebUIConfigUseCase_NormalizesAndSavesValidConfig (0.00s)
  613. === RUN TestSaveWebUIConfigUseCase_ClampsCustomPerformanceOnlyForCustomProfile
  614. === RUN TestSaveWebUIConfigUseCase_ClampsCustomPerformanceOnlyForCustomProfile/custom_is_clamped
  615. === RUN TestSaveWebUIConfigUseCase_ClampsCustomPerformanceOnlyForCustomProfile/other_profiles_are_untouched
  616. --- PASS: TestSaveWebUIConfigUseCase_ClampsCustomPerformanceOnlyForCustomProfile (0.00s)
  617. --- PASS: TestSaveWebUIConfigUseCase_ClampsCustomPerformanceOnlyForCustomProfile/custom_is_clamped (0.00s)
  618. --- PASS: TestSaveWebUIConfigUseCase_ClampsCustomPerformanceOnlyForCustomProfile/other_profiles_are_untouched (0.00s)
  619. === RUN TestSearchHistoryUseCase_GetRecent_ZeroLimitMeansAll
  620. --- PASS: TestSearchHistoryUseCase_GetRecent_ZeroLimitMeansAll (0.00s)
  621. === RUN TestSearchHistoryUseCase_GetRecent_NegativeLimitDefaultsToPageSize
  622. --- PASS: TestSearchHistoryUseCase_GetRecent_NegativeLimitDefaultsToPageSize (0.00s)
  623. === RUN TestSearchHistoryUseCase_GetRecent_ClampsOversizedLimit
  624. --- PASS: TestSearchHistoryUseCase_GetRecent_ClampsOversizedLimit (0.00s)
  625. === RUN TestSearchHistoryUseCase_Search_ClampsOversizedLimit
  626. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG FTS5 search completed <U+001B>[36mmatches=<U+001B>[0m0 <U+001B>[36mquery=<U+001B>[0mdumber
  627. --- PASS: TestSearchHistoryUseCase_Search_ClampsOversizedLimit (0.00s)
  628. === RUN TestSearchHistoryUseCase_Search_AppliesOptionalAgeScope
  629. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG FTS5 search completed <U+001B>[36mmatches=<U+001B>[0m0 <U+001B>[36mquery=<U+001B>[0mdumber
  630. --- PASS: TestSearchHistoryUseCase_Search_AppliesOptionalAgeScope (0.00s)
  631. === RUN TestSearchHistoryUseCase_Search_ZeroMaxAgeMeansAllHistory
  632. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG FTS5 search completed <U+001B>[36mmatches=<U+001B>[0m0 <U+001B>[36mquery=<U+001B>[0mdumber
  633. --- PASS: TestSearchHistoryUseCase_Search_ZeroMaxAgeMeansAllHistory (0.00s)
  634. === RUN TestSearchHistoryUseCase_GetRecentWithin_AppliesScopeAndLimit
  635. --- PASS: TestSearchHistoryUseCase_GetRecentWithin_AppliesScopeAndLimit (0.00s)
  636. === RUN TestSearchHistoryUseCase_GetRecentWithin_ZeroMeansAllHistory
  637. --- PASS: TestSearchHistoryUseCase_GetRecentWithin_ZeroMeansAllHistory (0.00s)
  638. === RUN TestSearchHistoryUseCase_GetMostVisitedWithin_AppliesScopeAndLimit
  639. --- PASS: TestSearchHistoryUseCase_GetMostVisitedWithin_AppliesScopeAndLimit (0.00s)
  640. === RUN TestSearchHistoryUseCase_GetMostVisitedWithin_ZeroMeansAllHistory
  641. --- PASS: TestSearchHistoryUseCase_GetMostVisitedWithin_ZeroMeansAllHistory (0.00s)
  642. === RUN TestSearchHistoryUseCase_GetRecentWindow_InvalidDomainReturnsValidationError
  643. --- PASS: TestSearchHistoryUseCase_GetRecentWindow_InvalidDomainReturnsValidationError (0.00s)
  644. === RUN TestSearchHistoryUseCase_GetRecentWindow_RejectsInvalidCursorPairs
  645. --- PASS: TestSearchHistoryUseCase_GetRecentWindow_RejectsInvalidCursorPairs (0.00s)
  646. === RUN TestSearchHistoryUseCase_GetRecentWindow_UsesLimitPlusOneForHasMoreAndCursor
  647. --- PASS: TestSearchHistoryUseCase_GetRecentWindow_UsesLimitPlusOneForHasMoreAndCursor (0.00s)
  648. === RUN TestSearchHistoryUseCase_GetRecentSince_ReturnsEntries
  649. --- PASS: TestSearchHistoryUseCase_GetRecentSince_ReturnsEntries (0.00s)
  650. === RUN TestSearchHistoryUseCase_GetRecentSince_ZeroMeansAll
  651. --- PASS: TestSearchHistoryUseCase_GetRecentSince_ZeroMeansAll (0.00s)
  652. === RUN TestSearchHistoryUseCase_GetRecentSince_NegativeDaysDefaultsTo30
  653. --- PASS: TestSearchHistoryUseCase_GetRecentSince_NegativeDaysDefaultsTo30 (0.00s)
  654. === RUN TestSearchHistoryUseCase_GetRecentSince_ReturnsErrorOnRepoFailure
  655. --- PASS: TestSearchHistoryUseCase_GetRecentSince_ReturnsErrorOnRepoFailure (0.00s)
  656. === RUN TestSearchHistoryUseCase_GetMostVisited_ReturnsEntries
  657. --- PASS: TestSearchHistoryUseCase_GetMostVisited_ReturnsEntries (0.00s)
  658. === RUN TestSearchHistoryUseCase_GetMostVisited_ZeroMeansAll
  659. --- PASS: TestSearchHistoryUseCase_GetMostVisited_ZeroMeansAll (0.00s)
  660. === RUN TestSearchHistoryUseCase_GetMostVisited_ReturnsErrorOnRepoFailure
  661. --- PASS: TestSearchHistoryUseCase_GetMostVisited_ReturnsErrorOnRepoFailure (0.00s)
  662. === RUN TestSearchHistoryUseCase_GetMostVisited_ReturnsEmptyWhenNoHistory
  663. --- PASS: TestSearchHistoryUseCase_GetMostVisited_ReturnsEmptyWhenNoHistory (0.00s)
  664. === RUN TestSearchHistoryUseCase_GetDomainStats_ClampsOversizedLimit
  665. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG getting domain stats <U+001B>[36mlimit=<U+001B>[0m10000
  666. --- PASS: TestSearchHistoryUseCase_GetDomainStats_ClampsOversizedLimit (0.00s)
  667. === RUN TestSearchHistoryUseCase_Delete_PublishesDeleteChangeAfterSuccess
  668. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history entry <U+001B>[36mid=<U+001B>[0m42
  669. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG history entry deleted <U+001B>[36mid=<U+001B>[0m42
  670. --- PASS: TestSearchHistoryUseCase_Delete_PublishesDeleteChangeAfterSuccess (0.00s)
  671. === RUN TestSearchHistoryUseCase_Delete_DoesNotPublishOnRepositoryError
  672. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history entry <U+001B>[36mid=<U+001B>[0m42
  673. --- PASS: TestSearchHistoryUseCase_Delete_DoesNotPublishOnRepositoryError (0.00s)
  674. === RUN TestSearchHistoryUseCase_DeleteByDomain_PublishesDeleteChangeAfterSuccess
  675. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history by domain <U+001B>[36mdomain=<U+001B>[0mexample.com
  676. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mhistory deleted for domain<U+001B>[0m <U+001B>[36mdomain=<U+001B>[0mexample.com
  677. --- PASS: TestSearchHistoryUseCase_DeleteByDomain_PublishesDeleteChangeAfterSuccess (0.00s)
  678. === RUN TestSearchHistoryUseCase_DeleteByDomain_DoesNotPublishOnRepositoryError
  679. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history by domain <U+001B>[36mdomain=<U+001B>[0mexample.com
  680. --- PASS: TestSearchHistoryUseCase_DeleteByDomain_DoesNotPublishOnRepositoryError (0.00s)
  681. === RUN TestSearchHistoryUseCase_SetHistoryMutationCoordinator_TypedNilClearsCoordinator
  682. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  683. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mall history cleared<U+001B>[0m
  684. --- PASS: TestSearchHistoryUseCase_SetHistoryMutationCoordinator_TypedNilClearsCoordinator (0.00s)
  685. === RUN TestSearchHistoryUseCase_ClearAll_PublishesClearChangeAfterSuccess
  686. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  687. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mall history cleared<U+001B>[0m
  688. --- PASS: TestSearchHistoryUseCase_ClearAll_PublishesClearChangeAfterSuccess (0.00s)
  689. === RUN TestSearchHistoryUseCase_ClearAll_CoordinatesPendingRecorderWritesBeforeDelete
  690. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  691. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mall history cleared<U+001B>[0m
  692. --- PASS: TestSearchHistoryUseCase_ClearAll_CoordinatesPendingRecorderWritesBeforeDelete (0.00s)
  693. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish
  694. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/delete
  695. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history entry <U+001B>[36mid=<U+001B>[0m42
  696. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG history entry deleted <U+001B>[36mid=<U+001B>[0m42
  697. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/delete_by_domain
  698. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history by domain <U+001B>[36mdomain=<U+001B>[0mexample.com
  699. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mhistory deleted for domain<U+001B>[0m <U+001B>[36mdomain=<U+001B>[0mexample.com
  700. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/clear_older_than
  701. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing old history <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  702. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mold history cleared<U+001B>[0m <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  703. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/clear_range
  704. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing recent history range <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  705. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrecent history range cleared<U+001B>[0m <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  706. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish (0.00s)
  707. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/delete (0.00s)
  708. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/delete_by_domain (0.00s)
  709. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/clear_older_than (0.00s)
  710. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsCoordinateBeforeDeleteAndPublish/clear_range (0.00s)
  711. === RUN TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError
  712. === RUN TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/delete
  713. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history entry <U+001B>[36mid=<U+001B>[0m42
  714. === RUN TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/delete_by_domain
  715. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history by domain <U+001B>[36mdomain=<U+001B>[0mexample.com
  716. === RUN TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/clear_older_than
  717. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing old history <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  718. === RUN TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/clear_range
  719. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing recent history range <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  720. === RUN TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/clear_all
  721. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  722. --- PASS: TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError (0.00s)
  723. --- PASS: TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/delete (0.00s)
  724. --- PASS: TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/delete_by_domain (0.00s)
  725. --- PASS: TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/clear_older_than (0.00s)
  726. --- PASS: TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/clear_range (0.00s)
  727. --- PASS: TestSearchHistoryUseCase_DestructiveMutationsReleaseCoordinatorOnRepositoryError/clear_all (0.00s)
  728. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting
  729. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/delete
  730. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history entry <U+001B>[36mid=<U+001B>[0m42
  731. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/delete_by_domain
  732. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history by domain <U+001B>[36mdomain=<U+001B>[0mexample.com
  733. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/clear_older_than
  734. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing old history <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  735. === RUN TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/clear_range
  736. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing recent history range <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  737. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting (0.00s)
  738. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/delete (0.00s)
  739. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/delete_by_domain (0.00s)
  740. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/clear_older_than (0.00s)
  741. --- PASS: TestSearchHistoryUseCase_OtherDestructiveMutationsReturnCoordinatorErrorBeforeDeleting/clear_range (0.00s)
  742. === RUN TestSearchHistoryUseCase_ClearAll_ReturnsCoordinatorErrorBeforeDeleting
  743. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  744. --- PASS: TestSearchHistoryUseCase_ClearAll_ReturnsCoordinatorErrorBeforeDeleting (0.00s)
  745. === RUN TestSearchHistoryUseCase_ClearAll_DoesNotPublishOnRepositoryError
  746. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  747. --- PASS: TestSearchHistoryUseCase_ClearAll_DoesNotPublishOnRepositoryError (0.00s)
  748. === RUN TestSearchHistoryUseCase_ClearOlderThan_PublishesClearChangeAfterSuccess
  749. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing old history <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  750. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mold history cleared<U+001B>[0m <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  751. --- PASS: TestSearchHistoryUseCase_ClearOlderThan_PublishesClearChangeAfterSuccess (0.00s)
  752. === RUN TestSearchHistoryUseCase_ClearOlderThan_DoesNotPublishOnRepositoryError
  753. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing old history <U+001B>[36mbefore=<U+001B>[0m2026-10-15T11:35:24Z
  754. --- PASS: TestSearchHistoryUseCase_ClearOlderThan_DoesNotPublishOnRepositoryError (0.00s)
  755. === RUN TestSearchHistoryUseCase_ClearRange_RecentRangeDeletesSinceCutoffAndPublishesClearChange
  756. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing recent history range <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  757. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrecent history range cleared<U+001B>[0m <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  758. --- PASS: TestSearchHistoryUseCase_ClearRange_RecentRangeDeletesSinceCutoffAndPublishesClearChange (0.00s)
  759. === RUN TestSearchHistoryUseCase_ClearRange_RecentRangeDoesNotPublishOnRepositoryError
  760. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing recent history range <U+001B>[36mrange=<U+001B>[0mhour <U+001B>[36msince=<U+001B>[0m2026-10-22T10:35:24Z
  761. --- PASS: TestSearchHistoryUseCase_ClearRange_RecentRangeDoesNotPublishOnRepositoryError (0.00s)
  762. === RUN TestSearchHistoryUseCase_ClearRange_TodayDeletesSinceLocalMidnight
  763. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing recent history range <U+001B>[36mrange=<U+001B>[0mday <U+001B>[36msince=<U+001B>[0m2026-10-22T00:00:00Z
  764. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mrecent history range cleared<U+001B>[0m <U+001B>[36mrange=<U+001B>[0mday <U+001B>[36msince=<U+001B>[0m2026-10-22T00:00:00Z
  765. --- PASS: TestSearchHistoryUseCase_ClearRange_TodayDeletesSinceLocalMidnight (0.00s)
  766. === RUN TestSearchHistoryUseCase_ClearRange_AllUsesClearAllAndPublishesOnce
  767. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  768. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mall history cleared<U+001B>[0m
  769. --- PASS: TestSearchHistoryUseCase_ClearRange_AllUsesClearAllAndPublishesOnce (0.00s)
  770. === RUN TestSearchHistoryUseCase_ClearRange_AllDoesNotPublishOnRepositoryError
  771. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG clearing all history
  772. --- PASS: TestSearchHistoryUseCase_ClearRange_AllDoesNotPublishOnRepositoryError (0.00s)
  773. === RUN TestSearchHistoryUseCase_ClearRange_UnknownRangeDoesNotDeleteOrPublish
  774. --- PASS: TestSearchHistoryUseCase_ClearRange_UnknownRangeDoesNotDeleteOrPublish (0.00s)
  775. === RUN TestSearchHistoryUseCase_GetRecentByDomainAllowsUnderscoreDomains
  776. --- PASS: TestSearchHistoryUseCase_GetRecentByDomainAllowsUnderscoreDomains (0.00s)
  777. === RUN TestSearchHistoryUseCase_GetRecentByDomain_ClampsOversizedLimit
  778. --- PASS: TestSearchHistoryUseCase_GetRecentByDomain_ClampsOversizedLimit (0.00s)
  779. === RUN TestSearchHistoryUseCase_DeleteByDomainAllowsUnderscoreDomains
  780. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG deleting history by domain <U+001B>[36mdomain=<U+001B>[0mexample_.com
  781. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mhistory deleted for domain<U+001B>[0m <U+001B>[36mdomain=<U+001B>[0mexample_.com
  782. --- PASS: TestSearchHistoryUseCase_DeleteByDomainAllowsUnderscoreDomains (0.00s)
  783. === RUN TestSearchHistoryUseCase_Search_NegativeMaxAgeMeansAllHistory
  784. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG FTS5 search completed <U+001B>[36mmatches=<U+001B>[0m0 <U+001B>[36mquery=<U+001B>[0mdumber
  785. --- PASS: TestSearchHistoryUseCase_Search_NegativeMaxAgeMeansAllHistory (0.00s)
  786. === RUN TestSearchHistoryUseCase_GetRecentWithin_NegativeMaxAgeMeansAllHistory
  787. --- PASS: TestSearchHistoryUseCase_GetRecentWithin_NegativeMaxAgeMeansAllHistory (0.00s)
  788. === RUN TestSearchHistoryUseCase_GetRecentWithin_NonPositiveLimitReturnsEmpty
  789. --- PASS: TestSearchHistoryUseCase_GetRecentWithin_NonPositiveLimitReturnsEmpty (0.00s)
  790. === RUN TestSearchHistoryUseCase_GetMostVisitedWithin_NonPositiveLimitReturnsEmpty
  791. --- PASS: TestSearchHistoryUseCase_GetMostVisitedWithin_NonPositiveLimitReturnsEmpty (0.00s)
  792. === RUN TestSearchHistoryUseCase_GetRecentWithin_ClampsOversizedLimit
  793. --- PASS: TestSearchHistoryUseCase_GetRecentWithin_ClampsOversizedLimit (0.00s)
  794. === RUN TestSearchHistoryUseCase_GetMostVisitedWithin_ClampsOversizedLimit
  795. --- PASS: TestSearchHistoryUseCase_GetMostVisitedWithin_ClampsOversizedLimit (0.00s)
  796. === RUN TestSnapshotSessionUseCase_Execute_SavesSnapshot
  797. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG creating session snapshot <U+001B>[36mpane_count=<U+001B>[0m1 <U+001B>[36msession_id=<U+001B>[0m20251224_120000_test <U+001B>[36mtab_count=<U+001B>[0m1
  798. --- PASS: TestSnapshotSessionUseCase_Execute_SavesSnapshot (0.00s)
  799. === RUN TestSnapshotSessionUseCase_Execute_EmptyTabList
  800. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG creating session snapshot <U+001B>[36mpane_count=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251224_120000_empty <U+001B>[36mtab_count=<U+001B>[0m0
  801. --- PASS: TestSnapshotSessionUseCase_Execute_EmptyTabList (0.00s)
  802. === RUN TestSnapshotSessionUseCase_Execute_RequiresSessionID
  803. --- PASS: TestSnapshotSessionUseCase_Execute_RequiresSessionID (0.00s)
  804. === RUN TestSnapshotSessionUseCase_Execute_RejectsAmbiguousWindowAndTabListInput
  805. --- PASS: TestSnapshotSessionUseCase_Execute_RejectsAmbiguousWindowAndTabListInput (0.00s)
  806. === RUN TestSnapshotSessionUseCase_Execute_SavesEmptyWindowSnapshot
  807. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG creating window-scoped session snapshot <U+001B>[36mactive_window=<U+001B>[0m0 <U+001B>[36mpane_count=<U+001B>[0m0 <U+001B>[36msession_id=<U+001B>[0m20251224_120000_empty_v2_windows <U+001B>[36mwindow_count=<U+001B>[0m0
  808. --- PASS: TestSnapshotSessionUseCase_Execute_SavesEmptyWindowSnapshot (0.00s)
  809. === RUN TestSnapshotFromTabList_CreatesCorrectSnapshot
  810. --- PASS: TestSnapshotFromTabList_CreatesCorrectSnapshot (0.00s)
  811. === RUN TestSnapshotSessionUseCase_Execute_SavesWindowSnapshots
  812. <U+001B>[90m2026-10-22T11:35:24Z<U+001B>[0m DBG creating window-scoped session snapshot <U+001B>[36mactive_window=<U+001B>[0m0 <U+001B>[36mpane_count=<U+001B>[0m2 <U+001B>[36msession_id=<U+001B>[0m20251224_120000_v2_windows <U+001B>[36mwindow_count=<U+001B>[0m2
  813. --- PASS: TestSnapshotSessionUseCase_Execute_SavesWindowSnapshots (0.00s)
  814. === RUN TestSessionState_CountPanes
  815. --- PASS: TestSessionState_CountPanes (0.00s)
  816. === RUN TestGetRelativeTime
  817. === RUN TestGetRelativeTime/just_now
  818. === RUN TestGetRelativeTime/1_minute
  819. === RUN TestGetRelativeTime/5_minutes
  820. === RUN TestGetRelativeTime/1_hour
  821. === RUN TestGetRelativeTime/3_hours
  822. === RUN TestGetRelativeTime/1_day
  823. === RUN TestGetRelativeTime/2_days
  824. === RUN TestGetRelativeTime/1_week
  825. === RUN TestGetRelativeTime/2_weeks
  826. --- PASS: TestGetRelativeTime (0.00s)
  827. --- PASS: TestGetRelativeTime/just_now (0.00s)
  828. --- PASS: TestGetRelativeTime/1_minute (0.00s)
  829. --- PASS: TestGetRelativeTime/5_minutes (0.00s)
  830. --- PASS: TestGetRelativeTime/1_hour (0.00s)
  831. --- PASS: TestGetRelativeTime/3_hours (0.00s)
  832. --- PASS: TestGetRelativeTime/1_day (0.00s)
  833. --- PASS: TestGetRelativeTime/2_days (0.00s)
  834. --- PASS: TestGetRelativeTime/1_week (0.00s)
  835. --- PASS: TestGetRelativeTime/2_weeks (0.00s)
  836. === CONT TestPopupFeaturesRequestHost
  837. === RUN TestPopupFeaturesRequestHost/known_featureless
  838. === CONT TestBrowsingContextPolicyDecide
  839. === RUN TestBrowsingContextPolicyDecide/workspace_behavior_remains_pane_hosted
  840. === PAUSE TestBrowsingContextPolicyDecide/workspace_behavior_remains_pane_hosted
  841. === RUN TestBrowsingContextPolicyDecide/zero_source_preserves_workspace_behavior
  842. === PAUSE TestBrowsingContextPolicyDecide/zero_source_preserves_workspace_behavior
  843. === RUN TestBrowsingContextPolicyDecide/floating_blank_target_navigates_source
  844. === PAUSE TestBrowsingContextPolicyDecide/floating_blank_target_navigates_source
  845. === RUN TestBrowsingContextPolicyDecide/floating_featureless_script_navigates_source
  846. === PAUSE TestBrowsingContextPolicyDecide/floating_featureless_script_navigates_source
  847. === RUN TestBrowsingContextPolicyDecide/floating_featured_script_opens_native_popup
  848. === PAUSE TestBrowsingContextPolicyDecide/floating_featured_script_opens_native_popup
  849. === RUN TestBrowsingContextPolicyDecide/floating_unknown_script_waits
  850. === PAUSE TestBrowsingContextPolicyDecide/floating_unknown_script_waits
  851. === RUN TestBrowsingContextPolicyDecide/floating_named_unknown_waits
  852. === PAUSE TestBrowsingContextPolicyDecide/floating_named_unknown_waits
  853. === RUN TestBrowsingContextPolicyDecide/auth_intent_precedes_floating
  854. === PAUSE TestBrowsingContextPolicyDecide/auth_intent_precedes_floating
  855. === RUN TestBrowsingContextPolicyDecide/native_opener_precedes_floating
  856. === PAUSE TestBrowsingContextPolicyDecide/native_opener_precedes_floating
  857. === RUN TestBrowsingContextPolicyDecide/ambiguous_workspace_opener_stays_native
  858. === PAUSE TestBrowsingContextPolicyDecide/ambiguous_workspace_opener_stays_native
  859. === RUN TestBrowsingContextPolicyDecide/floating_live_named_context_is_reused
  860. === PAUSE TestBrowsingContextPolicyDecide/floating_live_named_context_is_reused
  861. === RUN TestBrowsingContextPolicyDecide/floating_noopener_skips_named_reuse
  862. === PAUSE TestBrowsingContextPolicyDecide/floating_noopener_skips_named_reuse
  863. === RUN TestBrowsingContextPolicyDecide/empty_target_is_denied_first
  864. === PAUSE TestBrowsingContextPolicyDecide/empty_target_is_denied_first
  865. === CONT TestBrowsingContextPolicyDecide/workspace_behavior_remains_pane_hosted
  866. === CONT TestBrowsingContextPolicyDecide/empty_target_is_denied_first
  867. === CONT TestBrowsingContextPolicyDecide/floating_noopener_skips_named_reuse
  868. === CONT TestBrowsingContextPolicyDecide/floating_live_named_context_is_reused
  869. === CONT TestBrowsingContextPolicyDecide/ambiguous_workspace_opener_stays_native
  870. === CONT TestBrowsingContextPolicyDecide/native_opener_precedes_floating
  871. === CONT TestBrowsingContextPolicyDecide/auth_intent_precedes_floating
  872. === CONT TestBrowsingContextPolicyDecide/floating_named_unknown_waits
  873. === CONT TestBrowsingContextPolicyDecide/floating_unknown_script_waits
  874. === CONT TestBrowsingContextPolicyDecide/floating_featured_script_opens_native_popup
  875. === CONT TestBrowsingContextPolicyDecide/floating_featureless_script_navigates_source
  876. === CONT TestBrowsingContextPolicyDecide/floating_blank_target_navigates_source
  877. === CONT TestBrowsingContextPolicyDecide/zero_source_preserves_workspace_behavior
  878. --- PASS: TestBrowsingContextPolicyDecide (0.00s)
  879. --- PASS: TestBrowsingContextPolicyDecide/workspace_behavior_remains_pane_hosted (0.00s)
  880. --- PASS: TestBrowsingContextPolicyDecide/empty_target_is_denied_first (0.00s)
  881. --- PASS: TestBrowsingContextPolicyDecide/floating_noopener_skips_named_reuse (0.00s)
  882. --- PASS: TestBrowsingContextPolicyDecide/floating_live_named_context_is_reused (0.00s)
  883. --- PASS: TestBrowsingContextPolicyDecide/ambiguous_workspace_opener_stays_native (0.00s)
  884. --- PASS: TestBrowsingContextPolicyDecide/native_opener_precedes_floating (0.00s)
  885. --- PASS: TestBrowsingContextPolicyDecide/auth_intent_precedes_floating (0.00s)
  886. --- PASS: TestBrowsingContextPolicyDecide/floating_named_unknown_waits (0.00s)
  887. --- PASS: TestBrowsingContextPolicyDecide/floating_unknown_script_waits (0.00s)
  888. --- PASS: TestBrowsingContextPolicyDecide/floating_featured_script_opens_native_popup (0.00s)
  889. --- PASS: TestBrowsingContextPolicyDecide/floating_featureless_script_navigates_source (0.00s)
  890. --- PASS: TestBrowsingContextPolicyDecide/floating_blank_target_navigates_source (0.00s)
  891. --- PASS: TestBrowsingContextPolicyDecide/zero_source_preserves_workspace_behavior (0.00s)
  892. === PAUSE TestPopupFeaturesRequestHost/known_featureless
  893. === RUN TestPopupFeaturesRequestHost/zero_width
  894. === PAUSE TestPopupFeaturesRequestHost/zero_width
  895. === RUN TestPopupFeaturesRequestHost/positive_width
  896. === PAUSE TestPopupFeaturesRequestHost/positive_width
  897. === RUN TestPopupFeaturesRequestHost/positive_height
  898. === PAUSE TestPopupFeaturesRequestHost/positive_height
  899. === RUN TestPopupFeaturesRequestHost/hidden_toolbar
  900. === PAUSE TestPopupFeaturesRequestHost/hidden_toolbar
  901. === RUN TestPopupFeaturesRequestHost/hidden_location_bar
  902. === PAUSE TestPopupFeaturesRequestHost/hidden_location_bar
  903. === RUN TestPopupFeaturesRequestHost/disabled_resize
  904. === PAUSE TestPopupFeaturesRequestHost/disabled_resize
  905. === RUN TestPopupFeaturesRequestHost/engine_popup_flag
  906. === PAUSE TestPopupFeaturesRequestHost/engine_popup_flag
  907. === RUN TestPopupFeaturesRequestHost/visible_chrome
  908. === PAUSE TestPopupFeaturesRequestHost/visible_chrome
  909. === RUN TestPopupFeaturesRequestHost/resizable
  910. === PAUSE TestPopupFeaturesRequestHost/resizable
  911. === CONT TestPopupFeaturesRequestHost/known_featureless
  912. === CONT TestPopupFeaturesRequestHost/hidden_location_bar
  913. === CONT TestPopupFeaturesRequestHost/disabled_resize
  914. === CONT TestPopupFeaturesRequestHost/engine_popup_flag
  915. === CONT TestPopupFeaturesRequestHost/positive_height
  916. === CONT TestPopupFeaturesRequestHost/hidden_toolbar
  917. === CONT TestPopupFeaturesRequestHost/positive_width
  918. === CONT TestPopupFeaturesRequestHost/zero_width
  919. === CONT TestPopupFeaturesRequestHost/resizable
  920. === CONT TestPopupFeaturesRequestHost/visible_chrome
  921. --- PASS: TestPopupFeaturesRequestHost (0.00s)
  922. --- PASS: TestPopupFeaturesRequestHost/known_featureless (0.00s)
  923. --- PASS: TestPopupFeaturesRequestHost/hidden_location_bar (0.00s)
  924. --- PASS: TestPopupFeaturesRequestHost/engine_popup_flag (0.00s)
  925. --- PASS: TestPopupFeaturesRequestHost/positive_height (0.00s)
  926. --- PASS: TestPopupFeaturesRequestHost/hidden_toolbar (0.00s)
  927. --- PASS: TestPopupFeaturesRequestHost/positive_width (0.00s)
  928. --- PASS: TestPopupFeaturesRequestHost/zero_width (0.00s)
  929. --- PASS: TestPopupFeaturesRequestHost/resizable (0.00s)
  930. --- PASS: TestPopupFeaturesRequestHost/visible_chrome (0.00s)
  931. --- PASS: TestPopupFeaturesRequestHost/disabled_resize (0.00s)
  932. PASS
  933. ok github.com/bnema/dumber/internal/application/usecase 2.865s
  934. === RUN TestRedactSensitiveContent
  935. === RUN TestRedactSensitiveContent/url_query_params
  936. === RUN TestRedactSensitiveContent/json_secret_fields
  937. === RUN TestRedactSensitiveContent/key_value_params
  938. === RUN TestRedactSensitiveContent/authorization_headers
  939. --- PASS: TestRedactSensitiveContent (0.00s)
  940. --- PASS: TestRedactSensitiveContent/url_query_params (0.00s)
  941. --- PASS: TestRedactSensitiveContent/json_secret_fields (0.00s)
  942. --- PASS: TestRedactSensitiveContent/key_value_params (0.00s)
  943. --- PASS: TestRedactSensitiveContent/authorization_headers (0.00s)
  944. === RUN TestReadRedactedLogTail_RingBuffer
  945. === RUN TestReadRedactedLogTail_RingBuffer/fewer_lines_than_requested
  946. === RUN TestReadRedactedLogTail_RingBuffer/exact_tail
  947. --- PASS: TestReadRedactedLogTail_RingBuffer (0.00s)
  948. --- PASS: TestReadRedactedLogTail_RingBuffer/fewer_lines_than_requested (0.00s)
  949. --- PASS: TestReadRedactedLogTail_RingBuffer/exact_tail (0.00s)
  950. === RUN TestWriteCrashReport
  951. --- PASS: TestWriteCrashReport (0.00s)
  952. === RUN TestRunDeferredInit_CEFExecutesNoWebKitDiagnostics
  953. --- PASS: TestRunDeferredInit_CEFExecutesNoWebKitDiagnostics (0.00s)
  954. === RUN TestCheckFunctions_RemainAvailableForExplicitCommands
  955. --- PASS: TestCheckFunctions_RemainAvailableForExplicitCommands (0.13s)
  956. === RUN TestApplyDevelopmentEnvironment_DevIsolatesHomeAndXDGDirectories
  957. --- PASS: TestApplyDevelopmentEnvironment_DevIsolatesHomeAndXDGDirectories (0.00s)
  958. === RUN TestApplyDevelopmentEnvironment_DevTightensExistingDevDirectoryPermissions
  959. --- PASS: TestApplyDevelopmentEnvironment_DevTightensExistingDevDirectoryPermissions (0.00s)
  960. === RUN TestApplyDevelopmentEnvironment_DevRejectsSandboxSymlink
  961. --- PASS: TestApplyDevelopmentEnvironment_DevRejectsSandboxSymlink (0.00s)
  962. === RUN TestApplyDevelopmentEnvironment_DevRejectsSandboxChildSymlinks
  963. === RUN TestApplyDevelopmentEnvironment_DevRejectsSandboxChildSymlinks/logs
  964. === RUN TestApplyDevelopmentEnvironment_DevRejectsSandboxChildSymlinks/engines
  965. --- PASS: TestApplyDevelopmentEnvironment_DevRejectsSandboxChildSymlinks (0.00s)
  966. --- PASS: TestApplyDevelopmentEnvironment_DevRejectsSandboxChildSymlinks/logs (0.00s)
  967. --- PASS: TestApplyDevelopmentEnvironment_DevRejectsSandboxChildSymlinks/engines (0.00s)
  968. === RUN TestApplyDevelopmentEnvironment_DevTightensExistingSandboxPermissions
  969. --- PASS: TestApplyDevelopmentEnvironment_DevTightensExistingSandboxPermissions (0.00s)
  970. === RUN TestApplyDevelopmentEnvironment_ProductionPreservesEnvironment
  971. --- PASS: TestApplyDevelopmentEnvironment_ProductionPreservesEnvironment (0.00s)
  972. === RUN TestBuildEngine_UnknownType
  973. --- PASS: TestBuildEngine_UnknownType (0.00s)
  974. === RUN TestBuildEngine_CEF_ReturnsErrorWhenRuntimeUnavailable
  975. --- PASS: TestBuildEngine_CEF_ReturnsErrorWhenRuntimeUnavailable (0.00s)
  976. === RUN TestBuildEngine_CEF_ReturnsErrorForUnsupportedCookiePolicy
  977. --- PASS: TestBuildEngine_CEF_ReturnsErrorForUnsupportedCookiePolicy (0.00s)
  978. === RUN TestBuildEngine_CEF_AllowsNoThirdPartyCookiePolicy
  979. --- PASS: TestBuildEngine_CEF_AllowsNoThirdPartyCookiePolicy (0.00s)
  980. === RUN TestBuildEngine_ReceivesResolvedProfile
  981. --- PASS: TestBuildEngine_ReceivesResolvedProfile (0.00s)
  982. === RUN TestRunWithInstanceRelayFailsBeforeEngineStartup
  983. --- PASS: TestRunWithInstanceRelayFailsBeforeEngineStartup (0.00s)
  984. === RUN TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent
  985. === RUN TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/default_external
  986. === RUN TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/named_instance
  987. === RUN TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/fresh_window
  988. === RUN TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/fresh_window_without_instance
  989. --- PASS: TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent (0.00s)
  990. --- PASS: TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/default_external (0.00s)
  991. --- PASS: TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/named_instance (0.00s)
  992. --- PASS: TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/fresh_window (0.00s)
  993. --- PASS: TestDeliverOrRunWithInstanceRelayPreservesLaunchIntent/fresh_window_without_instance (0.00s)
  994. === RUN TestDeliverOrRunWithInstanceRelayRetriesWhileHostStarts
  995. --- PASS: TestDeliverOrRunWithInstanceRelayRetriesWhileHostStarts (0.30s)
  996. === RUN TestDeliverOrRunWithInstanceRelayStartsHostForColdDefaultProfile
  997. --- PASS: TestDeliverOrRunWithInstanceRelayStartsHostForColdDefaultProfile (0.00s)
  998. === RUN TestDeliverOrRunWithInstanceRelayReturnsPermanentAcquireError
  999. --- PASS: TestDeliverOrRunWithInstanceRelayReturnsPermanentAcquireError (0.00s)
  1000. === RUN TestRunWithInstanceRelayOwnsLeaseThroughGUILifetime
  1001. --- PASS: TestRunWithInstanceRelayOwnsLeaseThroughGUILifetime (0.05s)
  1002. === RUN TestShouldPreloadLayerShell_WaylandWithoutPreloadReturnsTrue
  1003. --- PASS: TestShouldPreloadLayerShell_WaylandWithoutPreloadReturnsTrue (0.00s)
  1004. === RUN TestFindLayerShellLibrary_UsesLDLibraryPathCandidates
  1005. --- PASS: TestFindLayerShellLibrary_UsesLDLibraryPathCandidates (0.00s)
  1006. === RUN TestShouldPreloadLayerShell_AlreadyPreloadedReturnsFalse
  1007. --- PASS: TestShouldPreloadLayerShell_AlreadyPreloadedReturnsFalse (0.00s)
  1008. === RUN TestShouldPreloadLayerShell_NoWaylandReturnsFalse
  1009. --- PASS: TestShouldPreloadLayerShell_NoWaylandReturnsFalse (0.00s)
  1010. === RUN TestLayerShellPreloadPresent_DetectsLoadedLibrarySubstring
  1011. --- PASS: TestLayerShellPreloadPresent_DetectsLoadedLibrarySubstring (0.00s)
  1012. === RUN TestFindLayerShellLibrary_ReturnsFirstExistingCandidate
  1013. --- PASS: TestFindLayerShellLibrary_ReturnsFirstExistingCandidate (0.00s)
  1014. === RUN TestFindLayerShellLibrary_ReturnsArm64Candidate
  1015. --- PASS: TestFindLayerShellLibrary_ReturnsArm64Candidate (0.00s)
  1016. === RUN TestFindLayerShellLibrary_NoMatchReturnsEmpty
  1017. --- PASS: TestFindLayerShellLibrary_NoMatchReturnsEmpty (0.00s)
  1018. === RUN TestLayerShellLibrarySearchPaths_IncludesLDLibraryPathCandidates
  1019. --- PASS: TestLayerShellLibrarySearchPaths_IncludesLDLibraryPathCandidates (0.00s)
  1020. === RUN TestLayerShellPreloadEnv_SetsLDPreloadWhenEmpty
  1021. --- PASS: TestLayerShellPreloadEnv_SetsLDPreloadWhenEmpty (0.00s)
  1022. === RUN TestLayerShellPreloadEnv_PrependsLibraryToExistingLDPreload
  1023. --- PASS: TestLayerShellPreloadEnv_PrependsLibraryToExistingLDPreload (0.00s)
  1024. === RUN TestEngineSettingsPayloadFromConfigMapsRuntimeFields
  1025. --- PASS: TestEngineSettingsPayloadFromConfigMapsRuntimeFields (0.00s)
  1026. === RUN TestRuntimeConfigProviderUpdatesSnapshotBeforeCallback
  1027. --- PASS: TestRuntimeConfigProviderUpdatesSnapshotBeforeCallback (0.00s)
  1028. === RUN TestRuntimeConfigProviderCurrentReflectsManagerGetWithoutSubscription
  1029. --- PASS: TestRuntimeConfigProviderCurrentReflectsManagerGetWithoutSubscription (0.00s)
  1030. === RUN TestRuntimeConfigProviderCurrentFallsBackWhenManagerGetReturnsNil
  1031. --- PASS: TestRuntimeConfigProviderCurrentFallsBackWhenManagerGetReturnsNil (0.00s)
  1032. === RUN TestRuntimeConfigProviderOnChangeCallbackCanCallCurrent
  1033. --- PASS: TestRuntimeConfigProviderOnChangeCallbackCanCallCurrent (0.00s)
  1034. === RUN TestRuntimeConfigProviderOnChangeFallsBackWhenPayloadIsNil
  1035. --- PASS: TestRuntimeConfigProviderOnChangeFallsBackWhenPayloadIsNil (0.00s)
  1036. === RUN TestRuntimeConfigProviderOnChangeNilCallbackDoesNotRegister
  1037. --- PASS: TestRuntimeConfigProviderOnChangeNilCallbackDoesNotRegister (0.00s)
  1038. === RUN TestRuntimeConfigProviderWatchDelegatesToManager
  1039. --- PASS: TestRuntimeConfigProviderWatchDelegatesToManager (0.00s)
  1040. === RUN TestRuntimeConfigProviderCurrentReturnsMapClone
  1041. --- PASS: TestRuntimeConfigProviderCurrentReturnsMapClone (0.00s)
  1042. === RUN TestRuntimeConfigProviderCurrentReturnsNestedConfigClone
  1043. --- PASS: TestRuntimeConfigProviderCurrentReturnsNestedConfigClone (0.00s)
  1044. === RUN TestRuntimeConfigProviderOnChangePassesNestedConfigClone
  1045. --- PASS: TestRuntimeConfigProviderOnChangePassesNestedConfigClone (0.00s)
  1046. === RUN TestEngineSettingsPayloadFromNilConfigReturnsZeroPayload
  1047. --- PASS: TestEngineSettingsPayloadFromNilConfigReturnsZeroPayload (0.00s)
  1048. === RUN TestRuntimeConfigSnapshotFromConfigMapsUIRuntimeFields
  1049. --- PASS: TestRuntimeConfigSnapshotFromConfigMapsUIRuntimeFields (0.00s)
  1050. === RUN TestRuntimeConfigSnapshotFromConfigDetachesNestedMutableFields
  1051. --- PASS: TestRuntimeConfigSnapshotFromConfigDetachesNestedMutableFields (0.00s)
  1052. === RUN TestRuntimeConfigSnapshotFromNilConfigReturnsZeroSnapshot
  1053. --- PASS: TestRuntimeConfigSnapshotFromNilConfigReturnsZeroSnapshot (0.00s)
  1054. === RUN TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes
  1055. === RUN TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/auto
  1056. === RUN TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/force
  1057. === RUN TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/disable
  1058. === RUN TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/unknown
  1059. === RUN TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/zero_value
  1060. --- PASS: TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes (0.00s)
  1061. --- PASS: TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/auto (0.00s)
  1062. --- PASS: TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/force (0.00s)
  1063. --- PASS: TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/disable (0.00s)
  1064. --- PASS: TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/unknown (0.00s)
  1065. --- PASS: TestEngineSettingsPayloadFromConfigMapsHardwareDecodingModes/zero_value (0.00s)
  1066. === RUN TestApplyGTKIMModuleFallback
  1067. === RUN TestApplyGTKIMModuleFallback/GTK_IM_MODULE_already_set_=>_no_override,_no_message
  1068. === RUN TestApplyGTKIMModuleFallback/non-Wayland_with_GTK_IM_MODULE_unset_=>_no_override,_no_message
  1069. === RUN TestApplyGTKIMModuleFallback/Wayland_via_XDG_SESSION_TYPE_with_GTK_IM_MODULE_unset_=>_override_+_message
  1070. === RUN TestApplyGTKIMModuleFallback/Wayland_via_WAYLAND_DISPLAY_with_GTK_IM_MODULE_unset_=>_override_+_message
  1071. --- PASS: TestApplyGTKIMModuleFallback (0.00s)
  1072. --- PASS: TestApplyGTKIMModuleFallback/GTK_IM_MODULE_already_set_=>_no_override,_no_message (0.00s)
  1073. --- PASS: TestApplyGTKIMModuleFallback/non-Wayland_with_GTK_IM_MODULE_unset_=>_no_override,_no_message (0.00s)
  1074. --- PASS: TestApplyGTKIMModuleFallback/Wayland_via_XDG_SESSION_TYPE_with_GTK_IM_MODULE_unset_=>_override_+_message (0.00s)
  1075. --- PASS: TestApplyGTKIMModuleFallback/Wayland_via_WAYLAND_DISPLAY_with_GTK_IM_MODULE_unset_=>_override_+_message (0.00s)
  1076. === RUN TestResolveRuntimeProfile_UsesConfigEngineResolution
  1077. --- PASS: TestResolveRuntimeProfile_UsesConfigEngineResolution (0.00s)
  1078. === RUN TestResolveRuntimeProfile_ProdPreservesSharedPaths
  1079. --- PASS: TestResolveRuntimeProfile_ProdPreservesSharedPaths (0.00s)
  1080. === RUN TestResolveRuntimeProfile_DevUsesEngineSpecificNamespaces
  1081. --- PASS: TestResolveRuntimeProfile_DevUsesEngineSpecificNamespaces (0.00s)
  1082. === RUN TestResolveXDGRuntimeDir_UsesSharedRuntimeRootInDev
  1083. --- PASS: TestResolveXDGRuntimeDir_UsesSharedRuntimeRootInDev (0.00s)
  1084. === RUN TestResolveXDGRuntimeDir_UsesStateRuntimeRootInProd
  1085. --- PASS: TestResolveXDGRuntimeDir_UsesStateRuntimeRootInProd (0.00s)
  1086. === RUN TestNewSessionSpawnerRejectsDetachedRestoreForEphemeralProfile
  1087. --- PASS: TestNewSessionSpawnerRejectsDetachedRestoreForEphemeralProfile (0.00s)
  1088. === RUN TestRunSessionCleanup_DoesNotEndOtherActiveBrowserSessionsWithoutLivenessProof
  1089. === PAUSE TestRunSessionCleanup_DoesNotEndOtherActiveBrowserSessionsWithoutLivenessProof
  1090. === RUN TestRunSessionCleanup_NoPanicOnNilSessions
  1091. === PAUSE TestRunSessionCleanup_NoPanicOnNilSessions
  1092. === CONT TestRunSessionCleanup_DoesNotEndOtherActiveBrowserSessionsWithoutLivenessProof
  1093. === CONT TestRunSessionCleanup_NoPanicOnNilSessions
  1094. --- PASS: TestRunSessionCleanup_NoPanicOnNilSessions (0.00s)
  1095. --- PASS: TestRunSessionCleanup_DoesNotEndOtherActiveBrowserSessionsWithoutLivenessProof (0.00s)
  1096. PASS
  1097. ok github.com/bnema/dumber/internal/bootstrap 0.593s
  1098. ? github.com/bnema/dumber/internal/bootstrap/mocks [no test files]
  1099. === RUN TestResolveCLIThemePreservesDarkDefault
  1100. --- PASS: TestResolveCLIThemePreservesDarkDefault (0.00s)
  1101. === RUN TestResolveCLIThemeHonorsExplicitLightPreference
  1102. --- PASS: TestResolveCLIThemeHonorsExplicitLightPreference (0.00s)
  1103. === RUN TestResolveCLIThemeUsesEnabledExternalTheme
  1104. --- PASS: TestResolveCLIThemeUsesEnabledExternalTheme (0.00s)
  1105. PASS
  1106. ok github.com/bnema/dumber/internal/cli 0.054s
  1107. === RUN TestParseBrowseArgs
  1108. === RUN TestParseBrowseArgs/normal
  1109. === RUN TestParseBrowseArgs/named
  1110. === RUN TestParseBrowseArgs/url_after
  1111. === RUN TestParseBrowseArgs/url_before
  1112. === RUN TestParseBrowseArgs/missing_name
  1113. === RUN TestParseBrowseArgs/empty_equals
  1114. === RUN TestParseBrowseArgs/empty_separate
  1115. === RUN TestParseBrowseArgs/flag-like_name
  1116. === RUN TestParseBrowseArgs/flag-like_profile
  1117. === RUN TestParseBrowseArgs/help
  1118. === RUN TestParseBrowseArgs/unknown
  1119. === RUN TestParseBrowseArgs/extra
  1120. --- PASS: TestParseBrowseArgs (0.00s)
  1121. --- PASS: TestParseBrowseArgs/normal (0.00s)
  1122. --- PASS: TestParseBrowseArgs/named (0.00s)
  1123. --- PASS: TestParseBrowseArgs/url_after (0.00s)
  1124. --- PASS: TestParseBrowseArgs/url_before (0.00s)
  1125. --- PASS: TestParseBrowseArgs/missing_name (0.00s)
  1126. --- PASS: TestParseBrowseArgs/empty_equals (0.00s)
  1127. --- PASS: TestParseBrowseArgs/empty_separate (0.00s)
  1128. --- PASS: TestParseBrowseArgs/flag-like_name (0.00s)
  1129. --- PASS: TestParseBrowseArgs/flag-like_profile (0.00s)
  1130. --- PASS: TestParseBrowseArgs/help (0.00s)
  1131. --- PASS: TestParseBrowseArgs/unknown (0.00s)
  1132. --- PASS: TestParseBrowseArgs/extra (0.00s)
  1133. === RUN TestParseBrowseLaunchArgsProfiles
  1134. --- PASS: TestParseBrowseLaunchArgsProfiles (0.00s)
  1135. === RUN TestBrowseCommandPreRunERejectsFlagLikeValues
  1136. --- PASS: TestBrowseCommandPreRunERejectsFlagLikeValues (0.00s)
  1137. === RUN TestParseSelectionResolvesExistingLocalFile
  1138. --- PASS: TestParseSelectionResolvesExistingLocalFile (0.00s)
  1139. === RUN TestParseSelectionLeavesBangShortcutsToSearchHandling
  1140. --- PASS: TestParseSelectionLeavesBangShortcutsToSearchHandling (0.00s)
  1141. === RUN TestGetSessionsMerged_DBAndFS
  1142. --- PASS: TestGetSessionsMerged_DBAndFS (0.00s)
  1143. === RUN TestGetSessionsMerged_MissingTableFallsBack
  1144. --- PASS: TestGetSessionsMerged_MissingTableFallsBack (0.00s)
  1145. === RUN TestFindSession_DBShortIDMatch
  1146. --- PASS: TestFindSession_DBShortIDMatch (0.00s)
  1147. === RUN TestRootCommand_RegistersOmniboxCommand
  1148. --- PASS: TestRootCommand_RegistersOmniboxCommand (0.00s)
  1149. === RUN TestRootCommand_BrowseCommandRejectsExtraArgs
  1150. --- PASS: TestRootCommand_BrowseCommandRejectsExtraArgs (0.00s)
  1151. === RUN TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing
  1152. === RUN TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/interactive_sessions
  1153. === RUN TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/list_sessions
  1154. === RUN TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/delete_session
  1155. === RUN TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/find_session_helper
  1156. --- PASS: TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing (0.00s)
  1157. --- PASS: TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/interactive_sessions (0.00s)
  1158. --- PASS: TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/list_sessions (0.00s)
  1159. --- PASS: TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/delete_session (0.00s)
  1160. --- PASS: TestSessionCommandsReturnManagementErrorWhenSessionUseCaseMissing/find_session_helper (0.00s)
  1161. === RUN TestSessionRestoreReturnsRestorationErrorWhenSessionUseCaseMissing
  1162. --- PASS: TestSessionRestoreReturnsRestorationErrorWhenSessionUseCaseMissing (0.00s)
  1163. === RUN TestFindSessionByIDOrSuffixSearchesBeyondDefaultLimit
  1164. --- PASS: TestFindSessionByIDOrSuffixSearchesBeyondDefaultLimit (0.00s)
  1165. PASS
  1166. ok github.com/bnema/dumber/internal/cli/cmd 0.085s
  1167. ? github.com/bnema/dumber/internal/cli/cmd/mocks [no test files]
  1168. === RUN TestRenderSessionsList_KeepsSelectedVisibleWhenExpandedRowAbove
  1169. --- PASS: TestRenderSessionsList_KeepsSelectedVisibleWhenExpandedRowAbove (0.00s)
  1170. PASS
  1171. ok github.com/bnema/dumber/internal/cli/model 0.004s
  1172. === RUN TestConfigRenderer_RenderOpening
  1173. --- PASS: TestConfigRenderer_RenderOpening (0.00s)
  1174. === RUN TestCrashesCLIRenderer
  1175. --- PASS: TestCrashesCLIRenderer (0.00s)
  1176. === RUN TestPurgeModel_SessionsDisabledWhenDataSelected
  1177. --- PASS: TestPurgeModel_SessionsDisabledWhenDataSelected (0.00s)
  1178. === RUN TestPurgeModel_SelectedSessionIDs_ReturnsNilWhenDataSelected
  1179. --- PASS: TestPurgeModel_SelectedSessionIDs_ReturnsNilWhenDataSelected (0.00s)
  1180. === RUN TestPurgeModel_SelectedCount_IncludesSessions
  1181. --- PASS: TestPurgeModel_SelectedCount_IncludesSessions (0.00s)
  1182. === RUN TestPurgeModel_ToggleAllSessions
  1183. --- PASS: TestPurgeModel_ToggleAllSessions (0.00s)
  1184. === RUN TestPurgeModel_SelectedSize_IncludesAllSessionsWhenSelected
  1185. --- PASS: TestPurgeModel_SelectedSize_IncludesAllSessionsWhenSelected (0.00s)
  1186. === RUN TestPurgeModel_SelectedSize_IncludesFullSessionsSizeWhenDataSelected
  1187. --- PASS: TestPurgeModel_SelectedSize_IncludesFullSessionsSizeWhenDataSelected (0.00s)
  1188. === RUN TestSessionsCLIRenderer
  1189. --- PASS: TestSessionsCLIRenderer (0.00s)
  1190. === RUN TestNewThemeFromResolvedUsesActivePalette
  1191. --- PASS: TestNewThemeFromResolvedUsesActivePalette (0.00s)
  1192. === RUN TestNewThemeFromResolvedFallsBackToDarkPalette
  1193. --- PASS: TestNewThemeFromResolvedFallsBackToDarkPalette (0.00s)
  1194. === RUN TestNewThemeFromResolvedFallsBackToDefaultDarkPalette
  1195. --- PASS: TestNewThemeFromResolvedFallsBackToDefaultDarkPalette (0.00s)
  1196. PASS
  1197. ok github.com/bnema/dumber/internal/cli/styles 0.006s
  1198. === RUN TestComputeCompletionSuffix
  1199. === RUN TestComputeCompletionSuffix/empty_input
  1200. === RUN TestComputeCompletionSuffix/empty_fullText
  1201. === RUN TestComputeCompletionSuffix/both_empty
  1202. === RUN TestComputeCompletionSuffix/exact_match_returns_false
  1203. === RUN TestComputeCompletionSuffix/prefix_match
  1204. === RUN TestComputeCompletionSuffix/case_insensitive_match
  1205. === RUN TestComputeCompletionSuffix/case_insensitive_preserves_original_case_in_suffix
  1206. === RUN TestComputeCompletionSuffix/no_prefix_match
  1207. === RUN TestComputeCompletionSuffix/input_longer_than_fullText
  1208. === RUN TestComputeCompletionSuffix/single_character_prefix
  1209. === RUN TestComputeCompletionSuffix/bang_shortcut_prefix
  1210. --- PASS: TestComputeCompletionSuffix (0.00s)
  1211. --- PASS: TestComputeCompletionSuffix/empty_input (0.00s)
  1212. --- PASS: TestComputeCompletionSuffix/empty_fullText (0.00s)
  1213. --- PASS: TestComputeCompletionSuffix/both_empty (0.00s)
  1214. --- PASS: TestComputeCompletionSuffix/exact_match_returns_false (0.00s)
  1215. --- PASS: TestComputeCompletionSuffix/prefix_match (0.00s)
  1216. --- PASS: TestComputeCompletionSuffix/case_insensitive_match (0.00s)
  1217. --- PASS: TestComputeCompletionSuffix/case_insensitive_preserves_original_case_in_suffix (0.00s)
  1218. --- PASS: TestComputeCompletionSuffix/no_prefix_match (0.00s)
  1219. --- PASS: TestComputeCompletionSuffix/input_longer_than_fullText (0.00s)
  1220. --- PASS: TestComputeCompletionSuffix/single_character_prefix (0.00s)
  1221. --- PASS: TestComputeCompletionSuffix/bang_shortcut_prefix (0.00s)
  1222. === RUN TestStripProtocol
  1223. === RUN TestStripProtocol/https_protocol
  1224. === RUN TestStripProtocol/http_protocol
  1225. === RUN TestStripProtocol/no_protocol
  1226. === RUN TestStripProtocol/https_with_path
  1227. === RUN TestStripProtocol/http_with_query_string
  1228. === RUN TestStripProtocol/file_protocol_unchanged
  1229. === RUN TestStripProtocol/empty_string
  1230. --- PASS: TestStripProtocol (0.00s)
  1231. --- PASS: TestStripProtocol/https_protocol (0.00s)
  1232. --- PASS: TestStripProtocol/http_protocol (0.00s)
  1233. --- PASS: TestStripProtocol/no_protocol (0.00s)
  1234. --- PASS: TestStripProtocol/https_with_path (0.00s)
  1235. --- PASS: TestStripProtocol/http_with_query_string (0.00s)
  1236. --- PASS: TestStripProtocol/file_protocol_unchanged (0.00s)
  1237. --- PASS: TestStripProtocol/empty_string (0.00s)
  1238. === RUN TestComputeURLCompletionSuffix
  1239. === RUN TestComputeURLCompletionSuffix/empty_input
  1240. === RUN TestComputeURLCompletionSuffix/direct_match_with_protocol
  1241. === RUN TestComputeURLCompletionSuffix/match_without_protocol_in_input
  1242. === RUN TestComputeURLCompletionSuffix/match_with_www_prefix_in_URL_strips_www
  1243. === RUN TestComputeURLCompletionSuffix/match_with_www_in_input_but_not_URL
  1244. === RUN TestComputeURLCompletionSuffix/no_match
  1245. === RUN TestComputeURLCompletionSuffix/case_insensitive_URL_match
  1246. === RUN TestComputeURLCompletionSuffix/http_protocol_stripped
  1247. === RUN TestComputeURLCompletionSuffix/full_URL_match_returns_false
  1248. === RUN TestComputeURLCompletionSuffix/URL_with_path
  1249. --- PASS: TestComputeURLCompletionSuffix (0.00s)
  1250. --- PASS: TestComputeURLCompletionSuffix/empty_input (0.00s)
  1251. --- PASS: TestComputeURLCompletionSuffix/direct_match_with_protocol (0.00s)
  1252. --- PASS: TestComputeURLCompletionSuffix/match_without_protocol_in_input (0.00s)
  1253. --- PASS: TestComputeURLCompletionSuffix/match_with_www_prefix_in_URL_strips_www (0.00s)
  1254. --- PASS: TestComputeURLCompletionSuffix/match_with_www_in_input_but_not_URL (0.00s)
  1255. --- PASS: TestComputeURLCompletionSuffix/no_match (0.00s)
  1256. --- PASS: TestComputeURLCompletionSuffix/case_insensitive_URL_match (0.00s)
  1257. --- PASS: TestComputeURLCompletionSuffix/http_protocol_stripped (0.00s)
  1258. --- PASS: TestComputeURLCompletionSuffix/full_URL_match_returns_false (0.00s)
  1259. --- PASS: TestComputeURLCompletionSuffix/URL_with_path (0.00s)
  1260. === RUN TestBestURLCompletion_PrefersHostForHostLikeInput
  1261. --- PASS: TestBestURLCompletion_PrefersHostForHostLikeInput (0.00s)
  1262. === RUN TestBestURLCompletion_KeepsPathForPathLikeInput
  1263. --- PASS: TestBestURLCompletion_KeepsPathForPathLikeInput (0.00s)
  1264. === RUN TestBestURLCompletion_SelectsAnyValidPrefixFromVisibleList
  1265. --- PASS: TestBestURLCompletion_SelectsAnyValidPrefixFromVisibleList (0.00s)
  1266. PASS
  1267. ok github.com/bnema/dumber/internal/domain/autocomplete 0.004s
  1268. ? github.com/bnema/dumber/internal/domain/build [no test files]
  1269. === RUN TestSanitizeFilename
  1270. === RUN TestSanitizeFilename/normal_filename
  1271. === RUN TestSanitizeFilename/filename_with_spaces
  1272. === RUN TestSanitizeFilename/path_traversal_with_parent_dirs
  1273. === RUN TestSanitizeFilename/path_traversal_hidden_file
  1274. === RUN TestSanitizeFilename/nested_path
  1275. === RUN TestSanitizeFilename/absolute_path
  1276. === RUN TestSanitizeFilename/dot_only
  1277. === RUN TestSanitizeFilename/double_dot_only
  1278. === RUN TestSanitizeFilename/empty_string
  1279. === RUN TestSanitizeFilename/hidden_file
  1280. === RUN TestSanitizeFilename/windows_style_path
  1281. --- PASS: TestSanitizeFilename (0.00s)
  1282. --- PASS: TestSanitizeFilename/normal_filename (0.00s)
  1283. --- PASS: TestSanitizeFilename/filename_with_spaces (0.00s)
  1284. --- PASS: TestSanitizeFilename/path_traversal_with_parent_dirs (0.00s)
  1285. --- PASS: TestSanitizeFilename/path_traversal_hidden_file (0.00s)
  1286. --- PASS: TestSanitizeFilename/nested_path (0.00s)
  1287. --- PASS: TestSanitizeFilename/absolute_path (0.00s)
  1288. --- PASS: TestSanitizeFilename/dot_only (0.00s)
  1289. --- PASS: TestSanitizeFilename/double_dot_only (0.00s)
  1290. --- PASS: TestSanitizeFilename/empty_string (0.00s)
  1291. --- PASS: TestSanitizeFilename/hidden_file (0.00s)
  1292. --- PASS: TestSanitizeFilename/windows_style_path (0.00s)
  1293. === RUN TestSanitizeFilenameWithExtension
  1294. === RUN TestSanitizeFilenameWithExtension/no_extension_adds_inferred
  1295. === RUN TestSanitizeFilenameWithExtension/existing_extension_preserved
  1296. === RUN TestSanitizeFilenameWithExtension/path_traversal_with_inferred_extension
  1297. === RUN TestSanitizeFilenameWithExtension/no_mime_type_returns_sanitized
  1298. --- PASS: TestSanitizeFilenameWithExtension (0.00s)
  1299. --- PASS: TestSanitizeFilenameWithExtension/no_extension_adds_inferred (0.00s)
  1300. --- PASS: TestSanitizeFilenameWithExtension/existing_extension_preserved (0.00s)
  1301. --- PASS: TestSanitizeFilenameWithExtension/path_traversal_with_inferred_extension (0.00s)
  1302. --- PASS: TestSanitizeFilenameWithExtension/no_mime_type_returns_sanitized (0.00s)
  1303. === RUN TestGetExtensionFromMimeType
  1304. === RUN TestGetExtensionFromMimeType/empty_mime_type
  1305. === RUN TestGetExtensionFromMimeType/unknown_mime_type
  1306. === RUN TestGetExtensionFromMimeType/pdf_mime_type
  1307. === RUN TestGetExtensionFromMimeType/pdf_mime_type_with_charset_param
  1308. === RUN TestGetExtensionFromMimeType/text_html_with_charset
  1309. === RUN TestGetExtensionFromMimeType/mime_type_with_multiple_params
  1310. === RUN TestGetExtensionFromMimeType/invalid_mime_type
  1311. --- PASS: TestGetExtensionFromMimeType (0.00s)
  1312. --- PASS: TestGetExtensionFromMimeType/empty_mime_type (0.00s)
  1313. --- PASS: TestGetExtensionFromMimeType/unknown_mime_type (0.00s)
  1314. --- PASS: TestGetExtensionFromMimeType/pdf_mime_type (0.00s)
  1315. --- PASS: TestGetExtensionFromMimeType/pdf_mime_type_with_charset_param (0.00s)
  1316. --- PASS: TestGetExtensionFromMimeType/text_html_with_charset (0.00s)
  1317. --- PASS: TestGetExtensionFromMimeType/mime_type_with_multiple_params (0.00s)
  1318. --- PASS: TestGetExtensionFromMimeType/invalid_mime_type (0.00s)
  1319. === RUN TestExtractFilenameFromDestination
  1320. === RUN TestExtractFilenameFromDestination/file_URI_with_path
  1321. === RUN TestExtractFilenameFromDestination/file_URI_root
  1322. === RUN TestExtractFilenameFromDestination/plain_path
  1323. === RUN TestExtractFilenameFromDestination/filename_only
  1324. === RUN TestExtractFilenameFromDestination/empty_string
  1325. === RUN TestExtractFilenameFromDestination/file_URI_with_spaces
  1326. --- PASS: TestExtractFilenameFromDestination (0.00s)
  1327. --- PASS: TestExtractFilenameFromDestination/file_URI_with_path (0.00s)
  1328. --- PASS: TestExtractFilenameFromDestination/file_URI_root (0.00s)
  1329. --- PASS: TestExtractFilenameFromDestination/plain_path (0.00s)
  1330. --- PASS: TestExtractFilenameFromDestination/filename_only (0.00s)
  1331. --- PASS: TestExtractFilenameFromDestination/empty_string (0.00s)
  1332. --- PASS: TestExtractFilenameFromDestination/file_URI_with_spaces (0.00s)
  1333. === RUN TestExtractFilenameFromURI
  1334. === RUN TestExtractFilenameFromURI/http_URL_with_filename
  1335. === RUN TestExtractFilenameFromURI/http_URL_with_query_params
  1336. === RUN TestExtractFilenameFromURI/http_URL_without_filename
  1337. === RUN TestExtractFilenameFromURI/empty_string
  1338. === RUN TestExtractFilenameFromURI/plain_path
  1339. --- PASS: TestExtractFilenameFromURI (0.00s)
  1340. --- PASS: TestExtractFilenameFromURI/http_URL_with_filename (0.00s)
  1341. --- PASS: TestExtractFilenameFromURI/http_URL_with_query_params (0.00s)
  1342. --- PASS: TestExtractFilenameFromURI/http_URL_without_filename (0.00s)
  1343. --- PASS: TestExtractFilenameFromURI/empty_string (0.00s)
  1344. --- PASS: TestExtractFilenameFromURI/plain_path (0.00s)
  1345. === RUN TestMakeUniqueFilename
  1346. === RUN TestMakeUniqueFilename/file_does_not_exist
  1347. === RUN TestMakeUniqueFilename/file_exists,_adds__(1)
  1348. === RUN TestMakeUniqueFilename/file_and__(1)_exist,_adds__(2)
  1349. === RUN TestMakeUniqueFilename/no_extension
  1350. === RUN TestMakeUniqueFilename/hidden_file_with_extension
  1351. --- PASS: TestMakeUniqueFilename (0.00s)
  1352. --- PASS: TestMakeUniqueFilename/file_does_not_exist (0.00s)
  1353. --- PASS: TestMakeUniqueFilename/file_exists,_adds__(1) (0.00s)
  1354. --- PASS: TestMakeUniqueFilename/file_and__(1)_exist,_adds__(2) (0.00s)
  1355. --- PASS: TestMakeUniqueFilename/no_extension (0.00s)
  1356. --- PASS: TestMakeUniqueFilename/hidden_file_with_extension (0.00s)
  1357. === RUN TestShouldForceDownloadForURI
  1358. === RUN TestShouldForceDownloadForURI/pdf_path
  1359. === RUN TestShouldForceDownloadForURI/iso_path
  1360. === RUN TestShouldForceDownloadForURI/archive_path
  1361. === RUN TestShouldForceDownloadForURI/plain_html
  1362. === RUN TestShouldForceDownloadForURI/empty
  1363. --- PASS: TestShouldForceDownloadForURI (0.00s)
  1364. --- PASS: TestShouldForceDownloadForURI/pdf_path (0.00s)
  1365. --- PASS: TestShouldForceDownloadForURI/iso_path (0.00s)
  1366. --- PASS: TestShouldForceDownloadForURI/archive_path (0.00s)
  1367. --- PASS: TestShouldForceDownloadForURI/plain_html (0.00s)
  1368. --- PASS: TestShouldForceDownloadForURI/empty (0.00s)
  1369. === RUN TestShouldForceDownloadForMIMEType
  1370. === RUN TestShouldForceDownloadForMIMEType/pdf
  1371. === RUN TestShouldForceDownloadForMIMEType/pdf_with_params
  1372. === RUN TestShouldForceDownloadForMIMEType/iso_image
  1373. === RUN TestShouldForceDownloadForMIMEType/html
  1374. === RUN TestShouldForceDownloadForMIMEType/empty
  1375. --- PASS: TestShouldForceDownloadForMIMEType (0.00s)
  1376. --- PASS: TestShouldForceDownloadForMIMEType/pdf (0.00s)
  1377. --- PASS: TestShouldForceDownloadForMIMEType/pdf_with_params (0.00s)
  1378. --- PASS: TestShouldForceDownloadForMIMEType/iso_image (0.00s)
  1379. --- PASS: TestShouldForceDownloadForMIMEType/html (0.00s)
  1380. --- PASS: TestShouldForceDownloadForMIMEType/empty (0.00s)
  1381. === RUN TestShouldForceDownload
  1382. --- PASS: TestShouldForceDownload (0.00s)
  1383. PASS
  1384. ok github.com/bnema/dumber/internal/domain/download 0.013s
  1385. === RUN TestHasAccents
  1386. === RUN TestHasAccents/lowercase_e
  1387. === RUN TestHasAccents/uppercase_E
  1388. === RUN TestHasAccents/lowercase_a
  1389. === RUN TestHasAccents/uppercase_A
  1390. === RUN TestHasAccents/lowercase_c
  1391. === RUN TestHasAccents/lowercase_n
  1392. === RUN TestHasAccents/lowercase_x_(no_accents)
  1393. === RUN TestHasAccents/uppercase_X_(no_accents)
  1394. === RUN TestHasAccents/digit_1_(no_accents)
  1395. === RUN TestHasAccents/space_(no_accents)
  1396. --- PASS: TestHasAccents (0.00s)
  1397. --- PASS: TestHasAccents/lowercase_e (0.00s)
  1398. --- PASS: TestHasAccents/uppercase_E (0.00s)
  1399. --- PASS: TestHasAccents/lowercase_a (0.00s)
  1400. --- PASS: TestHasAccents/uppercase_A (0.00s)
  1401. --- PASS: TestHasAccents/lowercase_c (0.00s)
  1402. --- PASS: TestHasAccents/lowercase_n (0.00s)
  1403. --- PASS: TestHasAccents/lowercase_x_(no_accents) (0.00s)
  1404. --- PASS: TestHasAccents/uppercase_X_(no_accents) (0.00s)
  1405. --- PASS: TestHasAccents/digit_1_(no_accents) (0.00s)
  1406. --- PASS: TestHasAccents/space_(no_accents) (0.00s)
  1407. === RUN TestGetAccents
  1408. === RUN TestGetAccents/lowercase_e
  1409. === RUN TestGetAccents/uppercase_E
  1410. === RUN TestGetAccents/lowercase_a
  1411. === RUN TestGetAccents/uppercase_A
  1412. === RUN TestGetAccents/lowercase_c
  1413. === RUN TestGetAccents/uppercase_C_with_shift
  1414. === RUN TestGetAccents/no_accents_x
  1415. --- PASS: TestGetAccents (0.00s)
  1416. --- PASS: TestGetAccents/lowercase_e (0.00s)
  1417. --- PASS: TestGetAccents/uppercase_E (0.00s)
  1418. --- PASS: TestGetAccents/lowercase_a (0.00s)
  1419. --- PASS: TestGetAccents/uppercase_A (0.00s)
  1420. --- PASS: TestGetAccents/lowercase_c (0.00s)
  1421. --- PASS: TestGetAccents/uppercase_C_with_shift (0.00s)
  1422. --- PASS: TestGetAccents/no_accents_x (0.00s)
  1423. === RUN TestGetAccents_UppercaseFromLowercase
  1424. --- PASS: TestGetAccents_UppercaseFromLowercase (0.00s)
  1425. === RUN TestAccentMapCoverage
  1426. --- PASS: TestAccentMapCoverage (0.00s)
  1427. === RUN TestEngineSettingsPayloadContainsRuntimeWebContentFields
  1428. --- PASS: TestEngineSettingsPayloadContainsRuntimeWebContentFields (0.00s)
  1429. === RUN TestEngineSettingsUpdateHasNoRawBridge
  1430. --- PASS: TestEngineSettingsUpdateHasNoRawBridge (0.00s)
  1431. === RUN TestFavoriteSupportsMultipleTagsAndNoTags
  1432. --- PASS: TestFavoriteSupportsMultipleTagsAndNoTags (0.00s)
  1433. === RUN TestTagStoresTrimmedDisplayNameAndColor
  1434. --- PASS: TestTagStoresTrimmedDisplayNameAndColor (0.00s)
  1435. === RUN TestPaneNode_VisibleAreaCount
  1436. === RUN TestPaneNode_VisibleAreaCount/single_leaf_pane
  1437. === RUN TestPaneNode_VisibleAreaCount/horizontal_split_with_two_leaves
  1438. === RUN TestPaneNode_VisibleAreaCount/stacked_panes_count_as_one
  1439. === RUN TestPaneNode_VisibleAreaCount/split_with_one_stacked_side
  1440. === RUN TestPaneNode_VisibleAreaCount/nested_splits
  1441. === RUN TestPaneNode_VisibleAreaCount/complex_tree_with_stacks_and_splits
  1442. --- PASS: TestPaneNode_VisibleAreaCount (0.00s)
  1443. --- PASS: TestPaneNode_VisibleAreaCount/single_leaf_pane (0.00s)
  1444. --- PASS: TestPaneNode_VisibleAreaCount/horizontal_split_with_two_leaves (0.00s)
  1445. --- PASS: TestPaneNode_VisibleAreaCount/stacked_panes_count_as_one (0.00s)
  1446. --- PASS: TestPaneNode_VisibleAreaCount/split_with_one_stacked_side (0.00s)
  1447. --- PASS: TestPaneNode_VisibleAreaCount/nested_splits (0.00s)
  1448. --- PASS: TestPaneNode_VisibleAreaCount/complex_tree_with_stacks_and_splits (0.00s)
  1449. === RUN TestValidateHexColor_ValidHex
  1450. --- PASS: TestValidateHexColor_ValidHex (0.00s)
  1451. === RUN TestValidateHexColor_InvalidHex
  1452. --- PASS: TestValidateHexColor_InvalidHex (0.00s)
  1453. === RUN TestDefaultThemeFonts_ReturnsSaneDefaults
  1454. --- PASS: TestDefaultThemeFonts_ReturnsSaneDefaults (0.00s)
  1455. === RUN TestResolvedThemePalette_MustBeCSSSafeHex
  1456. --- PASS: TestResolvedThemePalette_MustBeCSSSafeHex (0.00s)
  1457. === RUN TestResolvedThemePalette_RejectsInvalidColors
  1458. --- PASS: TestResolvedThemePalette_RejectsInvalidColors (0.00s)
  1459. === RUN TestThemeModeColors_DefaultsAreCSSSafe
  1460. --- PASS: TestThemeModeColors_DefaultsAreCSSSafe (0.00s)
  1461. === RUN TestResolvedTheme_StructFieldsExist
  1462. --- PASS: TestResolvedTheme_StructFieldsExist (0.00s)
  1463. === RUN TestThemeSourceKind_ConstantsAreDistinct
  1464. --- PASS: TestThemeSourceKind_ConstantsAreDistinct (0.00s)
  1465. === RUN TestThemeWarning_FieldsExist
  1466. --- PASS: TestThemeWarning_FieldsExist (0.00s)
  1467. === RUN TestExternalTheme_IsDomainPure
  1468. --- PASS: TestExternalTheme_IsDomainPure (0.00s)
  1469. === RUN TestDefaultThemeFonts_AllFieldsAreSet
  1470. --- PASS: TestDefaultThemeFonts_AllFieldsAreSet (0.00s)
  1471. === RUN TestDefaultThemeModeColors_ReturnsSaneDefaults
  1472. --- PASS: TestDefaultThemeModeColors_ReturnsSaneDefaults (0.00s)
  1473. === RUN TestDefaultDarkPalette_ReturnsValidHex
  1474. --- PASS: TestDefaultDarkPalette_ReturnsValidHex (0.00s)
  1475. === RUN TestDefaultLightPalette_ReturnsValidHex
  1476. --- PASS: TestDefaultLightPalette_ReturnsValidHex (0.00s)
  1477. === RUN TestValidatePaletteHex_Valid
  1478. --- PASS: TestValidatePaletteHex_Valid (0.00s)
  1479. === RUN TestValidatePaletteHex_Invalid
  1480. --- PASS: TestValidatePaletteHex_Invalid (0.00s)
  1481. === RUN TestValidatePaletteHex_Nil
  1482. --- PASS: TestValidatePaletteHex_Nil (0.00s)
  1483. === RUN TestIsPaletteValid_EdgeCases
  1484. --- PASS: TestIsPaletteValid_EdgeCases (0.00s)
  1485. === RUN TestMergePalette_FillsEmpties
  1486. --- PASS: TestMergePalette_FillsEmpties (0.00s)
  1487. === RUN TestMergePalette_NilSrc
  1488. --- PASS: TestMergePalette_NilSrc (0.00s)
  1489. === RUN TestMergeFonts_FillsEmpties
  1490. --- PASS: TestMergeFonts_FillsEmpties (0.00s)
  1491. === RUN TestMergeFonts_NilSrc
  1492. --- PASS: TestMergeFonts_NilSrc (0.00s)
  1493. === RUN TestMergeModeColors_FillsEmpties
  1494. --- PASS: TestMergeModeColors_FillsEmpties (0.00s)
  1495. === RUN TestValidateModeColorsHex_ReturnsWarnings
  1496. --- PASS: TestValidateModeColorsHex_ReturnsWarnings (0.00s)
  1497. === RUN TestValidateModeColorsHex_DefaultsAreValid
  1498. --- PASS: TestValidateModeColorsHex_DefaultsAreValid (0.00s)
  1499. === RUN TestZoomPercentageRoundsDisplayedValue
  1500. === RUN TestZoomPercentageRoundsDisplayedValue/default_zoom
  1501. === RUN TestZoomPercentageRoundsDisplayedValue/accumulated_default_error
  1502. === RUN TestZoomPercentageRoundsDisplayedValue/accumulated_above_default
  1503. === RUN TestZoomPercentageRoundsDisplayedValue/ordinary_percent
  1504. === RUN TestZoomPercentageRoundsDisplayedValue/minimum_zoom
  1505. === RUN TestZoomPercentageRoundsDisplayedValue/maximum_zoom
  1506. === RUN TestZoomPercentageRoundsDisplayedValue/rounds_up
  1507. === RUN TestZoomPercentageRoundsDisplayedValue/rounds_down
  1508. === RUN TestZoomPercentageRoundsDisplayedValue/three_digit_percent_below_half
  1509. --- PASS: TestZoomPercentageRoundsDisplayedValue (0.00s)
  1510. --- PASS: TestZoomPercentageRoundsDisplayedValue/default_zoom (0.00s)
  1511. --- PASS: TestZoomPercentageRoundsDisplayedValue/accumulated_default_error (0.00s)
  1512. --- PASS: TestZoomPercentageRoundsDisplayedValue/accumulated_above_default (0.00s)
  1513. --- PASS: TestZoomPercentageRoundsDisplayedValue/ordinary_percent (0.00s)
  1514. --- PASS: TestZoomPercentageRoundsDisplayedValue/minimum_zoom (0.00s)
  1515. --- PASS: TestZoomPercentageRoundsDisplayedValue/maximum_zoom (0.00s)
  1516. --- PASS: TestZoomPercentageRoundsDisplayedValue/rounds_up (0.00s)
  1517. --- PASS: TestZoomPercentageRoundsDisplayedValue/rounds_down (0.00s)
  1518. --- PASS: TestZoomPercentageRoundsDisplayedValue/three_digit_percent_below_half (0.00s)
  1519. === RUN TestZoomPercentageSurvivesRepeatedSteps
  1520. --- PASS: TestZoomPercentageSurvivesRepeatedSteps (0.00s)
  1521. === RUN TestPermissionType_Constants
  1522. === RUN TestPermissionType_Constants/microphone
  1523. === RUN TestPermissionType_Constants/camera
  1524. === RUN TestPermissionType_Constants/display
  1525. === RUN TestPermissionType_Constants/device_info
  1526. === RUN TestPermissionType_Constants/clipboard
  1527. === RUN TestPermissionType_Constants/notification
  1528. === RUN TestPermissionType_Constants/geolocation
  1529. === RUN TestPermissionType_Constants/pointer_lock
  1530. === RUN TestPermissionType_Constants/media_key_system
  1531. === RUN TestPermissionType_Constants/website_data_access
  1532. --- PASS: TestPermissionType_Constants (0.00s)
  1533. --- PASS: TestPermissionType_Constants/microphone (0.00s)
  1534. --- PASS: TestPermissionType_Constants/camera (0.00s)
  1535. --- PASS: TestPermissionType_Constants/display (0.00s)
  1536. --- PASS: TestPermissionType_Constants/device_info (0.00s)
  1537. --- PASS: TestPermissionType_Constants/clipboard (0.00s)
  1538. --- PASS: TestPermissionType_Constants/notification (0.00s)
  1539. --- PASS: TestPermissionType_Constants/geolocation (0.00s)
  1540. --- PASS: TestPermissionType_Constants/pointer_lock (0.00s)
  1541. --- PASS: TestPermissionType_Constants/media_key_system (0.00s)
  1542. --- PASS: TestPermissionType_Constants/website_data_access (0.00s)
  1543. === RUN TestPermissionDecision_Constants
  1544. === RUN TestPermissionDecision_Constants/granted
  1545. === RUN TestPermissionDecision_Constants/denied
  1546. === RUN TestPermissionDecision_Constants/prompt
  1547. --- PASS: TestPermissionDecision_Constants (0.00s)
  1548. --- PASS: TestPermissionDecision_Constants/granted (0.00s)
  1549. --- PASS: TestPermissionDecision_Constants/denied (0.00s)
  1550. --- PASS: TestPermissionDecision_Constants/prompt (0.00s)
  1551. === RUN TestPermissionRecord_IsGranted
  1552. === RUN TestPermissionRecord_IsGranted/granted
  1553. === RUN TestPermissionRecord_IsGranted/denied
  1554. === RUN TestPermissionRecord_IsGranted/prompt
  1555. --- PASS: TestPermissionRecord_IsGranted (0.00s)
  1556. --- PASS: TestPermissionRecord_IsGranted/granted (0.00s)
  1557. --- PASS: TestPermissionRecord_IsGranted/denied (0.00s)
  1558. --- PASS: TestPermissionRecord_IsGranted/prompt (0.00s)
  1559. === RUN TestPermissionRecord_IsDenied
  1560. === RUN TestPermissionRecord_IsDenied/granted
  1561. === RUN TestPermissionRecord_IsDenied/denied
  1562. === RUN TestPermissionRecord_IsDenied/prompt
  1563. --- PASS: TestPermissionRecord_IsDenied (0.00s)
  1564. --- PASS: TestPermissionRecord_IsDenied/granted (0.00s)
  1565. --- PASS: TestPermissionRecord_IsDenied/denied (0.00s)
  1566. --- PASS: TestPermissionRecord_IsDenied/prompt (0.00s)
  1567. === RUN TestCanPersist
  1568. === RUN TestCanPersist/display_capture
  1569. === RUN TestCanPersist/device_info
  1570. === RUN TestCanPersist/pointer_lock
  1571. === RUN TestCanPersist/microphone
  1572. === RUN TestCanPersist/camera
  1573. === RUN TestCanPersist/clipboard
  1574. === RUN TestCanPersist/notification
  1575. === RUN TestCanPersist/geolocation
  1576. === RUN TestCanPersist/media_key_system
  1577. === RUN TestCanPersist/website_data_access
  1578. --- PASS: TestCanPersist (0.00s)
  1579. --- PASS: TestCanPersist/display_capture (0.00s)
  1580. --- PASS: TestCanPersist/device_info (0.00s)
  1581. --- PASS: TestCanPersist/pointer_lock (0.00s)
  1582. --- PASS: TestCanPersist/microphone (0.00s)
  1583. --- PASS: TestCanPersist/camera (0.00s)
  1584. --- PASS: TestCanPersist/clipboard (0.00s)
  1585. --- PASS: TestCanPersist/notification (0.00s)
  1586. --- PASS: TestCanPersist/geolocation (0.00s)
  1587. --- PASS: TestCanPersist/media_key_system (0.00s)
  1588. --- PASS: TestCanPersist/website_data_access (0.00s)
  1589. === RUN TestIsAutoAllow
  1590. === RUN TestIsAutoAllow/display_capture
  1591. === RUN TestIsAutoAllow/device_info
  1592. === RUN TestIsAutoAllow/pointer_lock
  1593. === RUN TestIsAutoAllow/microphone
  1594. === RUN TestIsAutoAllow/camera
  1595. === RUN TestIsAutoAllow/clipboard
  1596. === RUN TestIsAutoAllow/notification
  1597. === RUN TestIsAutoAllow/geolocation
  1598. --- PASS: TestIsAutoAllow (0.00s)
  1599. --- PASS: TestIsAutoAllow/display_capture (0.00s)
  1600. --- PASS: TestIsAutoAllow/device_info (0.00s)
  1601. --- PASS: TestIsAutoAllow/pointer_lock (0.00s)
  1602. --- PASS: TestIsAutoAllow/microphone (0.00s)
  1603. --- PASS: TestIsAutoAllow/camera (0.00s)
  1604. --- PASS: TestIsAutoAllow/clipboard (0.00s)
  1605. --- PASS: TestIsAutoAllow/notification (0.00s)
  1606. --- PASS: TestIsAutoAllow/geolocation (0.00s)
  1607. === RUN TestPermissionSet
  1608. --- PASS: TestPermissionSet (0.00s)
  1609. === RUN TestTabListFromSnapshot_EmptyState
  1610. --- PASS: TestTabListFromSnapshot_EmptyState (0.00s)
  1611. === RUN TestTabListFromSnapshot_SingleTab
  1612. --- PASS: TestTabListFromSnapshot_SingleTab (0.00s)
  1613. === RUN TestTabListFromSnapshot_MultipleTabs
  1614. --- PASS: TestTabListFromSnapshot_MultipleTabs (0.00s)
  1615. === RUN TestTabListFromSnapshot_SplitPanes
  1616. --- PASS: TestTabListFromSnapshot_SplitPanes (0.00s)
  1617. === RUN TestTabListFromSnapshot_StackedPanes
  1618. --- PASS: TestTabListFromSnapshot_StackedPanes (0.00s)
  1619. === RUN TestTabList_ReplaceFrom
  1620. --- PASS: TestTabList_ReplaceFrom (0.00s)
  1621. === RUN TestTabList_SnapshotClonesTabsAndWorkspace
  1622. --- PASS: TestTabList_SnapshotClonesTabsAndWorkspace (0.00s)
  1623. === RUN TestTabList_ReplaceFromClonesSnapshotSource
  1624. --- PASS: TestTabList_ReplaceFromClonesSnapshotSource (0.00s)
  1625. === RUN TestTabList_ReplaceFrom_Nil
  1626. --- PASS: TestTabList_ReplaceFrom_Nil (0.00s)
  1627. === RUN TestSnapshotRoundTrip
  1628. --- PASS: TestSnapshotRoundTrip (0.00s)
  1629. === RUN TestFindPaneAcrossTabs
  1630. --- PASS: TestFindPaneAcrossTabs (0.00s)
  1631. === RUN TestSnapshotFromWindowTabLists_V2State
  1632. --- PASS: TestSnapshotFromWindowTabLists_V2State (0.00s)
  1633. === RUN TestWindowTabListsFromSnapshot_V2Restore
  1634. --- PASS: TestWindowTabListsFromSnapshot_V2Restore (0.00s)
  1635. === RUN TestWindowTabListsFromSnapshot_V1LegacySingleWindow
  1636. --- PASS: TestWindowTabListsFromSnapshot_V1LegacySingleWindow (0.00s)
  1637. === RUN TestWindowTabListsFromSnapshot_NilState
  1638. --- PASS: TestWindowTabListsFromSnapshot_NilState (0.00s)
  1639. === RUN TestWindowTabListsFromSnapshot_InvalidIndexesFallback
  1640. --- PASS: TestWindowTabListsFromSnapshot_InvalidIndexesFallback (0.00s)
  1641. === RUN TestTabListFromSnapshot_ActiveWindowWithZeroTabsFallsBackToFirstOverallTab
  1642. --- PASS: TestTabListFromSnapshot_ActiveWindowWithZeroTabsFallsBackToFirstOverallTab (0.00s)
  1643. === RUN TestTabListFromSnapshot_FlattensV2WindowSnapshots
  1644. --- PASS: TestTabListFromSnapshot_FlattensV2WindowSnapshots (0.00s)
  1645. === RUN TestWindowTabListsFromSnapshot_FutureV2VersionWithEmptyWindowsStaysEmpty
  1646. --- PASS: TestWindowTabListsFromSnapshot_FutureV2VersionWithEmptyWindowsStaysEmpty (0.00s)
  1647. === RUN TestSnapshotFromWindowTabLists_NilTabs
  1648. --- PASS: TestSnapshotFromWindowTabLists_NilTabs (0.00s)
  1649. === RUN TestSnapshotFromWindowTabLists_EmptyWindows
  1650. --- PASS: TestSnapshotFromWindowTabLists_EmptyWindows (0.00s)
  1651. === RUN TestSessionStateCountPanesUsesVersionForWindowSnapshots
  1652. --- PASS: TestSessionStateCountPanesUsesVersionForWindowSnapshots (0.00s)
  1653. === RUN TestSnapshotFromWindowTabLists_InvalidWindowIndex
  1654. --- PASS: TestSnapshotFromWindowTabLists_InvalidWindowIndex (0.00s)
  1655. === RUN TestFindPaneInNestedStructure
  1656. --- PASS: TestFindPaneInNestedStructure (0.00s)
  1657. === RUN TestV2SnapshotJSON_OmitEmptyLegacyFields
  1658. --- PASS: TestV2SnapshotJSON_OmitEmptyLegacyFields (0.00s)
  1659. === RUN TestV2SnapshotJSON_CanStillReadV1
  1660. --- PASS: TestV2SnapshotJSON_CanStillReadV1 (0.00s)
  1661. === RUN TestSession_ShortID
  1662. --- PASS: TestSession_ShortID (0.00s)
  1663. === RUN TestSession_Validate
  1664. --- PASS: TestSession_Validate (0.00s)
  1665. === RUN TestSession_End
  1666. --- PASS: TestSession_End (0.00s)
  1667. PASS
  1668. ok github.com/bnema/dumber/internal/domain/entity 0.005s
  1669. ? github.com/bnema/dumber/internal/domain/errors [no test files]
  1670. === RUN TestKeyCandidates
  1671. === RUN TestKeyCandidates/walks_path_before_public_host_to_registrable_domain
  1672. === RUN TestKeyCandidates/strips_www
  1673. === RUN TestKeyCandidates/localhost_with_port_is_exact
  1674. === RUN TestKeyCandidates/ip_with_port_is_exact
  1675. === RUN TestKeyCandidates/ipv6_with_port_is_exact
  1676. === RUN TestKeyCandidates/uses_public_suffix_for_co_uk
  1677. === RUN TestKeyCandidates/path_candidates_walk_from_exact_path_to_host
  1678. === RUN TestKeyCandidates/trailing_slash_normalizes_to_parent_path_key
  1679. === RUN TestKeyCandidates/path_normalization_removes_dot_segments_and_query_fragments
  1680. === RUN TestKeyCandidates/host-like_string_preserves_path_before_host_fallback
  1681. === RUN TestKeyCandidates/drops_default_https_port
  1682. === RUN TestKeyCandidates/non_default_url_port_is_exact
  1683. === RUN TestKeyCandidates/host-like_string_lowercases_and_trims_trailing_dot
  1684. === RUN TestKeyCandidates/strips_www_before_preserving_non_default_port
  1685. === RUN TestKeyCandidates/host-like_string_with_port_preserves_port_exact
  1686. === RUN TestKeyCandidates/unicode_host_normalizes_to_punycode
  1687. === RUN TestKeyCandidates/punycode_equivalent_matches_unicode
  1688. === RUN TestKeyCandidates/empty_input_has_no_candidates
  1689. === RUN TestKeyCandidates/about_url_has_no_candidates
  1690. === RUN TestKeyCandidates/unsupported_scheme_has_no_candidates
  1691. --- PASS: TestKeyCandidates (0.00s)
  1692. --- PASS: TestKeyCandidates/walks_path_before_public_host_to_registrable_domain (0.00s)
  1693. --- PASS: TestKeyCandidates/strips_www (0.00s)
  1694. --- PASS: TestKeyCandidates/localhost_with_port_is_exact (0.00s)
  1695. --- PASS: TestKeyCandidates/ip_with_port_is_exact (0.00s)
  1696. --- PASS: TestKeyCandidates/ipv6_with_port_is_exact (0.00s)
  1697. --- PASS: TestKeyCandidates/uses_public_suffix_for_co_uk (0.00s)
  1698. --- PASS: TestKeyCandidates/path_candidates_walk_from_exact_path_to_host (0.00s)
  1699. --- PASS: TestKeyCandidates/trailing_slash_normalizes_to_parent_path_key (0.00s)
  1700. --- PASS: TestKeyCandidates/path_normalization_removes_dot_segments_and_query_fragments (0.00s)
  1701. --- PASS: TestKeyCandidates/host-like_string_preserves_path_before_host_fallback (0.00s)
  1702. --- PASS: TestKeyCandidates/drops_default_https_port (0.00s)
  1703. --- PASS: TestKeyCandidates/non_default_url_port_is_exact (0.00s)
  1704. --- PASS: TestKeyCandidates/host-like_string_lowercases_and_trims_trailing_dot (0.00s)
  1705. --- PASS: TestKeyCandidates/strips_www_before_preserving_non_default_port (0.00s)
  1706. --- PASS: TestKeyCandidates/host-like_string_with_port_preserves_port_exact (0.00s)
  1707. --- PASS: TestKeyCandidates/unicode_host_normalizes_to_punycode (0.00s)
  1708. --- PASS: TestKeyCandidates/punycode_equivalent_matches_unicode (0.00s)
  1709. --- PASS: TestKeyCandidates/empty_input_has_no_candidates (0.00s)
  1710. --- PASS: TestKeyCandidates/about_url_has_no_candidates (0.00s)
  1711. --- PASS: TestKeyCandidates/unsupported_scheme_has_no_candidates (0.00s)
  1712. === RUN TestCanonicalKey
  1713. --- PASS: TestCanonicalKey (0.00s)
  1714. === RUN TestCanonicalHostKey
  1715. --- PASS: TestCanonicalHostKey (0.00s)
  1716. === RUN TestShouldRefresh
  1717. --- PASS: TestShouldRefresh (0.00s)
  1718. === RUN TestContentHashChanged
  1719. --- PASS: TestContentHashChanged (0.00s)
  1720. PASS
  1721. ok github.com/bnema/dumber/internal/domain/favicon 0.004s
  1722. === RUN TestDeleteRangeCutoff
  1723. === RUN TestDeleteRangeCutoff/hour
  1724. === RUN TestDeleteRangeCutoff/day
  1725. === RUN TestDeleteRangeCutoff/week
  1726. === RUN TestDeleteRangeCutoff/month
  1727. === RUN TestDeleteRangeCutoff/all
  1728. === RUN TestDeleteRangeCutoff/unknown
  1729. --- PASS: TestDeleteRangeCutoff (0.00s)
  1730. --- PASS: TestDeleteRangeCutoff/hour (0.00s)
  1731. --- PASS: TestDeleteRangeCutoff/day (0.00s)
  1732. --- PASS: TestDeleteRangeCutoff/week (0.00s)
  1733. --- PASS: TestDeleteRangeCutoff/month (0.00s)
  1734. --- PASS: TestDeleteRangeCutoff/all (0.00s)
  1735. --- PASS: TestDeleteRangeCutoff/unknown (0.00s)
  1736. PASS
  1737. ok github.com/bnema/dumber/internal/domain/history 0.002s
  1738. === RUN TestCanonicalize_SameBindingSameString
  1739. --- PASS: TestCanonicalize_SameBindingSameString (0.00s)
  1740. === RUN TestCanonicalize_DifferentBindingsDiffer
  1741. --- PASS: TestCanonicalize_DifferentBindingsDiffer (0.00s)
  1742. === RUN TestCanonicalize_CanonicalForm
  1743. --- PASS: TestCanonicalize_CanonicalForm (0.00s)
  1744. === RUN TestParse_Invalid
  1745. --- PASS: TestParse_Invalid (0.00s)
  1746. === RUN TestKeyNames_AreCanonicalAndStable
  1747. --- PASS: TestKeyNames_AreCanonicalAndStable (0.00s)
  1748. PASS
  1749. ok github.com/bnema/dumber/internal/domain/keychord 0.003s
  1750. ? github.com/bnema/dumber/internal/domain/repository [no test files]
  1751. ? github.com/bnema/dumber/internal/domain/repository/mocks [no test files]
  1752. ? github.com/bnema/dumber/internal/domain/service [no test files]
  1753. === RUN TestNormalize
  1754. === RUN TestNormalize/empty_string
  1755. === RUN TestNormalize/http_scheme_unchanged
  1756. === RUN TestNormalize/https_scheme_unchanged
  1757. === RUN TestNormalize/file_scheme_unchanged
  1758. === RUN TestNormalize/dumb_scheme_unchanged
  1759. === RUN TestNormalize/about_scheme_unchanged
  1760. === RUN TestNormalize/mailto_scheme_unchanged
  1761. === RUN TestNormalize/magnet_scheme_unchanged
  1762. === RUN TestNormalize/obsidian_scheme_unchanged
  1763. === RUN TestNormalize/domain_gets_https
  1764. === RUN TestNormalize/domain_with_path_gets_https
  1765. === RUN TestNormalize/search_query_unchanged
  1766. === RUN TestNormalize/single_word_unchanged
  1767. === RUN TestNormalize/localhost
  1768. === RUN TestNormalize/localhost_with_port
  1769. === RUN TestNormalize/localhost_with_alt_port
  1770. === RUN TestNormalize/localhost_with_path
  1771. === RUN TestNormalize/localhost.com_is_a_domain_not_localhost
  1772. === RUN TestNormalize/localhostevil.com_is_a_domain_not_localhost
  1773. --- PASS: TestNormalize (0.00s)
  1774. --- PASS: TestNormalize/empty_string (0.00s)
  1775. --- PASS: TestNormalize/http_scheme_unchanged (0.00s)
  1776. --- PASS: TestNormalize/https_scheme_unchanged (0.00s)
  1777. --- PASS: TestNormalize/file_scheme_unchanged (0.00s)
  1778. --- PASS: TestNormalize/dumb_scheme_unchanged (0.00s)
  1779. --- PASS: TestNormalize/about_scheme_unchanged (0.00s)
  1780. --- PASS: TestNormalize/mailto_scheme_unchanged (0.00s)
  1781. --- PASS: TestNormalize/magnet_scheme_unchanged (0.00s)
  1782. --- PASS: TestNormalize/obsidian_scheme_unchanged (0.00s)
  1783. --- PASS: TestNormalize/domain_gets_https (0.00s)
  1784. --- PASS: TestNormalize/domain_with_path_gets_https (0.00s)
  1785. --- PASS: TestNormalize/search_query_unchanged (0.00s)
  1786. --- PASS: TestNormalize/single_word_unchanged (0.00s)
  1787. --- PASS: TestNormalize/localhost (0.00s)
  1788. --- PASS: TestNormalize/localhost_with_port (0.00s)
  1789. --- PASS: TestNormalize/localhost_with_alt_port (0.00s)
  1790. --- PASS: TestNormalize/localhost_with_path (0.00s)
  1791. --- PASS: TestNormalize/localhost.com_is_a_domain_not_localhost (0.00s)
  1792. --- PASS: TestNormalize/localhostevil.com_is_a_domain_not_localhost (0.00s)
  1793. === RUN TestNormalize_PathLikeInputsArePure
  1794. === RUN TestNormalize_PathLikeInputsArePure/absolute_path
  1795. === RUN TestNormalize_PathLikeInputsArePure/relative_path_with_dot
  1796. === RUN TestNormalize_PathLikeInputsArePure/relative_parent_path
  1797. === RUN TestNormalize_PathLikeInputsArePure/home_path
  1798. --- PASS: TestNormalize_PathLikeInputsArePure (0.00s)
  1799. --- PASS: TestNormalize_PathLikeInputsArePure/absolute_path (0.00s)
  1800. --- PASS: TestNormalize_PathLikeInputsArePure/relative_path_with_dot (0.00s)
  1801. --- PASS: TestNormalize_PathLikeInputsArePure/relative_parent_path (0.00s)
  1802. --- PASS: TestNormalize_PathLikeInputsArePure/home_path (0.00s)
  1803. === RUN TestTrimLeadingSpacesIfURL
  1804. === RUN TestTrimLeadingSpacesIfURL/single_space_before_https_URL
  1805. === RUN TestTrimLeadingSpacesIfURL/multiple_spaces_before_https_URL
  1806. === RUN TestTrimLeadingSpacesIfURL/tab_before_URL
  1807. === RUN TestTrimLeadingSpacesIfURL/mixed_whitespace_before_URL
  1808. === RUN TestTrimLeadingSpacesIfURL/space_before_domain
  1809. === RUN TestTrimLeadingSpacesIfURL/spaces_before_localhost
  1810. === RUN TestTrimLeadingSpacesIfURL/no_leading_space_URL_unchanged
  1811. === RUN TestTrimLeadingSpacesIfURL/search_query_with_leading_space_unchanged
  1812. === RUN TestTrimLeadingSpacesIfURL/single_word_with_leading_space_unchanged
  1813. === RUN TestTrimLeadingSpacesIfURL/empty_string_unchanged
  1814. === RUN TestTrimLeadingSpacesIfURL/only_spaces_unchanged
  1815. --- PASS: TestTrimLeadingSpacesIfURL (0.00s)
  1816. --- PASS: TestTrimLeadingSpacesIfURL/single_space_before_https_URL (0.00s)
  1817. --- PASS: TestTrimLeadingSpacesIfURL/multiple_spaces_before_https_URL (0.00s)
  1818. --- PASS: TestTrimLeadingSpacesIfURL/tab_before_URL (0.00s)
  1819. --- PASS: TestTrimLeadingSpacesIfURL/mixed_whitespace_before_URL (0.00s)
  1820. --- PASS: TestTrimLeadingSpacesIfURL/space_before_domain (0.00s)
  1821. --- PASS: TestTrimLeadingSpacesIfURL/spaces_before_localhost (0.00s)
  1822. --- PASS: TestTrimLeadingSpacesIfURL/no_leading_space_URL_unchanged (0.00s)
  1823. --- PASS: TestTrimLeadingSpacesIfURL/search_query_with_leading_space_unchanged (0.00s)
  1824. --- PASS: TestTrimLeadingSpacesIfURL/single_word_with_leading_space_unchanged (0.00s)
  1825. --- PASS: TestTrimLeadingSpacesIfURL/empty_string_unchanged (0.00s)
  1826. --- PASS: TestTrimLeadingSpacesIfURL/only_spaces_unchanged (0.00s)
  1827. === RUN TestLooksLikeURL
  1828. === RUN TestLooksLikeURL/empty_string
  1829. === RUN TestLooksLikeURL/http_URL
  1830. === RUN TestLooksLikeURL/https_URL
  1831. === RUN TestLooksLikeURL/file_URL
  1832. === RUN TestLooksLikeURL/dumb_URL
  1833. === RUN TestLooksLikeURL/obsidian_URL
  1834. === RUN TestLooksLikeURL/about_URL
  1835. === RUN TestLooksLikeURL/spotify_URL
  1836. === RUN TestLooksLikeURL/mailto_URL
  1837. === RUN TestLooksLikeURL/magnet_URL
  1838. === RUN TestLooksLikeURL/vscode_URL
  1839. === RUN TestLooksLikeURL/domain
  1840. === RUN TestLooksLikeURL/domain_with_path
  1841. === RUN TestLooksLikeURL/search_query
  1842. === RUN TestLooksLikeURL/single_word
  1843. === RUN TestLooksLikeURL/localhost
  1844. === RUN TestLooksLikeURL/localhost_with_port
  1845. === RUN TestLooksLikeURL/localhost_with_alt_port
  1846. === RUN TestLooksLikeURL/localhost_with_path
  1847. === RUN TestLooksLikeURL/localhost.com_is_a_domain_not_localhost
  1848. === RUN TestLooksLikeURL/localhostevil.com_is_a_domain_not_localhost
  1849. === RUN TestLooksLikeURL/ipv4_with_port
  1850. === RUN TestLooksLikeURL/ipv4
  1851. === RUN TestLooksLikeURL/ipv6_bracketed
  1852. --- PASS: TestLooksLikeURL (0.00s)
  1853. --- PASS: TestLooksLikeURL/empty_string (0.00s)
  1854. --- PASS: TestLooksLikeURL/http_URL (0.00s)
  1855. --- PASS: TestLooksLikeURL/https_URL (0.00s)
  1856. --- PASS: TestLooksLikeURL/file_URL (0.00s)
  1857. --- PASS: TestLooksLikeURL/dumb_URL (0.00s)
  1858. --- PASS: TestLooksLikeURL/obsidian_URL (0.00s)
  1859. --- PASS: TestLooksLikeURL/about_URL (0.00s)
  1860. --- PASS: TestLooksLikeURL/spotify_URL (0.00s)
  1861. --- PASS: TestLooksLikeURL/mailto_URL (0.00s)
  1862. --- PASS: TestLooksLikeURL/magnet_URL (0.00s)
  1863. --- PASS: TestLooksLikeURL/vscode_URL (0.00s)
  1864. --- PASS: TestLooksLikeURL/domain (0.00s)
  1865. --- PASS: TestLooksLikeURL/domain_with_path (0.00s)
  1866. --- PASS: TestLooksLikeURL/search_query (0.00s)
  1867. --- PASS: TestLooksLikeURL/single_word (0.00s)
  1868. --- PASS: TestLooksLikeURL/localhost (0.00s)
  1869. --- PASS: TestLooksLikeURL/localhost_with_port (0.00s)
  1870. --- PASS: TestLooksLikeURL/localhost_with_alt_port (0.00s)
  1871. --- PASS: TestLooksLikeURL/localhost_with_path (0.00s)
  1872. --- PASS: TestLooksLikeURL/localhost.com_is_a_domain_not_localhost (0.00s)
  1873. --- PASS: TestLooksLikeURL/localhostevil.com_is_a_domain_not_localhost (0.00s)
  1874. --- PASS: TestLooksLikeURL/ipv4_with_port (0.00s)
  1875. --- PASS: TestLooksLikeURL/ipv4 (0.00s)
  1876. --- PASS: TestLooksLikeURL/ipv6_bracketed (0.00s)
  1877. === RUN TestNormalize_IPAddressGetsHTTPByDefault
  1878. === RUN TestNormalize_IPAddressGetsHTTPByDefault/tailnet_ipv4
  1879. === RUN TestNormalize_IPAddressGetsHTTPByDefault/tailnet_ipv4_with_port
  1880. === RUN TestNormalize_IPAddressGetsHTTPByDefault/ipv4_with_path
  1881. --- PASS: TestNormalize_IPAddressGetsHTTPByDefault (0.00s)
  1882. --- PASS: TestNormalize_IPAddressGetsHTTPByDefault/tailnet_ipv4 (0.00s)
  1883. --- PASS: TestNormalize_IPAddressGetsHTTPByDefault/tailnet_ipv4_with_port (0.00s)
  1884. --- PASS: TestNormalize_IPAddressGetsHTTPByDefault/ipv4_with_path (0.00s)
  1885. === RUN TestSanitizeDomainForPNGPathKeysDoNotCollide
  1886. --- PASS: TestSanitizeDomainForPNGPathKeysDoNotCollide (0.00s)
  1887. === RUN TestSanitizeDomainForLongPathKeysUsesBoundedDeterministicFilenames
  1888. --- PASS: TestSanitizeDomainForLongPathKeysUsesBoundedDeterministicFilenames (0.00s)
  1889. === RUN TestIsExternalScheme
  1890. === RUN TestIsExternalScheme/empty_string
  1891. === RUN TestIsExternalScheme/http_scheme
  1892. === RUN TestIsExternalScheme/https_scheme
  1893. === RUN TestIsExternalScheme/file_scheme
  1894. === RUN TestIsExternalScheme/dumb_scheme
  1895. === RUN TestIsExternalScheme/about_scheme
  1896. === RUN TestIsExternalScheme/data_scheme
  1897. === RUN TestIsExternalScheme/blob_scheme
  1898. === RUN TestIsExternalScheme/javascript_scheme
  1899. === RUN TestIsExternalScheme/vscode_scheme
  1900. === RUN TestIsExternalScheme/spotify_scheme
  1901. === RUN TestIsExternalScheme/steam_scheme
  1902. === RUN TestIsExternalScheme/uppercase_HTTP_scheme
  1903. === RUN TestIsExternalScheme/uppercase_ABOUT_scheme
  1904. === RUN TestIsExternalScheme/uppercase_VSCODE_scheme
  1905. === RUN TestIsExternalScheme/geo_scheme
  1906. === RUN TestIsExternalScheme/xmpp_scheme
  1907. === RUN TestIsExternalScheme/malformed_URL
  1908. === RUN TestIsExternalScheme/no_scheme
  1909. === RUN TestIsExternalScheme/localhost_port_is_not_external_scheme
  1910. === RUN TestIsExternalScheme/scheme_only
  1911. --- PASS: TestIsExternalScheme (0.00s)
  1912. --- PASS: TestIsExternalScheme/empty_string (0.00s)
  1913. --- PASS: TestIsExternalScheme/http_scheme (0.00s)
  1914. --- PASS: TestIsExternalScheme/https_scheme (0.00s)
  1915. --- PASS: TestIsExternalScheme/file_scheme (0.00s)
  1916. --- PASS: TestIsExternalScheme/dumb_scheme (0.00s)
  1917. --- PASS: TestIsExternalScheme/about_scheme (0.00s)
  1918. --- PASS: TestIsExternalScheme/data_scheme (0.00s)
  1919. --- PASS: TestIsExternalScheme/blob_scheme (0.00s)
  1920. --- PASS: TestIsExternalScheme/javascript_scheme (0.00s)
  1921. --- PASS: TestIsExternalScheme/vscode_scheme (0.00s)
  1922. --- PASS: TestIsExternalScheme/spotify_scheme (0.00s)
  1923. --- PASS: TestIsExternalScheme/steam_scheme (0.00s)
  1924. --- PASS: TestIsExternalScheme/uppercase_HTTP_scheme (0.00s)
  1925. --- PASS: TestIsExternalScheme/uppercase_ABOUT_scheme (0.00s)
  1926. --- PASS: TestIsExternalScheme/uppercase_VSCODE_scheme (0.00s)
  1927. --- PASS: TestIsExternalScheme/geo_scheme (0.00s)
  1928. --- PASS: TestIsExternalScheme/xmpp_scheme (0.00s)
  1929. --- PASS: TestIsExternalScheme/malformed_URL (0.00s)
  1930. --- PASS: TestIsExternalScheme/no_scheme (0.00s)
  1931. --- PASS: TestIsExternalScheme/localhost_port_is_not_external_scheme (0.00s)
  1932. --- PASS: TestIsExternalScheme/scheme_only (0.00s)
  1933. === RUN TestExtractOrigin_ValidURI
  1934. === RUN TestExtractOrigin_ValidURI/https_with_port
  1935. === RUN TestExtractOrigin_ValidURI/https_without_port
  1936. === RUN TestExtractOrigin_ValidURI/http
  1937. === RUN TestExtractOrigin_ValidURI/uppercase_host
  1938. === RUN TestExtractOrigin_ValidURI/uppercase_scheme
  1939. === RUN TestExtractOrigin_ValidURI/https_default_port_omitted
  1940. === RUN TestExtractOrigin_ValidURI/http_default_port_omitted
  1941. === RUN TestExtractOrigin_ValidURI/https_explicit_non-default_port_kept
  1942. === RUN TestExtractOrigin_ValidURI/mixed_case_with_default_port
  1943. === RUN TestExtractOrigin_ValidURI/ipv6_with_explicit_port
  1944. --- PASS: TestExtractOrigin_ValidURI (0.00s)
  1945. --- PASS: TestExtractOrigin_ValidURI/https_with_port (0.00s)
  1946. --- PASS: TestExtractOrigin_ValidURI/https_without_port (0.00s)
  1947. --- PASS: TestExtractOrigin_ValidURI/http (0.00s)
  1948. --- PASS: TestExtractOrigin_ValidURI/uppercase_host (0.00s)
  1949. --- PASS: TestExtractOrigin_ValidURI/uppercase_scheme (0.00s)
  1950. --- PASS: TestExtractOrigin_ValidURI/https_default_port_omitted (0.00s)
  1951. --- PASS: TestExtractOrigin_ValidURI/http_default_port_omitted (0.00s)
  1952. --- PASS: TestExtractOrigin_ValidURI/https_explicit_non-default_port_kept (0.00s)
  1953. --- PASS: TestExtractOrigin_ValidURI/mixed_case_with_default_port (0.00s)
  1954. --- PASS: TestExtractOrigin_ValidURI/ipv6_with_explicit_port (0.00s)
  1955. === RUN TestExtractOrigin_InvalidURI
  1956. === RUN TestExtractOrigin_InvalidURI/empty
  1957. === RUN TestExtractOrigin_InvalidURI/no_scheme
  1958. === RUN TestExtractOrigin_InvalidURI/no_host
  1959. --- PASS: TestExtractOrigin_InvalidURI (0.00s)
  1960. --- PASS: TestExtractOrigin_InvalidURI/empty (0.00s)
  1961. --- PASS: TestExtractOrigin_InvalidURI/no_scheme (0.00s)
  1962. --- PASS: TestExtractOrigin_InvalidURI/no_host (0.00s)
  1963. === RUN TestCanonicalDomain
  1964. === RUN TestCanonicalDomain/empty
  1965. === RUN TestCanonicalDomain/whitespace_only
  1966. === RUN TestCanonicalDomain/url
  1967. === RUN TestCanonicalDomain/url_with_port
  1968. === RUN TestCanonicalDomain/url_with_userinfo
  1969. === RUN TestCanonicalDomain/url_with_userinfo_and_port
  1970. === RUN TestCanonicalDomain/domain
  1971. === RUN TestCanonicalDomain/domain_with_path
  1972. --- PASS: TestCanonicalDomain (0.00s)
  1973. --- PASS: TestCanonicalDomain/empty (0.00s)
  1974. --- PASS: TestCanonicalDomain/whitespace_only (0.00s)
  1975. --- PASS: TestCanonicalDomain/url (0.00s)
  1976. --- PASS: TestCanonicalDomain/url_with_port (0.00s)
  1977. --- PASS: TestCanonicalDomain/url_with_userinfo (0.00s)
  1978. --- PASS: TestCanonicalDomain/url_with_userinfo_and_port (0.00s)
  1979. --- PASS: TestCanonicalDomain/domain (0.00s)
  1980. --- PASS: TestCanonicalDomain/domain_with_path (0.00s)
  1981. === RUN TestDisplayDomain
  1982. === RUN TestDisplayDomain/empty
  1983. === RUN TestDisplayDomain/whitespace_only
  1984. === RUN TestDisplayDomain/url_with_port
  1985. === RUN TestDisplayDomain/url_without_port
  1986. === RUN TestDisplayDomain/url_with_userinfo
  1987. === RUN TestDisplayDomain/no_www_prefix
  1988. === RUN TestDisplayDomain/host_only
  1989. === RUN TestDisplayDomain/invalid_url
  1990. === RUN TestDisplayDomain/non-http_scheme
  1991. === RUN TestDisplayDomain/ipv6_url
  1992. === RUN TestDisplayDomain/uppercase_host
  1993. --- PASS: TestDisplayDomain (0.00s)
  1994. --- PASS: TestDisplayDomain/empty (0.00s)
  1995. --- PASS: TestDisplayDomain/whitespace_only (0.00s)
  1996. --- PASS: TestDisplayDomain/url_with_port (0.00s)
  1997. --- PASS: TestDisplayDomain/url_without_port (0.00s)
  1998. --- PASS: TestDisplayDomain/url_with_userinfo (0.00s)
  1999. --- PASS: TestDisplayDomain/no_www_prefix (0.00s)
  2000. --- PASS: TestDisplayDomain/host_only (0.00s)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close