Named ranges, frozen panes and filters each make Write produce version 3; a sheet using none of them stays version 2 for older builds.
- commit
- bb438c31e3bfd3ce8e9823cf60c48c320fc57970
- parent
- 02f945fad2230bbc4686cf1365a736a3c2a09e1d
- author
- Dami <dami.etoile@gmail.com>
| A | internal/ | 48 | ++++++++++++++++++++++++++++++ |
@@ -0,0 +1,48 @@
1+package sheet2+3+import (4+ "bytes"5+ "strings"6+ "testing"7+)8+9+// 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.12+func 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+ named := base()31+ if err := named.DefineName("Items", NewRect(at("A1"), at("A2"))); err != nil {32+ t.Fatal(err)33+ }34+ filtered := base()35+ filtered.CreateFilter(NewRect(at("A1"), at("A2")))36+ frozen := base()37+ frozen.SetFrozen(1, 0)38+ for name, s := range map[string]*Sheet{"names": named, "filter": filtered, "freeze": frozen} {39+ if v := version(s); v != `"version": 3,` {40+ t.Errorf("%s: %s", name, v)41+ }42+ var b bytes.Buffer43+ s.Write(&b)44+ if _, err := Read(&b); err != nil {45+ t.Errorf("%s: reading back: %v", name, err)46+ }47+ }48+}