detached 179d874

refactor: regenerate mocks for WebUIHandlerRouter/WebUIMessageHandler, use in tests

- Add WebUIMessageHandler and WebUIHandlerRouter to .mockery.yaml
- Remove old MessageRouter (interface deleted)
- Regenerate all mocks via mockery
- Replace ad-hoc stubRouter/stubAccentHandler in register_test.go
  with MockWebUIHandlerRouter and MockAccentKeyHandler from mockery
commit
179d874c1616f2d2e11515c7c185fc59ded10d8a
author
brice · · 2026-03-21 21:53 UTC
committer
brice · · 2026-03-28 04:38 UTC
parent
a844552
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
4 files · +234 -126
M .mockery.yaml +2 -1
@@ -35,7 +35,8 @@ packages:
3535 Engine: {}
3636 ContentInjector: {}
3737 SchemeHandler: {}
38- MessageRouter: {}
38+ WebUIMessageHandler: {}
39+ WebUIHandlerRouter: {}
3940 SettingsApplier: {}
4041 FilterApplier: {}
4142 FaviconDatabase: {}
@@ -35,7 +35,8 @@ packages:
35 Engine: {}35 Engine: {}
36 ContentInjector: {}36 ContentInjector: {}
37 SchemeHandler: {}37 SchemeHandler: {}
38- MessageRouter: {}38+ WebUIMessageHandler: {}
39+ WebUIHandlerRouter: {}
39 SettingsApplier: {}40 SettingsApplier: {}
40 FilterApplier: {}41 FilterApplier: {}
41 FaviconDatabase: {}42 FaviconDatabase: {}
M internal/application/port/mocks/mocks.go +202 -71
@@ -7,6 +7,7 @@ package mocks
77 import (
88 "context"
99 "database/sql"
10+ "encoding/json"
1011 "time"
1112
1213 "github.com/bnema/dumber/internal/application/port"
@@ -3395,13 +3396,13 @@ func (_c *MockEngine_UpdateSettings_Call) RunAndReturn(run func(ctx context.Cont
33953396 return _c
33963397 }
33973398
3398-// NewMockSchemeHandler creates a new instance of MockSchemeHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
3399+// NewMockWebUIMessageHandler creates a new instance of MockWebUIMessageHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
33993400 // The first argument is typically a *testing.T value.
3400-func NewMockSchemeHandler(t interface {
3401+func NewMockWebUIMessageHandler(t interface {
34013402 mock.TestingT
34023403 Cleanup(func())
3403-}) *MockSchemeHandler {
3404- mock := &MockSchemeHandler{}
3404+}) *MockWebUIMessageHandler {
3405+ mock := &MockWebUIMessageHandler{}
34053406 mock.Mock.Test(t)
34063407
34073408 t.Cleanup(func() { mock.AssertExpectations(t) })
@@ -3409,72 +3410,100 @@ func NewMockSchemeHandler(t interface {
34093410 return mock
34103411 }
34113412
3412-// MockSchemeHandler is an autogenerated mock type for the SchemeHandler type
3413-type MockSchemeHandler struct {
3413+// MockWebUIMessageHandler is an autogenerated mock type for the WebUIMessageHandler type
3414+type MockWebUIMessageHandler struct {
34143415 mock.Mock
34153416 }
34163417
3417-type MockSchemeHandler_Expecter struct {
3418+type MockWebUIMessageHandler_Expecter struct {
34183419 mock *mock.Mock
34193420 }
34203421
3421-func (_m *MockSchemeHandler) EXPECT() *MockSchemeHandler_Expecter {
3422- return &MockSchemeHandler_Expecter{mock: &_m.Mock}
3422+func (_m *MockWebUIMessageHandler) EXPECT() *MockWebUIMessageHandler_Expecter {
3423+ return &MockWebUIMessageHandler_Expecter{mock: &_m.Mock}
34233424 }
34243425
3425-// RegisterScheme provides a mock function for the type MockSchemeHandler
3426-func (_mock *MockSchemeHandler) RegisterScheme(scheme string, handler func(uri string) ([]byte, string, error)) {
3427- _mock.Called(scheme, handler)
3428- return
3426+// Handle provides a mock function for the type MockWebUIMessageHandler
3427+func (_mock *MockWebUIMessageHandler) Handle(ctx context.Context, webviewID port.WebViewID, payload json.RawMessage) (any, error) {
3428+ ret := _mock.Called(ctx, webviewID, payload)
3429+
3430+ if len(ret) == 0 {
3431+ panic("no return value specified for Handle")
3432+ }
3433+
3434+ var r0 any
3435+ var r1 error
3436+ if returnFunc, ok := ret.Get(0).(func(context.Context, port.WebViewID, json.RawMessage) (any, error)); ok {
3437+ return returnFunc(ctx, webviewID, payload)
3438+ }
3439+ if returnFunc, ok := ret.Get(0).(func(context.Context, port.WebViewID, json.RawMessage) any); ok {
3440+ r0 = returnFunc(ctx, webviewID, payload)
3441+ } else {
3442+ if ret.Get(0) != nil {
3443+ r0 = ret.Get(0).(any)
3444+ }
3445+ }
3446+ if returnFunc, ok := ret.Get(1).(func(context.Context, port.WebViewID, json.RawMessage) error); ok {
3447+ r1 = returnFunc(ctx, webviewID, payload)
3448+ } else {
3449+ r1 = ret.Error(1)
3450+ }
3451+ return r0, r1
34293452 }
34303453
3431-// MockSchemeHandler_RegisterScheme_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterScheme'
3432-type MockSchemeHandler_RegisterScheme_Call struct {
3454+// MockWebUIMessageHandler_Handle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Handle'
3455+type MockWebUIMessageHandler_Handle_Call struct {
34333456 *mock.Call
34343457 }
34353458
3436-// RegisterScheme is a helper method to define mock.On call
3437-// - scheme string
3438-// - handler func(uri string) ([]byte, string, error)
3439-func (_e *MockSchemeHandler_Expecter) RegisterScheme(scheme interface{}, handler interface{}) *MockSchemeHandler_RegisterScheme_Call {
3440- return &MockSchemeHandler_RegisterScheme_Call{Call: _e.mock.On("RegisterScheme", scheme, handler)}
3459+// Handle is a helper method to define mock.On call
3460+// - ctx context.Context
3461+// - webviewID port.WebViewID
3462+// - payload json.RawMessage
3463+func (_e *MockWebUIMessageHandler_Expecter) Handle(ctx interface{}, webviewID interface{}, payload interface{}) *MockWebUIMessageHandler_Handle_Call {
3464+ return &MockWebUIMessageHandler_Handle_Call{Call: _e.mock.On("Handle", ctx, webviewID, payload)}
34413465 }
34423466
3443-func (_c *MockSchemeHandler_RegisterScheme_Call) Run(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {
3467+func (_c *MockWebUIMessageHandler_Handle_Call) Run(run func(ctx context.Context, webviewID port.WebViewID, payload json.RawMessage)) *MockWebUIMessageHandler_Handle_Call {
34443468 _c.Call.Run(func(args mock.Arguments) {
3445- var arg0 string
3469+ var arg0 context.Context
34463470 if args[0] != nil {
3447- arg0 = args[0].(string)
3471+ arg0 = args[0].(context.Context)
34483472 }
3449- var arg1 func(uri string) ([]byte, string, error)
3473+ var arg1 port.WebViewID
34503474 if args[1] != nil {
3451- arg1 = args[1].(func(uri string) ([]byte, string, error))
3475+ arg1 = args[1].(port.WebViewID)
3476+ }
3477+ var arg2 json.RawMessage
3478+ if args[2] != nil {
3479+ arg2 = args[2].(json.RawMessage)
34523480 }
34533481 run(
34543482 arg0,
34553483 arg1,
3484+ arg2,
34563485 )
34573486 })
34583487 return _c
34593488 }
34603489
3461-func (_c *MockSchemeHandler_RegisterScheme_Call) Return() *MockSchemeHandler_RegisterScheme_Call {
3462- _c.Call.Return()
3490+func (_c *MockWebUIMessageHandler_Handle_Call) Return(v any, err error) *MockWebUIMessageHandler_Handle_Call {
3491+ _c.Call.Return(v, err)
34633492 return _c
34643493 }
34653494
3466-func (_c *MockSchemeHandler_RegisterScheme_Call) RunAndReturn(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {
3467- _c.Run(run)
3495+func (_c *MockWebUIMessageHandler_Handle_Call) RunAndReturn(run func(ctx context.Context, webviewID port.WebViewID, payload json.RawMessage) (any, error)) *MockWebUIMessageHandler_Handle_Call {
3496+ _c.Call.Return(run)
34683497 return _c
34693498 }
34703499
3471-// NewMockMessageRouter creates a new instance of MockMessageRouter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
3500+// NewMockWebUIHandlerRouter creates a new instance of MockWebUIHandlerRouter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
34723501 // The first argument is typically a *testing.T value.
3473-func NewMockMessageRouter(t interface {
3502+func NewMockWebUIHandlerRouter(t interface {
34743503 mock.TestingT
34753504 Cleanup(func())
3476-}) *MockMessageRouter {
3477- mock := &MockMessageRouter{}
3505+}) *MockWebUIHandlerRouter {
3506+ mock := &MockWebUIHandlerRouter{}
34783507 mock.Mock.Test(t)
34793508
34803509 t.Cleanup(func() { mock.AssertExpectations(t) })
@@ -3482,103 +3511,205 @@ func NewMockMessageRouter(t interface {
34823511 return mock
34833512 }
34843513
3485-// MockMessageRouter is an autogenerated mock type for the MessageRouter type
3486-type MockMessageRouter struct {
3514+// MockWebUIHandlerRouter is an autogenerated mock type for the WebUIHandlerRouter type
3515+type MockWebUIHandlerRouter struct {
34873516 mock.Mock
34883517 }
34893518
3490-type MockMessageRouter_Expecter struct {
3519+type MockWebUIHandlerRouter_Expecter struct {
34913520 mock *mock.Mock
34923521 }
34933522
3494-func (_m *MockMessageRouter) EXPECT() *MockMessageRouter_Expecter {
3495- return &MockMessageRouter_Expecter{mock: &_m.Mock}
3523+func (_m *MockWebUIHandlerRouter) EXPECT() *MockWebUIHandlerRouter_Expecter {
3524+ return &MockWebUIHandlerRouter_Expecter{mock: &_m.Mock}
34963525 }
34973526
3498-// PostMessage provides a mock function for the type MockMessageRouter
3499-func (_mock *MockMessageRouter) PostMessage(webviewID port.WebViewID, message string) error {
3500- ret := _mock.Called(webviewID, message)
3527+// RegisterHandler provides a mock function for the type MockWebUIHandlerRouter
3528+func (_mock *MockWebUIHandlerRouter) RegisterHandler(msgType string, handler port.WebUIMessageHandler) error {
3529+ ret := _mock.Called(msgType, handler)
35013530
35023531 if len(ret) == 0 {
3503- panic("no return value specified for PostMessage")
3532+ panic("no return value specified for RegisterHandler")
35043533 }
35053534
35063535 var r0 error
3507- if returnFunc, ok := ret.Get(0).(func(port.WebViewID, string) error); ok {
3508- r0 = returnFunc(webviewID, message)
3536+ if returnFunc, ok := ret.Get(0).(func(string, port.WebUIMessageHandler) error); ok {
3537+ r0 = returnFunc(msgType, handler)
35093538 } else {
35103539 r0 = ret.Error(0)
35113540 }
35123541 return r0
35133542 }
35143543
3515-// MockMessageRouter_PostMessage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PostMessage'
3516-type MockMessageRouter_PostMessage_Call struct {
3544+// MockWebUIHandlerRouter_RegisterHandler_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterHandler'
3545+type MockWebUIHandlerRouter_RegisterHandler_Call struct {
35173546 *mock.Call
35183547 }
35193548
3520-// PostMessage is a helper method to define mock.On call
3521-// - webviewID port.WebViewID
3522-// - message string
3523-func (_e *MockMessageRouter_Expecter) PostMessage(webviewID interface{}, message interface{}) *MockMessageRouter_PostMessage_Call {
3524- return &MockMessageRouter_PostMessage_Call{Call: _e.mock.On("PostMessage", webviewID, message)}
3549+// RegisterHandler is a helper method to define mock.On call
3550+// - msgType string
3551+// - handler port.WebUIMessageHandler
3552+func (_e *MockWebUIHandlerRouter_Expecter) RegisterHandler(msgType interface{}, handler interface{}) *MockWebUIHandlerRouter_RegisterHandler_Call {
3553+ return &MockWebUIHandlerRouter_RegisterHandler_Call{Call: _e.mock.On("RegisterHandler", msgType, handler)}
35253554 }
35263555
3527-func (_c *MockMessageRouter_PostMessage_Call) Run(run func(webviewID port.WebViewID, message string)) *MockMessageRouter_PostMessage_Call {
3556+func (_c *MockWebUIHandlerRouter_RegisterHandler_Call) Run(run func(msgType string, handler port.WebUIMessageHandler)) *MockWebUIHandlerRouter_RegisterHandler_Call {
35283557 _c.Call.Run(func(args mock.Arguments) {
3529- var arg0 port.WebViewID
3558+ var arg0 string
35303559 if args[0] != nil {
3531- arg0 = args[0].(port.WebViewID)
3560+ arg0 = args[0].(string)
3561+ }
3562+ var arg1 port.WebUIMessageHandler
3563+ if args[1] != nil {
3564+ arg1 = args[1].(port.WebUIMessageHandler)
3565+ }
3566+ run(
3567+ arg0,
3568+ arg1,
3569+ )
3570+ })
3571+ return _c
3572+}
3573+
3574+func (_c *MockWebUIHandlerRouter_RegisterHandler_Call) Return(err error) *MockWebUIHandlerRouter_RegisterHandler_Call {
3575+ _c.Call.Return(err)
3576+ return _c
3577+}
3578+
3579+func (_c *MockWebUIHandlerRouter_RegisterHandler_Call) RunAndReturn(run func(msgType string, handler port.WebUIMessageHandler) error) *MockWebUIHandlerRouter_RegisterHandler_Call {
3580+ _c.Call.Return(run)
3581+ return _c
3582+}
3583+
3584+// RegisterHandlerWithCallbacks provides a mock function for the type MockWebUIHandlerRouter
3585+func (_mock *MockWebUIHandlerRouter) RegisterHandlerWithCallbacks(msgType string, callback string, errorCallback string, worldName string, handler port.WebUIMessageHandler) error {
3586+ ret := _mock.Called(msgType, callback, errorCallback, worldName, handler)
3587+
3588+ if len(ret) == 0 {
3589+ panic("no return value specified for RegisterHandlerWithCallbacks")
3590+ }
3591+
3592+ var r0 error
3593+ if returnFunc, ok := ret.Get(0).(func(string, string, string, string, port.WebUIMessageHandler) error); ok {
3594+ r0 = returnFunc(msgType, callback, errorCallback, worldName, handler)
3595+ } else {
3596+ r0 = ret.Error(0)
3597+ }
3598+ return r0
3599+}
3600+
3601+// MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterHandlerWithCallbacks'
3602+type MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call struct {
3603+ *mock.Call
3604+}
3605+
3606+// RegisterHandlerWithCallbacks is a helper method to define mock.On call
3607+// - msgType string
3608+// - callback string
3609+// - errorCallback string
3610+// - worldName string
3611+// - handler port.WebUIMessageHandler
3612+func (_e *MockWebUIHandlerRouter_Expecter) RegisterHandlerWithCallbacks(msgType interface{}, callback interface{}, errorCallback interface{}, worldName interface{}, handler interface{}) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
3613+ return &MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call{Call: _e.mock.On("RegisterHandlerWithCallbacks", msgType, callback, errorCallback, worldName, handler)}
3614+}
3615+
3616+func (_c *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call) Run(run func(msgType string, callback string, errorCallback string, worldName string, handler port.WebUIMessageHandler)) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
3617+ _c.Call.Run(func(args mock.Arguments) {
3618+ var arg0 string
3619+ if args[0] != nil {
3620+ arg0 = args[0].(string)
35323621 }
35333622 var arg1 string
35343623 if args[1] != nil {
35353624 arg1 = args[1].(string)
35363625 }
3626+ var arg2 string
3627+ if args[2] != nil {
3628+ arg2 = args[2].(string)
3629+ }
3630+ var arg3 string
3631+ if args[3] != nil {
3632+ arg3 = args[3].(string)
3633+ }
3634+ var arg4 port.WebUIMessageHandler
3635+ if args[4] != nil {
3636+ arg4 = args[4].(port.WebUIMessageHandler)
3637+ }
35373638 run(
35383639 arg0,
35393640 arg1,
3641+ arg2,
3642+ arg3,
3643+ arg4,
35403644 )
35413645 })
35423646 return _c
35433647 }
35443648
3545-func (_c *MockMessageRouter_PostMessage_Call) Return(err error) *MockMessageRouter_PostMessage_Call {
3649+func (_c *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call) Return(err error) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
35463650 _c.Call.Return(err)
35473651 return _c
35483652 }
35493653
3550-func (_c *MockMessageRouter_PostMessage_Call) RunAndReturn(run func(webviewID port.WebViewID, message string) error) *MockMessageRouter_PostMessage_Call {
3654+func (_c *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call) RunAndReturn(run func(msgType string, callback string, errorCallback string, worldName string, handler port.WebUIMessageHandler) error) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
35513655 _c.Call.Return(run)
35523656 return _c
35533657 }
35543658
3555-// RegisterHandler provides a mock function for the type MockMessageRouter
3556-func (_mock *MockMessageRouter) RegisterHandler(name string, handler func(message string) (string, error)) {
3557- _mock.Called(name, handler)
3659+// NewMockSchemeHandler creates a new instance of MockSchemeHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
3660+// The first argument is typically a *testing.T value.
3661+func NewMockSchemeHandler(t interface {
3662+ mock.TestingT
3663+ Cleanup(func())
3664+}) *MockSchemeHandler {
3665+ mock := &MockSchemeHandler{}
3666+ mock.Mock.Test(t)
3667+
3668+ t.Cleanup(func() { mock.AssertExpectations(t) })
3669+
3670+ return mock
3671+}
3672+
3673+// MockSchemeHandler is an autogenerated mock type for the SchemeHandler type
3674+type MockSchemeHandler struct {
3675+ mock.Mock
3676+}
3677+
3678+type MockSchemeHandler_Expecter struct {
3679+ mock *mock.Mock
3680+}
3681+
3682+func (_m *MockSchemeHandler) EXPECT() *MockSchemeHandler_Expecter {
3683+ return &MockSchemeHandler_Expecter{mock: &_m.Mock}
3684+}
3685+
3686+// RegisterScheme provides a mock function for the type MockSchemeHandler
3687+func (_mock *MockSchemeHandler) RegisterScheme(scheme string, handler func(uri string) ([]byte, string, error)) {
3688+ _mock.Called(scheme, handler)
35583689 return
35593690 }
35603691
3561-// MockMessageRouter_RegisterHandler_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterHandler'
3562-type MockMessageRouter_RegisterHandler_Call struct {
3692+// MockSchemeHandler_RegisterScheme_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterScheme'
3693+type MockSchemeHandler_RegisterScheme_Call struct {
35633694 *mock.Call
35643695 }
35653696
3566-// RegisterHandler is a helper method to define mock.On call
3567-// - name string
3568-// - handler func(message string) (string, error)
3569-func (_e *MockMessageRouter_Expecter) RegisterHandler(name interface{}, handler interface{}) *MockMessageRouter_RegisterHandler_Call {
3570- return &MockMessageRouter_RegisterHandler_Call{Call: _e.mock.On("RegisterHandler", name, handler)}
3697+// RegisterScheme is a helper method to define mock.On call
3698+// - scheme string
3699+// - handler func(uri string) ([]byte, string, error)
3700+func (_e *MockSchemeHandler_Expecter) RegisterScheme(scheme interface{}, handler interface{}) *MockSchemeHandler_RegisterScheme_Call {
3701+ return &MockSchemeHandler_RegisterScheme_Call{Call: _e.mock.On("RegisterScheme", scheme, handler)}
35713702 }
35723703
3573-func (_c *MockMessageRouter_RegisterHandler_Call) Run(run func(name string, handler func(message string) (string, error))) *MockMessageRouter_RegisterHandler_Call {
3704+func (_c *MockSchemeHandler_RegisterScheme_Call) Run(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {
35743705 _c.Call.Run(func(args mock.Arguments) {
35753706 var arg0 string
35763707 if args[0] != nil {
35773708 arg0 = args[0].(string)
35783709 }
3579- var arg1 func(message string) (string, error)
3710+ var arg1 func(uri string) ([]byte, string, error)
35803711 if args[1] != nil {
3581- arg1 = args[1].(func(message string) (string, error))
3712+ arg1 = args[1].(func(uri string) ([]byte, string, error))
35823713 }
35833714 run(
35843715 arg0,
@@ -3588,12 +3719,12 @@ func (_c *MockMessageRouter_RegisterHandler_Call) Run(run func(name string, hand
35883719 return _c
35893720 }
35903721
3591-func (_c *MockMessageRouter_RegisterHandler_Call) Return() *MockMessageRouter_RegisterHandler_Call {
3722+func (_c *MockSchemeHandler_RegisterScheme_Call) Return() *MockSchemeHandler_RegisterScheme_Call {
35923723 _c.Call.Return()
35933724 return _c
35943725 }
35953726
3596-func (_c *MockMessageRouter_RegisterHandler_Call) RunAndReturn(run func(name string, handler func(message string) (string, error))) *MockMessageRouter_RegisterHandler_Call {
3727+func (_c *MockSchemeHandler_RegisterScheme_Call) RunAndReturn(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {
35973728 _c.Run(run)
35983729 return _c
35993730 }
@@ -7,6 +7,7 @@ package mocks
7 import (7 import (
8 "context"8 "context"
9 "database/sql"9 "database/sql"
10+ "encoding/json"
10 "time"11 "time"
11 12
12 "github.com/bnema/dumber/internal/application/port"13 "github.com/bnema/dumber/internal/application/port"
@@ -3395,13 +3396,13 @@ func (_c *MockEngine_UpdateSettings_Call) RunAndReturn(run func(ctx context.Cont
3395 return _c3396 return _c
3396 }3397 }
3397 3398
3398-// NewMockSchemeHandler creates a new instance of MockSchemeHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.3399+// NewMockWebUIMessageHandler creates a new instance of MockWebUIMessageHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
3399 // The first argument is typically a *testing.T value.3400 // The first argument is typically a *testing.T value.
3400-func NewMockSchemeHandler(t interface {3401+func NewMockWebUIMessageHandler(t interface {
3401 mock.TestingT3402 mock.TestingT
3402 Cleanup(func())3403 Cleanup(func())
3403-}) *MockSchemeHandler {3404+}) *MockWebUIMessageHandler {
3404- mock := &MockSchemeHandler{}3405+ mock := &MockWebUIMessageHandler{}
3405 mock.Mock.Test(t)3406 mock.Mock.Test(t)
3406 3407
3407 t.Cleanup(func() { mock.AssertExpectations(t) })3408 t.Cleanup(func() { mock.AssertExpectations(t) })
@@ -3409,72 +3410,100 @@ func NewMockSchemeHandler(t interface {
3409 return mock3410 return mock
3410 }3411 }
3411 3412
3412-// MockSchemeHandler is an autogenerated mock type for the SchemeHandler type3413+// MockWebUIMessageHandler is an autogenerated mock type for the WebUIMessageHandler type
3413-type MockSchemeHandler struct {3414+type MockWebUIMessageHandler struct {
3414 mock.Mock3415 mock.Mock
3415 }3416 }
3416 3417
3417-type MockSchemeHandler_Expecter struct {3418+type MockWebUIMessageHandler_Expecter struct {
3418 mock *mock.Mock3419 mock *mock.Mock
3419 }3420 }
3420 3421
3421-func (_m *MockSchemeHandler) EXPECT() *MockSchemeHandler_Expecter {3422+func (_m *MockWebUIMessageHandler) EXPECT() *MockWebUIMessageHandler_Expecter {
3422- return &MockSchemeHandler_Expecter{mock: &_m.Mock}3423+ return &MockWebUIMessageHandler_Expecter{mock: &_m.Mock}
3423 }3424 }
3424 3425
3425-// RegisterScheme provides a mock function for the type MockSchemeHandler3426+// Handle provides a mock function for the type MockWebUIMessageHandler
3426-func (_mock *MockSchemeHandler) RegisterScheme(scheme string, handler func(uri string) ([]byte, string, error)) {3427+func (_mock *MockWebUIMessageHandler) Handle(ctx context.Context, webviewID port.WebViewID, payload json.RawMessage) (any, error) {
3427- _mock.Called(scheme, handler)3428+ ret := _mock.Called(ctx, webviewID, payload)
3428- return3429+
3430+ if len(ret) == 0 {
3431+ panic("no return value specified for Handle")
3432+ }
3433+
3434+ var r0 any
3435+ var r1 error
3436+ if returnFunc, ok := ret.Get(0).(func(context.Context, port.WebViewID, json.RawMessage) (any, error)); ok {
3437+ return returnFunc(ctx, webviewID, payload)
3438+ }
3439+ if returnFunc, ok := ret.Get(0).(func(context.Context, port.WebViewID, json.RawMessage) any); ok {
3440+ r0 = returnFunc(ctx, webviewID, payload)
3441+ } else {
3442+ if ret.Get(0) != nil {
3443+ r0 = ret.Get(0).(any)
3444+ }
3445+ }
3446+ if returnFunc, ok := ret.Get(1).(func(context.Context, port.WebViewID, json.RawMessage) error); ok {
3447+ r1 = returnFunc(ctx, webviewID, payload)
3448+ } else {
3449+ r1 = ret.Error(1)
3450+ }
3451+ return r0, r1
3429 }3452 }
3430 3453
3431-// MockSchemeHandler_RegisterScheme_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterScheme'3454+// MockWebUIMessageHandler_Handle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Handle'
3432-type MockSchemeHandler_RegisterScheme_Call struct {3455+type MockWebUIMessageHandler_Handle_Call struct {
3433 *mock.Call3456 *mock.Call
3434 }3457 }
3435 3458
3436-// RegisterScheme is a helper method to define mock.On call3459+// Handle is a helper method to define mock.On call
3437-// - scheme string3460+// - ctx context.Context
3438-// - handler func(uri string) ([]byte, string, error)3461+// - webviewID port.WebViewID
3439-func (_e *MockSchemeHandler_Expecter) RegisterScheme(scheme interface{}, handler interface{}) *MockSchemeHandler_RegisterScheme_Call {3462+// - payload json.RawMessage
3440- return &MockSchemeHandler_RegisterScheme_Call{Call: _e.mock.On("RegisterScheme", scheme, handler)}3463+func (_e *MockWebUIMessageHandler_Expecter) Handle(ctx interface{}, webviewID interface{}, payload interface{}) *MockWebUIMessageHandler_Handle_Call {
3464+ return &MockWebUIMessageHandler_Handle_Call{Call: _e.mock.On("Handle", ctx, webviewID, payload)}
3441 }3465 }
3442 3466
3443-func (_c *MockSchemeHandler_RegisterScheme_Call) Run(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {3467+func (_c *MockWebUIMessageHandler_Handle_Call) Run(run func(ctx context.Context, webviewID port.WebViewID, payload json.RawMessage)) *MockWebUIMessageHandler_Handle_Call {
3444 _c.Call.Run(func(args mock.Arguments) {3468 _c.Call.Run(func(args mock.Arguments) {
3445- var arg0 string3469+ var arg0 context.Context
3446 if args[0] != nil {3470 if args[0] != nil {
3447- arg0 = args[0].(string)3471+ arg0 = args[0].(context.Context)
3448 }3472 }
3449- var arg1 func(uri string) ([]byte, string, error)3473+ var arg1 port.WebViewID
3450 if args[1] != nil {3474 if args[1] != nil {
3451- arg1 = args[1].(func(uri string) ([]byte, string, error))3475+ arg1 = args[1].(port.WebViewID)
3476+ }
3477+ var arg2 json.RawMessage
3478+ if args[2] != nil {
3479+ arg2 = args[2].(json.RawMessage)
3452 }3480 }
3453 run(3481 run(
3454 arg0,3482 arg0,
3455 arg1,3483 arg1,
3484+ arg2,
3456 )3485 )
3457 })3486 })
3458 return _c3487 return _c
3459 }3488 }
3460 3489
3461-func (_c *MockSchemeHandler_RegisterScheme_Call) Return() *MockSchemeHandler_RegisterScheme_Call {3490+func (_c *MockWebUIMessageHandler_Handle_Call) Return(v any, err error) *MockWebUIMessageHandler_Handle_Call {
3462- _c.Call.Return()3491+ _c.Call.Return(v, err)
3463 return _c3492 return _c
3464 }3493 }
3465 3494
3466-func (_c *MockSchemeHandler_RegisterScheme_Call) RunAndReturn(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {3495+func (_c *MockWebUIMessageHandler_Handle_Call) RunAndReturn(run func(ctx context.Context, webviewID port.WebViewID, payload json.RawMessage) (any, error)) *MockWebUIMessageHandler_Handle_Call {
3467- _c.Run(run)3496+ _c.Call.Return(run)
3468 return _c3497 return _c
3469 }3498 }
3470 3499
3471-// NewMockMessageRouter creates a new instance of MockMessageRouter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.3500+// NewMockWebUIHandlerRouter creates a new instance of MockWebUIHandlerRouter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
3472 // The first argument is typically a *testing.T value.3501 // The first argument is typically a *testing.T value.
3473-func NewMockMessageRouter(t interface {3502+func NewMockWebUIHandlerRouter(t interface {
3474 mock.TestingT3503 mock.TestingT
3475 Cleanup(func())3504 Cleanup(func())
3476-}) *MockMessageRouter {3505+}) *MockWebUIHandlerRouter {
3477- mock := &MockMessageRouter{}3506+ mock := &MockWebUIHandlerRouter{}
3478 mock.Mock.Test(t)3507 mock.Mock.Test(t)
3479 3508
3480 t.Cleanup(func() { mock.AssertExpectations(t) })3509 t.Cleanup(func() { mock.AssertExpectations(t) })
@@ -3482,103 +3511,205 @@ func NewMockMessageRouter(t interface {
3482 return mock3511 return mock
3483 }3512 }
3484 3513
3485-// MockMessageRouter is an autogenerated mock type for the MessageRouter type3514+// MockWebUIHandlerRouter is an autogenerated mock type for the WebUIHandlerRouter type
3486-type MockMessageRouter struct {3515+type MockWebUIHandlerRouter struct {
3487 mock.Mock3516 mock.Mock
3488 }3517 }
3489 3518
3490-type MockMessageRouter_Expecter struct {3519+type MockWebUIHandlerRouter_Expecter struct {
3491 mock *mock.Mock3520 mock *mock.Mock
3492 }3521 }
3493 3522
3494-func (_m *MockMessageRouter) EXPECT() *MockMessageRouter_Expecter {3523+func (_m *MockWebUIHandlerRouter) EXPECT() *MockWebUIHandlerRouter_Expecter {
3495- return &MockMessageRouter_Expecter{mock: &_m.Mock}3524+ return &MockWebUIHandlerRouter_Expecter{mock: &_m.Mock}
3496 }3525 }
3497 3526
3498-// PostMessage provides a mock function for the type MockMessageRouter3527+// RegisterHandler provides a mock function for the type MockWebUIHandlerRouter
3499-func (_mock *MockMessageRouter) PostMessage(webviewID port.WebViewID, message string) error {3528+func (_mock *MockWebUIHandlerRouter) RegisterHandler(msgType string, handler port.WebUIMessageHandler) error {
3500- ret := _mock.Called(webviewID, message)3529+ ret := _mock.Called(msgType, handler)
3501 3530
3502 if len(ret) == 0 {3531 if len(ret) == 0 {
3503- panic("no return value specified for PostMessage")3532+ panic("no return value specified for RegisterHandler")
3504 }3533 }
3505 3534
3506 var r0 error3535 var r0 error
3507- if returnFunc, ok := ret.Get(0).(func(port.WebViewID, string) error); ok {3536+ if returnFunc, ok := ret.Get(0).(func(string, port.WebUIMessageHandler) error); ok {
3508- r0 = returnFunc(webviewID, message)3537+ r0 = returnFunc(msgType, handler)
3509 } else {3538 } else {
3510 r0 = ret.Error(0)3539 r0 = ret.Error(0)
3511 }3540 }
3512 return r03541 return r0
3513 }3542 }
3514 3543
3515-// MockMessageRouter_PostMessage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PostMessage'3544+// MockWebUIHandlerRouter_RegisterHandler_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterHandler'
3516-type MockMessageRouter_PostMessage_Call struct {3545+type MockWebUIHandlerRouter_RegisterHandler_Call struct {
3517 *mock.Call3546 *mock.Call
3518 }3547 }
3519 3548
3520-// PostMessage is a helper method to define mock.On call3549+// RegisterHandler is a helper method to define mock.On call
3521-// - webviewID port.WebViewID3550+// - msgType string
3522-// - message string3551+// - handler port.WebUIMessageHandler
3523-func (_e *MockMessageRouter_Expecter) PostMessage(webviewID interface{}, message interface{}) *MockMessageRouter_PostMessage_Call {3552+func (_e *MockWebUIHandlerRouter_Expecter) RegisterHandler(msgType interface{}, handler interface{}) *MockWebUIHandlerRouter_RegisterHandler_Call {
3524- return &MockMessageRouter_PostMessage_Call{Call: _e.mock.On("PostMessage", webviewID, message)}3553+ return &MockWebUIHandlerRouter_RegisterHandler_Call{Call: _e.mock.On("RegisterHandler", msgType, handler)}
3525 }3554 }
3526 3555
3527-func (_c *MockMessageRouter_PostMessage_Call) Run(run func(webviewID port.WebViewID, message string)) *MockMessageRouter_PostMessage_Call {3556+func (_c *MockWebUIHandlerRouter_RegisterHandler_Call) Run(run func(msgType string, handler port.WebUIMessageHandler)) *MockWebUIHandlerRouter_RegisterHandler_Call {
3528 _c.Call.Run(func(args mock.Arguments) {3557 _c.Call.Run(func(args mock.Arguments) {
3529- var arg0 port.WebViewID3558+ var arg0 string
3530 if args[0] != nil {3559 if args[0] != nil {
3531- arg0 = args[0].(port.WebViewID)3560+ arg0 = args[0].(string)
3561+ }
3562+ var arg1 port.WebUIMessageHandler
3563+ if args[1] != nil {
3564+ arg1 = args[1].(port.WebUIMessageHandler)
3565+ }
3566+ run(
3567+ arg0,
3568+ arg1,
3569+ )
3570+ })
3571+ return _c
3572+}
3573+
3574+func (_c *MockWebUIHandlerRouter_RegisterHandler_Call) Return(err error) *MockWebUIHandlerRouter_RegisterHandler_Call {
3575+ _c.Call.Return(err)
3576+ return _c
3577+}
3578+
3579+func (_c *MockWebUIHandlerRouter_RegisterHandler_Call) RunAndReturn(run func(msgType string, handler port.WebUIMessageHandler) error) *MockWebUIHandlerRouter_RegisterHandler_Call {
3580+ _c.Call.Return(run)
3581+ return _c
3582+}
3583+
3584+// RegisterHandlerWithCallbacks provides a mock function for the type MockWebUIHandlerRouter
3585+func (_mock *MockWebUIHandlerRouter) RegisterHandlerWithCallbacks(msgType string, callback string, errorCallback string, worldName string, handler port.WebUIMessageHandler) error {
3586+ ret := _mock.Called(msgType, callback, errorCallback, worldName, handler)
3587+
3588+ if len(ret) == 0 {
3589+ panic("no return value specified for RegisterHandlerWithCallbacks")
3590+ }
3591+
3592+ var r0 error
3593+ if returnFunc, ok := ret.Get(0).(func(string, string, string, string, port.WebUIMessageHandler) error); ok {
3594+ r0 = returnFunc(msgType, callback, errorCallback, worldName, handler)
3595+ } else {
3596+ r0 = ret.Error(0)
3597+ }
3598+ return r0
3599+}
3600+
3601+// MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterHandlerWithCallbacks'
3602+type MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call struct {
3603+ *mock.Call
3604+}
3605+
3606+// RegisterHandlerWithCallbacks is a helper method to define mock.On call
3607+// - msgType string
3608+// - callback string
3609+// - errorCallback string
3610+// - worldName string
3611+// - handler port.WebUIMessageHandler
3612+func (_e *MockWebUIHandlerRouter_Expecter) RegisterHandlerWithCallbacks(msgType interface{}, callback interface{}, errorCallback interface{}, worldName interface{}, handler interface{}) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
3613+ return &MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call{Call: _e.mock.On("RegisterHandlerWithCallbacks", msgType, callback, errorCallback, worldName, handler)}
3614+}
3615+
3616+func (_c *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call) Run(run func(msgType string, callback string, errorCallback string, worldName string, handler port.WebUIMessageHandler)) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
3617+ _c.Call.Run(func(args mock.Arguments) {
3618+ var arg0 string
3619+ if args[0] != nil {
3620+ arg0 = args[0].(string)
3532 }3621 }
3533 var arg1 string3622 var arg1 string
3534 if args[1] != nil {3623 if args[1] != nil {
3535 arg1 = args[1].(string)3624 arg1 = args[1].(string)
3536 }3625 }
3626+ var arg2 string
3627+ if args[2] != nil {
3628+ arg2 = args[2].(string)
3629+ }
3630+ var arg3 string
3631+ if args[3] != nil {
3632+ arg3 = args[3].(string)
3633+ }
3634+ var arg4 port.WebUIMessageHandler
3635+ if args[4] != nil {
3636+ arg4 = args[4].(port.WebUIMessageHandler)
3637+ }
3537 run(3638 run(
3538 arg0,3639 arg0,
3539 arg1,3640 arg1,
3641+ arg2,
3642+ arg3,
3643+ arg4,
3540 )3644 )
3541 })3645 })
3542 return _c3646 return _c
3543 }3647 }
3544 3648
3545-func (_c *MockMessageRouter_PostMessage_Call) Return(err error) *MockMessageRouter_PostMessage_Call {3649+func (_c *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call) Return(err error) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
3546 _c.Call.Return(err)3650 _c.Call.Return(err)
3547 return _c3651 return _c
3548 }3652 }
3549 3653
3550-func (_c *MockMessageRouter_PostMessage_Call) RunAndReturn(run func(webviewID port.WebViewID, message string) error) *MockMessageRouter_PostMessage_Call {3654+func (_c *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call) RunAndReturn(run func(msgType string, callback string, errorCallback string, worldName string, handler port.WebUIMessageHandler) error) *MockWebUIHandlerRouter_RegisterHandlerWithCallbacks_Call {
3551 _c.Call.Return(run)3655 _c.Call.Return(run)
3552 return _c3656 return _c
3553 }3657 }
3554 3658
3555-// RegisterHandler provides a mock function for the type MockMessageRouter3659+// NewMockSchemeHandler creates a new instance of MockSchemeHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
3556-func (_mock *MockMessageRouter) RegisterHandler(name string, handler func(message string) (string, error)) {3660+// The first argument is typically a *testing.T value.
3557- _mock.Called(name, handler)3661+func NewMockSchemeHandler(t interface {
3662+ mock.TestingT
3663+ Cleanup(func())
3664+}) *MockSchemeHandler {
3665+ mock := &MockSchemeHandler{}
3666+ mock.Mock.Test(t)
3667+
3668+ t.Cleanup(func() { mock.AssertExpectations(t) })
3669+
3670+ return mock
3671+}
3672+
3673+// MockSchemeHandler is an autogenerated mock type for the SchemeHandler type
3674+type MockSchemeHandler struct {
3675+ mock.Mock
3676+}
3677+
3678+type MockSchemeHandler_Expecter struct {
3679+ mock *mock.Mock
3680+}
3681+
3682+func (_m *MockSchemeHandler) EXPECT() *MockSchemeHandler_Expecter {
3683+ return &MockSchemeHandler_Expecter{mock: &_m.Mock}
3684+}
3685+
3686+// RegisterScheme provides a mock function for the type MockSchemeHandler
3687+func (_mock *MockSchemeHandler) RegisterScheme(scheme string, handler func(uri string) ([]byte, string, error)) {
3688+ _mock.Called(scheme, handler)
3558 return3689 return
3559 }3690 }
3560 3691
3561-// MockMessageRouter_RegisterHandler_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterHandler'3692+// MockSchemeHandler_RegisterScheme_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterScheme'
3562-type MockMessageRouter_RegisterHandler_Call struct {3693+type MockSchemeHandler_RegisterScheme_Call struct {
3563 *mock.Call3694 *mock.Call
3564 }3695 }
3565 3696
3566-// RegisterHandler is a helper method to define mock.On call3697+// RegisterScheme is a helper method to define mock.On call
3567-// - name string3698+// - scheme string
3568-// - handler func(message string) (string, error)3699+// - handler func(uri string) ([]byte, string, error)
3569-func (_e *MockMessageRouter_Expecter) RegisterHandler(name interface{}, handler interface{}) *MockMessageRouter_RegisterHandler_Call {3700+func (_e *MockSchemeHandler_Expecter) RegisterScheme(scheme interface{}, handler interface{}) *MockSchemeHandler_RegisterScheme_Call {
3570- return &MockMessageRouter_RegisterHandler_Call{Call: _e.mock.On("RegisterHandler", name, handler)}3701+ return &MockSchemeHandler_RegisterScheme_Call{Call: _e.mock.On("RegisterScheme", scheme, handler)}
3571 }3702 }
3572 3703
3573-func (_c *MockMessageRouter_RegisterHandler_Call) Run(run func(name string, handler func(message string) (string, error))) *MockMessageRouter_RegisterHandler_Call {3704+func (_c *MockSchemeHandler_RegisterScheme_Call) Run(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {
3574 _c.Call.Run(func(args mock.Arguments) {3705 _c.Call.Run(func(args mock.Arguments) {
3575 var arg0 string3706 var arg0 string
3576 if args[0] != nil {3707 if args[0] != nil {
3577 arg0 = args[0].(string)3708 arg0 = args[0].(string)
3578 }3709 }
3579- var arg1 func(message string) (string, error)3710+ var arg1 func(uri string) ([]byte, string, error)
3580 if args[1] != nil {3711 if args[1] != nil {
3581- arg1 = args[1].(func(message string) (string, error))3712+ arg1 = args[1].(func(uri string) ([]byte, string, error))
3582 }3713 }
3583 run(3714 run(
3584 arg0,3715 arg0,
@@ -3588,12 +3719,12 @@ func (_c *MockMessageRouter_RegisterHandler_Call) Run(run func(name string, hand
3588 return _c3719 return _c
3589 }3720 }
3590 3721
3591-func (_c *MockMessageRouter_RegisterHandler_Call) Return() *MockMessageRouter_RegisterHandler_Call {3722+func (_c *MockSchemeHandler_RegisterScheme_Call) Return() *MockSchemeHandler_RegisterScheme_Call {
3592 _c.Call.Return()3723 _c.Call.Return()
3593 return _c3724 return _c
3594 }3725 }
3595 3726
3596-func (_c *MockMessageRouter_RegisterHandler_Call) RunAndReturn(run func(name string, handler func(message string) (string, error))) *MockMessageRouter_RegisterHandler_Call {3727+func (_c *MockSchemeHandler_RegisterScheme_Call) RunAndReturn(run func(scheme string, handler func(uri string) ([]byte, string, error))) *MockSchemeHandler_RegisterScheme_Call {
3597 _c.Run(run)3728 _c.Run(run)
3598 return _c3729 return _c
3599 }3730 }
M internal/infrastructure/cef/messaging.go +3 -2
@@ -115,8 +115,9 @@ func (r *MessageRouter) RegisterHandlerWithCallbacks(
115115 return nil
116116 }
117117
118-// registerInternalHandler registers a CEF-internal handler for a message type.
119-// Used for engine-internal handlers that work directly with uint64 webview IDs.
118+// registerInternalHandler registers a CEF-internal handler that works with bare
119+// uint64 webview IDs (e.g. accent key handlers in engine.go). External callers
120+// should use RegisterHandler/RegisterHandlerWithCallbacks (port.WebUIHandlerRouter).
120121 func (r *MessageRouter) registerInternalHandler(msgType string, handler MessageHandler) error {
121122 if msgType == "" {
122123 return errors.New("message type cannot be empty")
@@ -115,8 +115,9 @@ func (r *MessageRouter) RegisterHandlerWithCallbacks(
115 return nil115 return nil
116 }116 }
117 117
118-// registerInternalHandler registers a CEF-internal handler for a message type.118+// registerInternalHandler registers a CEF-internal handler that works with bare
119-// Used for engine-internal handlers that work directly with uint64 webview IDs.119+// uint64 webview IDs (e.g. accent key handlers in engine.go). External callers
120+// should use RegisterHandler/RegisterHandlerWithCallbacks (port.WebUIHandlerRouter).
120 func (r *MessageRouter) registerInternalHandler(msgType string, handler MessageHandler) error {121 func (r *MessageRouter) registerInternalHandler(msgType string, handler MessageHandler) error {
121 if msgType == "" {122 if msgType == "" {
122 return errors.New("message type cannot be empty")123 return errors.New("message type cannot be empty")
M internal/infrastructure/handlers/register_test.go +27 -52
@@ -6,81 +6,56 @@ import (
66 "testing"
77
88 "github.com/bnema/dumber/internal/application/port"
9+ "github.com/bnema/dumber/internal/application/port/mocks"
910 "github.com/stretchr/testify/assert"
11+ "github.com/stretchr/testify/mock"
1012 "github.com/stretchr/testify/require"
1113 )
1214
13-// stubRouter implements port.WebUIHandlerRouter for testing.
14-type stubRouter struct {
15- handlers map[string]port.WebUIMessageHandler
16-}
17-
18-func newStubRouter() *stubRouter {
19- return &stubRouter{handlers: make(map[string]port.WebUIMessageHandler)}
20-}
21-
22-func (r *stubRouter) RegisterHandler(msgType string, handler port.WebUIMessageHandler) error {
23- r.handlers[msgType] = handler
24- return nil
25-}
26-
27-func (r *stubRouter) RegisterHandlerWithCallbacks(msgType, _, _, _ string, handler port.WebUIMessageHandler) error {
28- r.handlers[msgType] = handler
29- return nil
30-}
31-
3215 func TestRegisterAccentHandlers_NilRouter(t *testing.T) {
33- ctx := context.Background()
34- handler := &stubAccentHandler{}
35- err := RegisterAccentHandlers(ctx, nil, handler)
16+ handler := mocks.NewMockAccentKeyHandler(t)
17+ err := RegisterAccentHandlers(context.Background(), nil, handler)
3618 require.Error(t, err)
3719 assert.Contains(t, err.Error(), "router")
3820 }
3921
4022 func TestRegisterAccentHandlers_NilHandler(t *testing.T) {
41- ctx := context.Background()
42- router := newStubRouter()
43- err := RegisterAccentHandlers(ctx, router, nil)
23+ router := mocks.NewMockWebUIHandlerRouter(t)
24+ err := RegisterAccentHandlers(context.Background(), router, nil)
4425 require.Error(t, err)
4526 assert.Contains(t, err.Error(), "handler")
4627 }
4728
4829 func TestRegisterAccentHandlers_Success(t *testing.T) {
49- ctx := context.Background()
50- router := newStubRouter()
51- handler := &stubAccentHandler{}
52- err := RegisterAccentHandlers(ctx, router, handler)
30+ router := mocks.NewMockWebUIHandlerRouter(t)
31+ handler := mocks.NewMockAccentKeyHandler(t)
32+
33+ router.EXPECT().RegisterHandler("accent_key_press", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
34+ router.EXPECT().RegisterHandler("accent_key_release", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
35+
36+ err := RegisterAccentHandlers(context.Background(), router, handler)
5337 require.NoError(t, err)
54- assert.Contains(t, router.handlers, "accent_key_press")
55- assert.Contains(t, router.handlers, "accent_key_release")
5638 }
5739
5840 func TestRegisterAccentHandlers_KeyPress(t *testing.T) {
5941 ctx := context.Background()
60- router := newStubRouter()
61- handler := &stubAccentHandler{}
42+
43+ // Use a real router to capture the handler and invoke it.
44+ var captured port.WebUIMessageHandler
45+ router := mocks.NewMockWebUIHandlerRouter(t)
46+ router.EXPECT().RegisterHandler("accent_key_press", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).
47+ Run(func(_ string, h port.WebUIMessageHandler) { captured = h }).
48+ Return(nil)
49+ router.EXPECT().RegisterHandler("accent_key_release", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
50+
51+ handler := mocks.NewMockAccentKeyHandler(t)
52+ handler.EXPECT().OnKeyPressed(ctx, 'e', true).Return(false)
53+
6254 err := RegisterAccentHandlers(ctx, router, handler)
6355 require.NoError(t, err)
64-
65- h := router.handlers["accent_key_press"]
66- require.NotNil(t, h)
56+ require.NotNil(t, captured)
6757
6858 payload := json.RawMessage(`{"char":"e","shift":true}`)
69- _, err = h.Handle(ctx, 0, payload)
59+ _, err = captured.Handle(ctx, 0, payload)
7060 require.NoError(t, err)
71- assert.Equal(t, 'e', handler.lastPressed)
72- assert.True(t, handler.lastShift)
73-}
74-
75-// stubAccentHandler satisfies port.AccentKeyHandler for tests.
76-type stubAccentHandler struct {
77- lastPressed rune
78- lastShift bool
79-}
80-
81-func (h *stubAccentHandler) OnKeyPressed(_ context.Context, r rune, shift bool) bool {
82- h.lastPressed = r
83- h.lastShift = shift
84- return false
8561 }
86-func (*stubAccentHandler) OnKeyReleased(_ context.Context, _ rune) {}
@@ -6,81 +6,56 @@ import (
6 "testing"6 "testing"
7 7
8 "github.com/bnema/dumber/internal/application/port"8 "github.com/bnema/dumber/internal/application/port"
9+ "github.com/bnema/dumber/internal/application/port/mocks"
9 "github.com/stretchr/testify/assert"10 "github.com/stretchr/testify/assert"
11+ "github.com/stretchr/testify/mock"
10 "github.com/stretchr/testify/require"12 "github.com/stretchr/testify/require"
11 )13 )
12 14
13-// stubRouter implements port.WebUIHandlerRouter for testing.
14-type stubRouter struct {
15- handlers map[string]port.WebUIMessageHandler
16-}
17-
18-func newStubRouter() *stubRouter {
19- return &stubRouter{handlers: make(map[string]port.WebUIMessageHandler)}
20-}
21-
22-func (r *stubRouter) RegisterHandler(msgType string, handler port.WebUIMessageHandler) error {
23- r.handlers[msgType] = handler
24- return nil
25-}
26-
27-func (r *stubRouter) RegisterHandlerWithCallbacks(msgType, _, _, _ string, handler port.WebUIMessageHandler) error {
28- r.handlers[msgType] = handler
29- return nil
30-}
31-
32 func TestRegisterAccentHandlers_NilRouter(t *testing.T) {15 func TestRegisterAccentHandlers_NilRouter(t *testing.T) {
33- ctx := context.Background()16+ handler := mocks.NewMockAccentKeyHandler(t)
34- handler := &stubAccentHandler{}17+ err := RegisterAccentHandlers(context.Background(), nil, handler)
35- err := RegisterAccentHandlers(ctx, nil, handler)
36 require.Error(t, err)18 require.Error(t, err)
37 assert.Contains(t, err.Error(), "router")19 assert.Contains(t, err.Error(), "router")
38 }20 }
39 21
40 func TestRegisterAccentHandlers_NilHandler(t *testing.T) {22 func TestRegisterAccentHandlers_NilHandler(t *testing.T) {
41- ctx := context.Background()23+ router := mocks.NewMockWebUIHandlerRouter(t)
42- router := newStubRouter()24+ err := RegisterAccentHandlers(context.Background(), router, nil)
43- err := RegisterAccentHandlers(ctx, router, nil)
44 require.Error(t, err)25 require.Error(t, err)
45 assert.Contains(t, err.Error(), "handler")26 assert.Contains(t, err.Error(), "handler")
46 }27 }
47 28
48 func TestRegisterAccentHandlers_Success(t *testing.T) {29 func TestRegisterAccentHandlers_Success(t *testing.T) {
49- ctx := context.Background()30+ router := mocks.NewMockWebUIHandlerRouter(t)
50- router := newStubRouter()31+ handler := mocks.NewMockAccentKeyHandler(t)
51- handler := &stubAccentHandler{}32+
52- err := RegisterAccentHandlers(ctx, router, handler)33+ router.EXPECT().RegisterHandler("accent_key_press", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
34+ router.EXPECT().RegisterHandler("accent_key_release", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
35+
36+ err := RegisterAccentHandlers(context.Background(), router, handler)
53 require.NoError(t, err)37 require.NoError(t, err)
54- assert.Contains(t, router.handlers, "accent_key_press")
55- assert.Contains(t, router.handlers, "accent_key_release")
56 }38 }
57 39
58 func TestRegisterAccentHandlers_KeyPress(t *testing.T) {40 func TestRegisterAccentHandlers_KeyPress(t *testing.T) {
59 ctx := context.Background()41 ctx := context.Background()
60- router := newStubRouter()42+
61- handler := &stubAccentHandler{}43+ // Use a real router to capture the handler and invoke it.
44+ var captured port.WebUIMessageHandler
45+ router := mocks.NewMockWebUIHandlerRouter(t)
46+ router.EXPECT().RegisterHandler("accent_key_press", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).
47+ Run(func(_ string, h port.WebUIMessageHandler) { captured = h }).
48+ Return(nil)
49+ router.EXPECT().RegisterHandler("accent_key_release", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
50+
51+ handler := mocks.NewMockAccentKeyHandler(t)
52+ handler.EXPECT().OnKeyPressed(ctx, 'e', true).Return(false)
53+
62 err := RegisterAccentHandlers(ctx, router, handler)54 err := RegisterAccentHandlers(ctx, router, handler)
63 require.NoError(t, err)55 require.NoError(t, err)
64-56+ require.NotNil(t, captured)
65- h := router.handlers["accent_key_press"]
66- require.NotNil(t, h)
67 57
68 payload := json.RawMessage(`{"char":"e","shift":true}`)58 payload := json.RawMessage(`{"char":"e","shift":true}`)
69- _, err = h.Handle(ctx, 0, payload)59+ _, err = captured.Handle(ctx, 0, payload)
70 require.NoError(t, err)60 require.NoError(t, err)
71- assert.Equal(t, 'e', handler.lastPressed)
72- assert.True(t, handler.lastShift)
73-}
74-
75-// stubAccentHandler satisfies port.AccentKeyHandler for tests.
76-type stubAccentHandler struct {
77- lastPressed rune
78- lastShift bool
79-}
80-
81-func (h *stubAccentHandler) OnKeyPressed(_ context.Context, r rune, shift bool) bool {
82- h.lastPressed = r
83- h.lastShift = shift
84- return false
85 }61 }
86-func (*stubAccentHandler) OnKeyReleased(_ context.Context, _ rune) {}

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