1package headless23import (4 "database/sql"5 "os"6 "path/filepath"7 "testing"89 "src.rest/cat/012/internal/sheet"10)1112func TestOpenReadsSources(t *testing.T) {13 dir := t.TempDir()14 db, err := sql.Open("sqlite", filepath.Join(dir, "n.sqlite"))15 if err != nil {16 t.Fatal(err)17 }18 for _, q := range []string{"CREATE TABLE n (x INTEGER)", "WITH RECURSIVE c(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM c WHERE i < 100) INSERT INTO n SELECT i FROM c"} {19 if _, err := db.Exec(q); err != nil {20 t.Fatal(err)21 }22 }23 db.Close()24 w := sheet.NewBook()25 s := w.Sheet(0)26 if _, err := w.AddSource("n", sheet.LinkSource{Path: "n.sqlite", Table: "n"}, s); err != nil {27 t.Fatal(err)28 }29 if _, err := w.AddSource("far", sheet.LinkSource{Path: "../far.sqlite"}, s); err != nil {30 t.Fatal(err)31 }32 s.Set(sheet.Addr{}, "=SUM(n[x])")33 s.Set(sheet.Addr{Row: 1}, "=ROWS(far)")34 path := filepath.Join(dir, "book.012")35 out, err := os.Create(path)36 if err != nil {37 t.Fatal(err)38 }39 if err := w.Write(out); err != nil {40 t.Fatal(err)41 }42 out.Close()43 f, err := Open(path, false)44 if err != nil {45 t.Fatal(err)46 }47 got := f.Book.Sheet(0)48 if v := got.Value(sheet.Addr{}); v.Num != 5050 {49 t.Errorf("SUM over the source: %v", v)50 }51 if why := got.ExplainError(sheet.Addr{Row: 1}); why != "far: Not read: outside the workbook's folder" {52 t.Errorf("a source outside the folder: %q", why)53 }54}