cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

main
012 / internal / sheet / hidden_test.go
hidden_test.go 2.8K
1package sheet23import (4 "bytes"5 "strings"6 "testing"7)89// Hiding a sheet keeps it in formulas, is one undo step each way, and10// the last visible sheet can't be hidden or deleted.11func TestHideSheet(t *testing.T) {12 w := bookOf(t,13 page{"Summary", map[string]string{"A1": "=Data!A1*2"}},14 page{"Data", map[string]string{"A1": "21"}},15 )16 data, summary := w.Lookup("Data"), w.Lookup("Summary")17 if err := w.HideSheet(data); err != nil {18 t.Fatal(err)19 }20 if !data.Hidden() || len(w.Visible()) != 1 || w.HiddenSheets()[0] != data {21 t.Fatalf("hidden %v, visible %d", data.Hidden(), len(w.Visible()))22 }23 if got := show(t, w, "Summary!A1"); got != "42" {24 t.Errorf("formula reading the hidden sheet = %s", got)25 }26 data.Set(at("A1"), "5")27 if got := show(t, w, "Summary!A1"); got != "10" {28 t.Errorf("after editing the hidden sheet = %s", got)29 }30 if err := w.HideSheet(summary); err != errLastVisible {31 t.Errorf("hiding the last visible sheet: %v", err)32 }33 if err := w.DeleteSheet(summary); err != errLastVisible {34 t.Errorf("deleting the last visible sheet: %v", err)35 }36 c, ok := w.Undo()37 if !ok || c.Label != "edit A1" {38 t.Fatalf("undo %+v", c)39 }40 c, ok = w.Undo()41 if !ok || c.Label != "hide sheet Data" || data.Hidden() {42 t.Fatalf("undo hide: %+v, hidden %v", c, data.Hidden())43 }44 w.Redo()45 if !data.Hidden() {46 t.Error("redo didn't hide")47 }48 if err := w.UnhideSheet(data); err != nil || data.Hidden() {49 t.Fatalf("unhide: %v", err)50 }51 if c, _ := w.Undo(); c.Label != "show sheet Data" || !data.Hidden() {52 t.Errorf("undo unhide: %+v", c)53 }54}5556// Hidden sheets are saved in an optional field; a file whose sheets are57// all hidden, or that was showing a hidden one, opens on a visible one.58func TestHiddenSheetFile(t *testing.T) {59 w := bookOf(t,60 page{"Summary", map[string]string{"A1": "=Data!A1*2"}},61 page{"Data", map[string]string{"A1": "21"}},62 )63 w.HideSheet(w.Lookup("Data"))64 var b bytes.Buffer65 if err := w.Write(&b); err != nil {66 t.Fatal(err)67 }68 out := b.String()69 if !strings.Contains(out, `"version": 4,`) || strings.Count(out, `"hidden": true`) != 1 ||70 !strings.Contains(out, "\"name\": \"Data\",\n \"hidden\": true,") {71 t.Fatalf("file:\n%s", out)72 }73 r, err := ReadBook(strings.NewReader(out))74 if err != nil {75 t.Fatal(err)76 }77 if !r.Lookup("Data").Hidden() || r.Lookup("Summary").Hidden() || show(t, r, "Summary!A1") != "42" {78 t.Errorf("read back: Data hidden %v", r.Lookup("Data").Hidden())79 }8081 all := strings.Replace(out, `"name": "Summary",`, `"name": "Summary", "hidden": true,`, 1)82 all = strings.Replace(all, `"sheets"`, `"active": 1, "sheets"`, 1)83 r, err = ReadBook(strings.NewReader(all))84 if err != nil {85 t.Fatal(err)86 }87 if r.Sheet(0).Hidden() || !r.Sheet(1).Hidden() || r.Active() != 0 {88 t.Errorf("every sheet hidden: first hidden %v, active %d", r.Sheet(0).Hidden(), r.Active())89 }90}