From 37eee304110dede62aaf2ce5bdf73fa8f0636d73 Mon Sep 17 00:00:00 2001 From: vilmibm Date: Tue, 31 Jan 2023 12:06:32 -0800 Subject: [PATCH] WIP fixing tests --- pkg/cmd/extension/browse/browse.go | 30 ++++++++++++++++++------- pkg/cmd/extension/browse/browse_test.go | 8 +++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/pkg/cmd/extension/browse/browse.go b/pkg/cmd/extension/browse/browse.go index ae294b3f9..9f0a75669 100644 --- a/pkg/cmd/extension/browse/browse.go +++ b/pkg/cmd/extension/browse/browse.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "strings" + "sync" "time" "github.com/MakeNowJust/heredoc" @@ -86,11 +87,12 @@ func (e extEntry) Description() string { } type extList struct { - ui uiRegistry - extEntries []extEntry - app *tview.Application - filter string - opts ExtBrowseOpts + ui uiRegistry + extEntries []extEntry + app *tview.Application + filter string + opts ExtBrowseOpts + QueueUpdateDraw func(func()) } func newExtList(opts ExtBrowseOpts, ui uiRegistry, extEntries []extEntry) *extList { @@ -108,6 +110,9 @@ func newExtList(opts ExtBrowseOpts, ui uiRegistry, extEntries []extEntry) *extLi extEntries: extEntries, app: ui.App, opts: opts, + QueueUpdateDraw: func(f func()) { + ui.App.QueueUpdateDraw(f) + }, } el.Reset() @@ -143,11 +148,15 @@ func (el *extList) InstallSelected() { modal.SetText(fmt.Sprintf("Installing %s...", ee.FullName)) el.ui.CmdFlex.Clear() el.ui.CmdFlex.AddItem(modal, 0, 1, true) + wg := sync.WaitGroup{} + wg.Add(1) go func() { - el.app.QueueUpdateDraw(func() { + el.QueueUpdateDraw(func() { el.ui.Pages.SwitchToPage("command") + wg.Add(1) + wg.Done() go func() { - el.app.QueueUpdateDraw(func() { + el.QueueUpdateDraw(func() { err = el.opts.Em.Install(repo, "") if err != nil { modal.SetText(fmt.Sprintf("Failed to install %s: %s", ee.FullName, err.Error())) @@ -155,12 +164,17 @@ func (el *extList) InstallSelected() { modal.SetText(fmt.Sprintf("Installed %s!", ee.FullName)) modal.AddButtons([]string{"ok"}) el.app.SetFocus(modal) - el.toggleInstalled(ix) } + wg.Done() }) }() }) }() + + wg.Wait() + if err == nil { + el.toggleInstalled(ix) + } } func (el *extList) RemoveSelected() { diff --git a/pkg/cmd/extension/browse/browse_test.go b/pkg/cmd/extension/browse/browse_test.go index 9d2cd5ff3..9801684c7 100644 --- a/pkg/cmd/extension/browse/browse_test.go +++ b/pkg/cmd/extension/browse/browse_test.go @@ -277,10 +277,12 @@ func Test_extList(t *testing.T) { cmdFlex := tview.NewFlex() app := tview.NewApplication() list := tview.NewList() + pages := tview.NewPages() ui := uiRegistry{ List: list, App: app, CmdFlex: cmdFlex, + Pages: pages, } extEntries := []extEntry{ { @@ -315,6 +317,10 @@ func Test_extList(t *testing.T) { extList := newExtList(opts, ui, extEntries) + extList.QueueUpdateDraw = func(f func()) { + f() + } + extList.Filter("cool") assert.Equal(t, 1, extList.ui.List.GetItemCount()) @@ -324,6 +330,8 @@ func Test_extList(t *testing.T) { extList.InstallSelected() assert.True(t, extList.extEntries[0].Installed) + // so I think the goroutines are causing a later failure because the toggleInstalled isn't seen. + extList.Refresh() assert.Equal(t, 1, extList.ui.List.GetItemCount())