Skip to content

Commit 40a6a4b

Browse files
committed
test
1 parent f3fedfe commit 40a6a4b

10 files changed

Lines changed: 43 additions & 18 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ option(ODR_CLI "enable command line interface" ON)
1616
option(ODR_CLANG_TIDY "Run clang-tidy static analysis" OFF)
1717
option(WITH_PDF2HTMLEX "Build with pdf2htmlEX" ON)
1818
option(WITH_WVWARE "Build with wvWare" ON)
19+
option(WITH_LIBMAGIC "Build with libmagic" ON)
1920

2021
# TODO defining global compiler flags seems to be bad practice with conan
2122
# TODO consider using conan profiles

conanfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def generate(self):
8282
for dep in deps:
8383
runenv_info.compose_env(dep.runenv_info)
8484
envvars = runenv_info.vars(self)
85-
for v in ["PDF2HTMLEX_DATA_DIR", "POPPLER_DATA_DIR", "FONTCONFIG_PATH", "WVDATADIR"]:
85+
for v in ["PDF2HTMLEX_DATA_DIR", "POPPLER_DATA_DIR", "FONTCONFIG_PATH", "WVDATADIR", "MAGIC"]:
8686
tc.variables[v] = envvars.get(v)
8787

8888
tc.generate()

src/odr/global_params.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ const std::string &GlobalParams::pdf2htmlex_data_path() {
4141
return instance().m_pdf2htmlex_data_path;
4242
}
4343

