From e0269136e63a9dd54c7675b1d831decc66af81fd Mon Sep 17 00:00:00 2001 From: Jan Pfeifer Date: Thu, 3 Oct 2024 18:55:15 +0200 Subject: [PATCH] Expanded Theme tests, and covered new BarStartFilled and BarEndFilled. --- progressbar.go | 14 +++++------ progressbar_test.go | 57 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 10 deletions(-) diff --git a/progressbar.go b/progressbar.go index 54b971a..51be101 100644 --- a/progressbar.go +++ b/progressbar.go @@ -867,10 +867,12 @@ func (p *ProgressBar) render() error { } if !p.config.useANSICodes { - // first, clear the existing progress bar - err := clearProgressBar(p.config, p.state) - if err != nil { - return err + // first, clear the existing progress bar, if not yet finished. + if !p.state.finished { + err := clearProgressBar(p.config, p.state) + if err != nil { + return err + } } } @@ -897,10 +899,6 @@ func (p *ProgressBar) render() error { if err != nil { return err } - } else if !p.config.clearOnFinish { - // Since bar was cleared, re-render it. - io.Copy(p.config.writer, &p.config.stdBuffer) - renderProgressBar(p.config, &p.state) } return nil } diff --git a/progressbar_test.go b/progressbar_test.go index daeab36..11d886d 100644 --- a/progressbar_test.go +++ b/progressbar_test.go @@ -452,16 +452,69 @@ func TestOptionSetTheme(t *testing.T) { buf := strings.Builder{} bar := NewOptions( 10, - OptionSetTheme(Theme{Saucer: "#", SaucerPadding: "-", BarStart: ">", BarEnd: "<"}), + OptionSetTheme( + Theme{Saucer: "#", SaucerPadding: "-", + BarStart: ">", BarEnd: "<"}), OptionSetWidth(10), OptionSetWriter(&buf), ) + bar.RenderBlank() + result := strings.TrimSpace(buf.String()) + expect := "0% >----------<" + if strings.Index(result, expect) == -1 { + t.Errorf("Render miss-match\nResult: '%s'\nExpect: '%s'\n%+v", result, expect, bar) + } + buf.Reset() + bar.Add(5) + result = strings.TrimSpace(buf.String()) + expect = "50% >#####-----< [0s:0s]" + if result != expect { + t.Errorf("Render miss-match\nResult: '%s'\nExpect: '%s'\n%+v", result, expect, bar) + } + buf.Reset() + + bar.Finish() + result = strings.TrimSpace(buf.String()) + expect = "100% >##########<" + if strings.Index(result, expect) == -1 { + t.Errorf("Render miss-match\nResult: '%s'\nExpect: '%s'\n%+v", result, expect, bar) + } +} + +func TestOptionSetThemeFilled(t *testing.T) { + buf := strings.Builder{} + bar := NewOptions( + 10, + OptionSetTheme( + Theme{Saucer: "#", SaucerPadding: "-", + BarStart: ">", BarStartFilled: "]", + BarEnd: "<", BarEndFilled: "["}), + OptionSetWidth(10), + OptionSetWriter(&buf), + ) + bar.RenderBlank() result := strings.TrimSpace(buf.String()) - expect := "50% >#####-----< [0s:0s]" + expect := "0% >----------<" + if strings.Index(result, expect) == -1 { + t.Errorf("Render miss-match\nResult: '%s'\nExpect: '%s'\n%+v", result, expect, bar) + } + buf.Reset() + + bar.Add(5) + result = strings.TrimSpace(buf.String()) + expect = "50% ]#####-----< [0s:0s]" if result != expect { t.Errorf("Render miss-match\nResult: '%s'\nExpect: '%s'\n%+v", result, expect, bar) } + buf.Reset() + + bar.Finish() + result = strings.TrimSpace(buf.String()) + expect = "100% ]##########[" + if strings.Index(result, expect) == -1 { + t.Errorf("Render miss-match\nResult: '%s'\nExpect: '%s'\n%+v", result, expect, bar) + } } // TestOptionSetPredictTime ensures that when predict time is turned off, the progress