diff options
| -rw-r--r-- | src/pdf_view.zig | 9 | ||||
| -rw-r--r-- | test/pdf.zig | 14 |
2 files changed, 13 insertions, 10 deletions
diff --git a/src/pdf_view.zig b/src/pdf_view.zig index e435d777..6c137202 100644 --- a/src/pdf_view.zig +++ b/src/pdf_view.zig @@ -2008,11 +2008,16 @@ pub fn openSections(core: *pardes.Pardes, id: usize) void { const pane = core.panes[id] orelse return; const state = &(pane.pdf orelse return); if (rearmCleanSections(core, id, pane, state)) return; - const content = state.renderSections(core.pdf_gpa, core.gpa) catch return; + const content = state.renderSections(core.pdf_gpa, core.gpa) catch |err| return core.reportError(id, "PdfSections", err); + // No outline: said, not an empty pane to puzzle over. + if (content.len == 0) { + core.gpa.free(content); + return core.reportFailure(id, "PdfSections: this PDF has no outline"); + } const free = core.freeSlot() orelse { core.gpa.free(content); - return; + return core.reportError(id, "PdfSections", error.NoPaneSlots); }; const dir = std.fs.path.dirname(state.path) orelse "/"; const result = Output.open( diff --git a/test/pdf.zig b/test/pdf.zig index 36b3570e..2a18ca3c 100644 --- a/test/pdf.zig +++ b/test/pdf.zig @@ -364,7 +364,7 @@ test "PdfSections Look follows the exact owning PDF, not an equal path" { try std.testing.expectEqual(first_output_id, p.active); } -test "PdfSections caches an empty outline output" { +test "PdfSections on a PDF with no outline says so and opens nothing" { if (!pdf_enabled or platform == .web) return; const gpa = std.testing.allocator; var tmp = std.testing.tmpDir(.{}); @@ -376,14 +376,12 @@ test "PdfSections caches an empty outline output" { const path = try std.fmt.bufPrint(&path_buf, ".zig-cache/tmp/{s}/plain.pdf", .{tmp.sub_path}); const p = try Pardes.init(gpa, .{ .file = path }); defer p.deinit(); - panes.Pdf.openSections(p, 0); const pane = p.panes[0].?; - const output_id = pane.search_pane orelse return error.MissingEmptyPdfSections; - try std.testing.expectEqual(@as(usize, 0), p.panes[output_id].?.file.?.content.len); - const serial = p.panes[output_id].?.serial; - panes.Pdf.openSections(p, 0); - try std.testing.expectEqual(output_id, pane.search_pane.?); - try std.testing.expectEqual(serial, p.panes[output_id].?.serial); + for (0..2) |_| { + panes.Pdf.openSections(p, 0); + try std.testing.expect(pane.search_pane == null); + try std.testing.expectEqualStrings("PdfSections: this PDF has no outline", pane.msg[0..pane.msg_len]); + } } test "a look at a PDF's page past its last is a miss, never the last page" { |
