mirror of
https://github.com/restic/restic.git
synced 2025-12-11 18:47:50 +00:00
restore: print JSON versions of errors in --json mode
Previously, they were printed as freeform text. This also adds a ui.Terminal interface to make writing tests easier and also adds a few tests.
This commit is contained in:
@@ -4,23 +4,13 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/restic/restic/internal/errors"
|
||||
"github.com/restic/restic/internal/test"
|
||||
"github.com/restic/restic/internal/ui"
|
||||
)
|
||||
|
||||
type mockTerm struct {
|
||||
output []string
|
||||
}
|
||||
|
||||
func (m *mockTerm) Print(line string) {
|
||||
m.output = append(m.output, line)
|
||||
}
|
||||
|
||||
func (m *mockTerm) SetStatus(lines []string) {
|
||||
m.output = append([]string{}, lines...)
|
||||
}
|
||||
|
||||
func createTextProgress() (*mockTerm, ProgressPrinter) {
|
||||
term := &mockTerm{}
|
||||
func createTextProgress() (*ui.MockTerminal, ProgressPrinter) {
|
||||
term := &ui.MockTerminal{}
|
||||
printer := NewTextProgress(term, 3)
|
||||
return term, printer
|
||||
}
|
||||
@@ -28,31 +18,31 @@ func createTextProgress() (*mockTerm, ProgressPrinter) {
|
||||
func TestPrintUpdate(t *testing.T) {
|
||||
term, printer := createTextProgress()
|
||||
printer.Update(State{3, 11, 0, 29, 47, 0}, 5*time.Second)
|
||||
test.Equals(t, []string{"[0:05] 61.70% 3 files/dirs 29 B, total 11 files/dirs 47 B"}, term.output)
|
||||
test.Equals(t, []string{"[0:05] 61.70% 3 files/dirs 29 B, total 11 files/dirs 47 B"}, term.Output)
|
||||
}
|
||||
|
||||
func TestPrintUpdateWithSkipped(t *testing.T) {
|
||||
term, printer := createTextProgress()
|
||||
printer.Update(State{3, 11, 2, 29, 47, 59}, 5*time.Second)
|
||||
test.Equals(t, []string{"[0:05] 61.70% 3 files/dirs 29 B, total 11 files/dirs 47 B, skipped 2 files/dirs 59 B"}, term.output)
|
||||
test.Equals(t, []string{"[0:05] 61.70% 3 files/dirs 29 B, total 11 files/dirs 47 B, skipped 2 files/dirs 59 B"}, term.Output)
|
||||
}
|
||||
|
||||
func TestPrintSummaryOnSuccess(t *testing.T) {
|
||||
term, printer := createTextProgress()
|
||||
printer.Finish(State{11, 11, 0, 47, 47, 0}, 5*time.Second)
|
||||
test.Equals(t, []string{"Summary: Restored 11 files/dirs (47 B) in 0:05"}, term.output)
|
||||
test.Equals(t, []string{"Summary: Restored 11 files/dirs (47 B) in 0:05"}, term.Output)
|
||||
}
|
||||
|
||||
func TestPrintSummaryOnErrors(t *testing.T) {
|
||||
term, printer := createTextProgress()
|
||||
printer.Finish(State{3, 11, 0, 29, 47, 0}, 5*time.Second)
|
||||
test.Equals(t, []string{"Summary: Restored 3 / 11 files/dirs (29 B / 47 B) in 0:05"}, term.output)
|
||||
test.Equals(t, []string{"Summary: Restored 3 / 11 files/dirs (29 B / 47 B) in 0:05"}, term.Output)
|
||||
}
|
||||
|
||||
func TestPrintSummaryOnSuccessWithSkipped(t *testing.T) {
|
||||
term, printer := createTextProgress()
|
||||
printer.Finish(State{11, 11, 2, 47, 47, 59}, 5*time.Second)
|
||||
test.Equals(t, []string{"Summary: Restored 11 files/dirs (47 B) in 0:05, skipped 2 files/dirs 59 B"}, term.output)
|
||||
test.Equals(t, []string{"Summary: Restored 11 files/dirs (47 B) in 0:05, skipped 2 files/dirs 59 B"}, term.Output)
|
||||
}
|
||||
|
||||
func TestPrintCompleteItem(t *testing.T) {
|
||||
@@ -70,6 +60,12 @@ func TestPrintCompleteItem(t *testing.T) {
|
||||
} {
|
||||
term, printer := createTextProgress()
|
||||
printer.CompleteItem(data.action, "test", data.size)
|
||||
test.Equals(t, []string{data.expected}, term.output)
|
||||
test.Equals(t, []string{data.expected}, term.Output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestError(t *testing.T) {
|
||||
term, printer := createTextProgress()
|
||||
test.Equals(t, printer.Error("/path", errors.New("error \"message\"")), nil)
|
||||
test.Equals(t, []string{"ignoring error for /path: error \"message\"\n"}, term.Errors)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user