From 8a046c897e42e9459aa99377589c80c773601efc Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Tue, 15 Sep 2026 00:02:37 +0200 Subject: tests read real documents from LibreOffice and pandoc; antiword's short-document limit documented --- internal/extract/real_test.go | 57 +++++++++++++++++++++++++++++ internal/extract/testdata/real/book.epub | Bin 0 -> 4886 bytes internal/extract/testdata/real/doc.doc | Bin 0 -> 22528 bytes internal/extract/testdata/real/doc.docx | Bin 0 -> 6041 bytes internal/extract/testdata/real/doc.odt | Bin 0 -> 8506 bytes internal/extract/testdata/real/doc.pdf | Bin 0 -> 37442 bytes internal/extract/testdata/real/sheet.ods | Bin 0 -> 8686 bytes internal/extract/testdata/real/sheet.xls | Bin 0 -> 5632 bytes internal/extract/testdata/real/sheet.xlsx | Bin 0 -> 5538 bytes internal/extract/testdata/real/slides.pptx | Bin 0 -> 27659 bytes 10 files changed, 57 insertions(+) create mode 100644 internal/extract/real_test.go create mode 100644 internal/extract/testdata/real/book.epub create mode 100644 internal/extract/testdata/real/doc.doc create mode 100644 internal/extract/testdata/real/doc.docx create mode 100644 internal/extract/testdata/real/doc.odt create mode 100644 internal/extract/testdata/real/doc.pdf create mode 100644 internal/extract/testdata/real/sheet.ods create mode 100644 internal/extract/testdata/real/sheet.xls create mode 100644 internal/extract/testdata/real/sheet.xlsx create mode 100644 internal/extract/testdata/real/slides.pptx (limited to 'internal/extract') diff --git a/internal/extract/real_test.go b/internal/extract/real_test.go new file mode 100644 index 0000000..fd52f81 --- /dev/null +++ b/internal/extract/real_test.go @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package extract + +import ( + "os" + "path/filepath" + "strings" + "testing" +) + +// TestRealDocuments reads documents made by the programs people use - +// LibreOffice 25.2 (docx, odt, doc, pdf, ods, xlsx, xls) and pandoc (pptx, +// epub) - from invented text, not ones built by hand in a test (triage +// 34s). The zip formats always run; a format that needs an external tool +// runs when that tool is installed and is skipped otherwise. +func TestRealDocuments(t *testing.T) { + e := newWithPath(os.Getenv("PATH")) + found := map[string]bool{} + for _, tool := range e.Tools() { + found[tool.Name] = tool.Path != "" + } + for _, c := range []struct { + file string + tools []string // any one of them will do; none means Go reads it + want string + }{ + {"doc.docx", nil, "acme ltd"}, + {"doc.odt", nil, "acme ltd"}, + {"sheet.ods", nil, "acme ltd"}, + {"sheet.xlsx", nil, "acme ltd"}, + {"slides.pptx", nil, "acme ltd"}, + {"book.epub", nil, "acme ltd"}, + {"doc.pdf", []string{"pdftotext"}, "acme ltd"}, + {"doc.doc", []string{"antiword", "catdoc"}, "acme ltd"}, + {"sheet.xls", []string{"xls2csv"}, "acme ltd"}, + } { + t.Run(c.file, func(t *testing.T) { + if len(c.tools) > 0 { + ok := false + for _, tool := range c.tools { + ok = ok || found[tool] + } + if !ok { + t.Skipf("none of %v installed", c.tools) + } + } + got, err := text(t, e, filepath.Join("testdata", "real", c.file), 0) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(got, c.want) { + t.Errorf("text of %s lacks %q:\n%q", c.file, c.want, got) + } + }) + } +} diff --git a/internal/extract/testdata/real/book.epub b/internal/extract/testdata/real/book.epub new file mode 100644 index 0000000..741b3a7 Binary files /dev/null and b/internal/extract/testdata/real/book.epub differ diff --git a/internal/extract/testdata/real/doc.doc b/internal/extract/testdata/real/doc.doc new file mode 100644 index 0000000..8520659 Binary files /dev/null and b/internal/extract/testdata/real/doc.doc differ diff --git a/internal/extract/testdata/real/doc.docx b/internal/extract/testdata/real/doc.docx new file mode 100644 index 0000000..7bc9d04 Binary files /dev/null and b/internal/extract/testdata/real/doc.docx differ diff --git a/internal/extract/testdata/real/doc.odt b/internal/extract/testdata/real/doc.odt new file mode 100644 index 0000000..d3d287e Binary files /dev/null and b/internal/extract/testdata/real/doc.odt differ diff --git a/internal/extract/testdata/real/doc.pdf b/internal/extract/testdata/real/doc.pdf new file mode 100644 index 0000000..b46e40e Binary files /dev/null and b/internal/extract/testdata/real/doc.pdf differ diff --git a/internal/extract/testdata/real/sheet.ods b/internal/extract/testdata/real/sheet.ods new file mode 100644 index 0000000..0bb783a Binary files /dev/null and b/internal/extract/testdata/real/sheet.ods differ diff --git a/internal/extract/testdata/real/sheet.xls b/internal/extract/testdata/real/sheet.xls new file mode 100644 index 0000000..ee64a9d Binary files /dev/null and b/internal/extract/testdata/real/sheet.xls differ diff --git a/internal/extract/testdata/real/sheet.xlsx b/internal/extract/testdata/real/sheet.xlsx new file mode 100644 index 0000000..9788970 Binary files /dev/null and b/internal/extract/testdata/real/sheet.xlsx differ diff --git a/internal/extract/testdata/real/slides.pptx b/internal/extract/testdata/real/slides.pptx new file mode 100644 index 0000000..5ee037c Binary files /dev/null and b/internal/extract/testdata/real/slides.pptx differ -- cgit v1.3