cat / 012
clone

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

cat/module-path
012 / internal / sheet / file_version_test.go
file_version_test.go 1.6K
1package sheet23import (4 "bytes"5 "strings"6 "testing"7)89// A sheet is written as version 3 only when it uses something version 310// added (named ranges, frozen panes, a filter), so older builds can still11// open everything else.12func TestFileVersionFollowsFeatures(t *testing.T) {13 version := func(s *Sheet) string {14 var b bytes.Buffer15 if err := s.Write(&b); err != nil {16 t.Fatal(err)17 }18 first := strings.SplitN(b.String(), "\n", 3)[1]19 return strings.TrimSpace(first)20 }21 base := func() *Sheet {22 s := New()23 s.Set(at("A1"), "Item")24 s.Set(at("A2"), "Rent")25 return s26 }27 if v := version(base()); v != `"version": 2,` {28 t.Errorf("plain sheet: %s", v)29 }30 // Wrapping, borders, heights and merges are fields older builds31 // ignore: no new version.32 laidOut := base()33 laidOut.SetStyle(NewRect(at("A1"), at("A1")), func(st *Style) { st.Wrap = WrapOn })34 laidOut.SetBorders(NewRect(at("A1"), at("B2")), BorderAll, LineDouble)35 laidOut.SetRowHeight(0, 0, 3)36 laidOut.Merge(NewRect(at("B1"), at("C1")), MergeAll)37 if v := version(laidOut); v != `"version": 2,` {38 t.Errorf("laid out sheet: %s", v)39 }40 named := base()41 if err := named.DefineName("Items", NewRect(at("A1"), at("A2"))); err != nil {42 t.Fatal(err)43 }44 filtered := base()45 filtered.CreateFilter(NewRect(at("A1"), at("A2")))46 frozen := base()47 frozen.SetFrozen(1, 0)48 for name, s := range map[string]*Sheet{"names": named, "filter": filtered, "freeze": frozen} {49 if v := version(s); v != `"version": 3,` {50 t.Errorf("%s: %s", name, v)51 }52 var b bytes.Buffer53 s.Write(&b)54 if _, err := Read(&b); err != nil {55 t.Errorf("%s: reading back: %v", name, err)56 }57 }58}