From 2955fe1f24c7dd61ceb36770645574dfc123ade6 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Sat, 30 Jan 2021 13:09:42 -0600 Subject: [PATCH] add tests for lwp3-bootloader reducers --- src/lwp3-bootloader/actions.ts | 14 ++++- src/lwp3-bootloader/reducers.test.ts | 80 ++++++++++++++++++++++++++++ src/lwp3-bootloader/reducers.ts | 2 + 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 src/lwp3-bootloader/reducers.test.ts diff --git a/src/lwp3-bootloader/actions.ts b/src/lwp3-bootloader/actions.ts index c8ea49b6..64bd021d 100644 --- a/src/lwp3-bootloader/actions.ts +++ b/src/lwp3-bootloader/actions.ts @@ -48,6 +48,10 @@ export enum BootloaderConnectionActionType { * The connection has been closed. */ DidDisconnect = 'bootloader.action.connection.did.disconnect', + /** + * Disconnecting failed. + */ + DidFailToDisconnect = 'bootloader.action.connection.did.failToDisconnect', } export type BootloaderConnectionConnectAction = Action; @@ -184,6 +188,12 @@ export function didDisconnect(): BootloaderConnectionDidDisconnectAction { return { type: BootloaderConnectionActionType.DidDisconnect }; } +export type BootloaderConnectionDidFailToDisconnectAction = Action; + +export function didFailToDisconnect(): BootloaderConnectionDidFailToDisconnectAction { + return { type: BootloaderConnectionActionType.DidFailToDisconnect }; +} + /** * Common type for all bootloader connection actions. */ @@ -196,7 +206,9 @@ export type BootloaderConnectionAction = | BootloaderConnectionDidSendAction | BootloaderConnectionDidFailToSendAction | BootloaderConnectionDidReceiveAction - | BootloaderConnectionDidDisconnectAction; + | BootloaderConnectionDisconnectAction + | BootloaderConnectionDidDisconnectAction + | BootloaderConnectionDidFailToDisconnectAction; /** * Bootloader request actions for sending commands over the connection. diff --git a/src/lwp3-bootloader/reducers.test.ts b/src/lwp3-bootloader/reducers.test.ts new file mode 100644 index 00000000..55801959 --- /dev/null +++ b/src/lwp3-bootloader/reducers.test.ts @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +// Copyright (c) 2021 The Pybricks Authors + +import { Action } from '../actions'; +import { + BootloaderConnectionFailureReason, + connect, + didConnect, + didDisconnect, + didFailToConnect, + didFailToDisconnect, + disconnect, + disconnectRequest, + rebootRequest, +} from './actions'; +import reducers, { BootloaderConnectionState } from './reducers'; + +type State = ReturnType; + +test('initial state', () => { + expect(reducers(undefined, {} as Action)).toMatchInlineSnapshot(` + Object { + "connection": "bootloader.connection.disconnected", + } + `); +}); + +test('connection', () => { + expect( + reducers( + { connection: BootloaderConnectionState.Disconnected } as State, + connect(), + ).connection, + ).toBe(BootloaderConnectionState.Connecting); + expect( + reducers( + { connection: BootloaderConnectionState.Connecting } as State, + didConnect(), + ).connection, + ).toBe(BootloaderConnectionState.Connected); + expect( + reducers( + { connection: BootloaderConnectionState.Connecting } as State, + didFailToConnect(BootloaderConnectionFailureReason.Canceled), + ).connection, + ).toBe(BootloaderConnectionState.Disconnected); + expect( + reducers( + { connection: BootloaderConnectionState.Connected } as State, + disconnect(), + ).connection, + ).toBe(BootloaderConnectionState.Disconnecting); + expect( + reducers( + { connection: BootloaderConnectionState.Disconnecting } as State, + didDisconnect(), + ).connection, + ).toBe(BootloaderConnectionState.Disconnected); + expect( + reducers( + { connection: BootloaderConnectionState.Disconnecting } as State, + didFailToDisconnect(), + ).connection, + ).toBe(BootloaderConnectionState.Connected); + + // certain commands are also know to trigger disconnect + + expect( + reducers( + { connection: BootloaderConnectionState.Connected } as State, + rebootRequest(0), + ).connection, + ).toBe(BootloaderConnectionState.Disconnecting); + expect( + reducers( + { connection: BootloaderConnectionState.Connected } as State, + disconnectRequest(0), + ).connection, + ).toBe(BootloaderConnectionState.Disconnecting); +}); diff --git a/src/lwp3-bootloader/reducers.ts b/src/lwp3-bootloader/reducers.ts index 39edec53..a7aee859 100644 --- a/src/lwp3-bootloader/reducers.ts +++ b/src/lwp3-bootloader/reducers.ts @@ -35,7 +35,9 @@ const connection: Reducer = ( case BootloaderConnectionActionType.Connect: return BootloaderConnectionState.Connecting; case BootloaderConnectionActionType.DidConnect: + case BootloaderConnectionActionType.DidFailToDisconnect: return BootloaderConnectionState.Connected; + case BootloaderConnectionActionType.Disconnect: case BootloaderRequestActionType.Reboot: case BootloaderRequestActionType.Disconnect: return BootloaderConnectionState.Disconnecting;