Skip to content

Commit 44e659f

Browse files
committed
refactor(pager): follow common conventions + add more tests
Also, introduce `DWARFS_PAGER`. This avoids messing with `PAGER` by randomly appending `-R`, but rather sets `LESS` options, unless set by the user. Also, this now uses the standard execute-via-sh approach on POSIX and only implements command parsing on Windows.
1 parent a48a1dd commit 44e659f

10 files changed

Lines changed: 875 additions & 193 deletions

File tree

CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -821,9 +821,11 @@ if(WITH_TESTS)
821821
find_program(DWARFSEXTRACT_EXE NAMES dwarfsextract dwarfsextract.exe)
822822
endif()
823823
if(WITH_TOOLS OR (MKDWARFS_EXE AND DWARFSCK_EXE AND DWARFSEXTRACT_EXE))
824-
list(APPEND DWARFS_TESTS
825-
tools_test
826-
)
824+
list(APPEND DWARFS_TESTS tools_test)
825+
if(WITH_MAN_OPTION)
826+
list(APPEND DWARFS_TESTS pager_test)
827+
add_executable(pager_test_helper test/pager_test_helper.cpp)
828+
endif()
827829
endif()
828830
endif()
829831

cmake/libdwarfs_tool.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ if(WITH_MAN_OPTION)
4949
tools/src/tool/pager.cpp
5050
tools/src/tool/render_manpage.cpp
5151
)
52+
if(WIN32)
53+
target_sources(dwarfs_tool PRIVATE
54+
tools/src/tool/internal/pager_command_line.cpp
55+
)
56+
endif()
5257
endif()
5358

5459
target_link_libraries(dwarfs_tool PUBLIC dwarfs_common Boost::program_options)

test/manpage_test.cpp

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -236,92 +236,3 @@ TEST_P(manpage_coverage_test, options) {
236236

237237
INSTANTIATE_TEST_SUITE_P(dwarfs, manpage_coverage_test,
238238
::testing::ValuesIn(coverage_tests));
239-
240-
TEST(pager_test, find_pager_program) {
241-
auto resolver = [](std::filesystem::path const& name) {
242-
std::map<std::string, std::filesystem::path> const programs = {
243-
{"less", "/whatever/bin/less"},
244-
{"more", "/somewhere/bin/more"},
245-
{"cat", "/bin/cat"},
246-
};
247-
for (auto const& [n, p] : programs) {
248-
if (name == n || name == p) {
249-
return p;
250-
}
251-
}
252-
return std::filesystem::path{};
253-
};
254-
255-
{
256-
test::os_access_mock os;
257-
os.set_executable_resolver(
258-
[](std::filesystem::path const&) { return std::filesystem::path{}; });
259-
260-
{
261-
auto pager = find_pager_program(os);
262-
ASSERT_FALSE(pager);
263-
}
264-
265-
os.set_executable_resolver(resolver);
266-
267-
{
268-
auto pager = find_pager_program(os);
269-
ASSERT_TRUE(pager);
270-
EXPECT_EQ("/whatever/bin/less", pager->name);
271-
EXPECT_EQ(std::vector<std::string>({"-R"}), pager->args);
272-
}
273-
274-
{
275-
auto pager = find_pager_program(os);
276-
ASSERT_TRUE(pager);
277-
EXPECT_EQ("/whatever/bin/less", pager->name);
278-
EXPECT_EQ(std::vector<std::string>({"-R"}), pager->args);
279-
}
280-
281-
os.set_access_fail("more");
282-
os.set_access_fail("less");
283-
284-
os.setenv("PAGER", "more");
285-
286-
{
287-
auto pager = find_pager_program(os);
288-
ASSERT_TRUE(pager);
289-
EXPECT_EQ("/somewhere/bin/more", pager->name);
290-
EXPECT_TRUE(pager->args.empty());
291-
}
292-
293-
os.setenv("PAGER", "less");
294-
295-
{
296-
auto pager = find_pager_program(os);
297-
ASSERT_TRUE(pager);
298-
EXPECT_EQ("/whatever/bin/less", pager->name);
299-
EXPECT_THAT(pager->args, ::testing::ElementsAre("-R"));
300-
}
301-
302-
os.setenv("PAGER", "cat");
303-
304-
{
305-
auto pager = find_pager_program(os);
306-
ASSERT_FALSE(pager);
307-
}
308-
309-
os.setenv("PAGER", "/bla/foo");
310-
311-
{
312-
auto pager = find_pager_program(os);
313-
ASSERT_TRUE(pager);
314-
EXPECT_EQ("/bla/foo", pager->name);
315-
EXPECT_TRUE(pager->args.empty());
316-
}
317-
318-
os.setenv("PAGER", R"("/bla/foo")");
319-
320-
{
321-
auto pager = find_pager_program(os);
322-
ASSERT_TRUE(pager);
323-
EXPECT_EQ("/bla/foo", pager->name);
324-
EXPECT_TRUE(pager->args.empty());
325-
}
326-
}
327-
}

0 commit comments

Comments
 (0)