44-
const std::string &GlobalParams::libmagic_data_path() {
45-
return instance().m_libmagic_data_path;
44+
const std::string &GlobalParams::libmagic_path() {
45+
return instance().m_libmagic_path;
4646
}
4747

4848
void GlobalParams::set_odr_core_data_path(const std::string &path) {
@@ -66,15 +66,15 @@ void GlobalParams::set_pdf2htmlex_data_path(const std::string &path) {
6666
instance().m_pdf2htmlex_data_path = path;
6767
}
6868

69-
void GlobalParams::set_libmagic_data_path(const std::string &path) {
70-
instance().m_libmagic_data_path = path;
69+
void GlobalParams::set_libmagic_path(const std::string &path) {
70+
instance().m_libmagic_path = path;
7171
}
7272

7373
GlobalParams::GlobalParams()
7474
: m_odr_core_data_path{internal::project_info::odr_data_path()},
7575
m_fontconfig_data_path{internal::project_info::fontconfig_data_path()},
7676
m_poppler_data_path{internal::project_info::poppler_data_path()},
7777
m_pdf2htmlex_data_path{internal::project_info::pdf2htmlex_data_path()},
78-
m_libmagic_data_path{internal::project_info::libmagic_data_path()} {}
78+
m_libmagic_path{internal::project_info::libmagic_path()} {}
7979

8080
} // namespace odr

src/odr/global_params.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ class GlobalParams {
1010
static const std::string &fontconfig_data_path();
1111
static const std::string &poppler_data_path();
1212
static const std::string &pdf2htmlex_data_path();
13-
static const std::string &libmagic_data_path();
13+
static const std::string &libmagic_path();
1414

1515
static void set_odr_core_data_path(const std::string &path);
1616
static void set_fontconfig_data_path(const std::string &path);
1717
static void set_poppler_data_path(const std::string &path);
1818
static void set_pdf2htmlex_data_path(const std::string &path);
19-
static void set_libmagic_data_path(const std::string &path);
19+
static void set_libmagic_path(const std::string &path);
2020

2121
private:
2222
static GlobalParams &instance();
@@ -27,7 +27,7 @@ class GlobalParams {
2727
std::string m_fontconfig_data_path;
2828
std::string m_poppler_data_path;
2929
std::string m_pdf2htmlex_data_path;
30-
std::string m_libmagic_data_path;
30+
std::string m_libmagic_path;
3131
};
3232

3333
} // namespace odr

src/odr/internal/libmagic/libmagic.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ magic_t get_magic_cookie() {
2929
if (!magic_cookie) {
3030
throw std::runtime_error("magic_open failed");
3131
}
32-
if (magic_load(magic_cookie.get(),
33-
GlobalParams::libmagic_data_path().c_str()) == 0) {
32+
if (magic_load(magic_cookie.get(), GlobalParams::libmagic_path().c_str()) ==
33+
0) {
3434
return magic_cookie.get();
3535
}
3636
if (magic_load(magic_cookie.get(), nullptr) == 0) {
@@ -42,7 +42,7 @@ magic_t get_magic_cookie() {
4242

4343
} // namespace
4444

45-
const char *libmagic::mime_type(const std::string &path) {
45+
const char *libmagic::mimetype(const std::string &path) {
4646
const magic_t magic_cookie = get_magic_cookie();
4747
return magic_file(magic_cookie, path.c_str());
4848
}

src/odr/internal/libmagic/libmagic.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
#include <string>
44

55
namespace odr::internal::libmagic {
6-
const char *mime_type(const std::string &path);
6+
const char *mimetype(const std::string &path);
77
}

src/odr/internal/magic.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ FileType magic::file_type(const File &file) {
8989
}
9090

9191
std::string_view magic::mimetype(const std::string &path) {
92-
#ifdef ODR_USE_LIBMAGIC
93-
return libmagic::mime_type(path);
92+
#ifdef ODR_WITH_LIBMAGIC
93+
return libmagic::mimetype(path);
9494
#else
9595
return odr::mimetype_by_file_type(magic::file_type(path));
9696
#endif

src/odr/internal/project_info.cpp.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ const char *project_info::pdf2htmlex_data_path() noexcept{
5252
return "${PDF2HTMLEX_DATA_DIR}";
5353
}
5454

55-
const char *project_info::libmagic_data_path() noexcept{
56-
return "${LIBMAGIC_DATA_DIR}";
55+
const char *project_info::libmagic_path() noexcept{
56+
return "${MAGIC}";
5757
}
5858

5959
} // namespace odr::internal

src/odr/internal/project_info.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ const char *odr_data_path() noexcept;
1313
const char *fontconfig_data_path() noexcept;
1414
const char *poppler_data_path() noexcept;
1515
const char *pdf2htmlex_data_path() noexcept;
16-
const char *libmagic_data_path() noexcept;
16+
const char *libmagic_path() noexcept;
1717

1818
} // namespace odr::internal::project_info

test/src/internal/magic_test.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <odr/file.hpp>
22

33
#include <odr/internal/magic.hpp>
4+
#include <odr/internal/project_info.hpp>
45

56
#include <test_util.hpp>
67

@@ -13,26 +14,49 @@ using namespace odr::test;
1314
TEST(magic, odt) {
1415
const File file(TestData::test_file_path("odr-public/odt/about.odt"));
1516
EXPECT_EQ(magic::file_type(*file.impl()), FileType::zip);
17+
18+
if (project_info::has_libmagic()) {
19+
EXPECT_EQ(magic::mimetype(file.disk_path().value()),
20+
"application/vnd.oasis.opendocument.text");
21+
}
1622
}
1723

1824
TEST(magic, doc) {
1925
const File file(TestData::test_file_path("odr-public/doc/empty.doc"));
2026
EXPECT_EQ(magic::file_type(*file.impl()),
2127
FileType::compound_file_binary_format);
28+
29+
if (project_info::has_libmagic()) {
30+
EXPECT_EQ(magic::mimetype(file.disk_path().value()), "application/msword");
31+
}
2232
}
2333

2434
TEST(magic, svm) {
2535
const File file(TestData::test_file_path("odr-public/svm/chart-1.svm"));
2636
EXPECT_EQ(magic::file_type(*file.impl()), FileType::starview_metafile);
37+
38+
if (project_info::has_libmagic()) {
39+
EXPECT_EQ(magic::mimetype(file.disk_path().value()),
40+
"application/octet-stream");
41+
}
2742
}
2843

2944
TEST(magic, odf) {
3045
const File file(TestData::test_file_path("odr-private/pdf/sample.pdf"));
3146
EXPECT_EQ(magic::file_type(*file.impl()), FileType::portable_document_format);
47+
48+
if (project_info::has_libmagic()) {
49+
EXPECT_EQ(magic::mimetype(file.disk_path().value()), "application/pdf");
50+
}
3251
}
3352

3453
TEST(magic, wpd) {
3554
const File file(
3655
TestData::test_file_path("odr-public/wpd/Sync3 Sample Page.wpd"));
3756
EXPECT_EQ(magic::file_type(*file.impl()), FileType::word_perfect);
57+
58+
if (project_info::has_libmagic()) {
59+
EXPECT_EQ(magic::mimetype(file.disk_path().value()),
60+
"application/vnd.wordperfect");
61+
}
3862
}

0 commit comments

Comments
 (0)