@@ -78,6 +78,12 @@ function makeFakeBrowserWindow() {
7878 zoomLevel = level ;
7979 } ) ,
8080 isLoadingMainFrame : vi . fn ( ( ) => false ) ,
81+ navigationHistory : {
82+ canGoBack : vi . fn ( ( ) => true ) ,
83+ canGoForward : vi . fn ( ( ) => true ) ,
84+ goBack : vi . fn ( ) ,
85+ goForward : vi . fn ( ) ,
86+ } ,
8187 on : vi . fn ( ( eventName : string , listener : ( ...args : readonly unknown [ ] ) => void ) => {
8288 webContentsListeners . set ( eventName , listener ) ;
8389 } ) ,
@@ -136,6 +142,7 @@ function makeFakeBrowserWindow() {
136142 reload : webContents . reload ,
137143 reloadIgnoringCache : webContents . reloadIgnoringCache ,
138144 toggleDevTools : webContents . toggleDevTools ,
145+ navigationHistory : webContents . navigationHistory ,
139146 send : webContents . send ,
140147 setZoomLevel : webContents . setZoomLevel ,
141148 setWindowButtonPosition : window . setWindowButtonPosition ,
@@ -934,6 +941,39 @@ describe("DesktopWindow", () => {
934941 } ) ,
935942 ) ;
936943
944+ it . effect ( "maps macOS horizontal swipes to available history navigation" , ( ) =>
945+ Effect . gen ( function * ( ) {
946+ const fakeWindow = makeFakeBrowserWindow ( ) ;
947+ const createCount = yield * Ref . make ( 0 ) ;
948+ const mainWindow = yield * Ref . make < Option . Option < Electron . BrowserWindow > > ( Option . none ( ) ) ;
949+ const layer = layerTest ( { window : fakeWindow . window , createCount, mainWindow } ) ;
950+
951+ yield * Effect . gen ( function * ( ) {
952+ const desktopWindow = yield * DesktopWindow . DesktopWindow ;
953+ yield * desktopWindow . handleBackendReady ( new URL ( "http://127.0.0.1:3773" ) ) ;
954+ const swipe = fakeWindow . windowListeners . get ( "swipe" ) ;
955+ assert . isDefined ( swipe ) ;
956+ if ( ! swipe ) return ;
957+ const history = fakeWindow . navigationHistory ;
958+
959+ swipe ( { } , "left" ) ;
960+ assert . equal ( history . goBack . mock . calls . length , 1 ) ;
961+ assert . equal ( history . goForward . mock . calls . length , 0 ) ;
962+ swipe ( { } , "right" ) ;
963+ assert . equal ( history . goForward . mock . calls . length , 1 ) ;
964+
965+ swipe ( { } , "up" ) ;
966+ swipe ( { } , "down" ) ;
967+ history . canGoBack . mockReturnValue ( false ) ;
968+ history . canGoForward . mockReturnValue ( false ) ;
969+ swipe ( { } , "left" ) ;
970+ swipe ( { } , "right" ) ;
971+ assert . equal ( history . goBack . mock . calls . length , 1 ) ;
972+ assert . equal ( history . goForward . mock . calls . length , 1 ) ;
973+ } ) . pipe ( Effect . provide ( layer ) ) ;
974+ } ) ,
975+ ) ;
976+
937977 it . effect ( "persists the current main window bounds before the window closes" , ( ) =>
938978 Effect . gen ( function * ( ) {
939979 const fakeWindow = makeFakeBrowserWindow ( ) ;
0 commit comments