aboutsummaryrefslogtreecommitdiffstats
path: root/libtests
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-06-18 19:38:36 +0200
committerJay Berkenbilt <ejb@ql.org>2022-06-19 14:46:58 +0200
commit8130d50e3b5aa0235a133c3c5a3018ac01afb5e1 (patch)
tree461c961df0299707b628f4fa6a41539fafa2d193 /libtests
parentdaef4e8fb856e84e2a9151cd7715a941a0ae9c6c (diff)
downloadqpdf-8130d50e3b5aa0235a133c3c5a3018ac01afb5e1.tar.zst
Add C API to QPDFLogger
Diffstat (limited to 'libtests')
-rw-r--r--libtests/CMakeLists.txt8
-rw-r--r--libtests/logger.cc6
-rw-r--r--libtests/logger_c.c108
-rw-r--r--libtests/qtest/logger.test16
-rw-r--r--libtests/qtest/logger/2pages.pdfbin0 -> 1287 bytes
-rw-r--r--libtests/qtest/logger/attach.pdfbin0 -> 1290 bytes
-rw-r--r--libtests/qtest/logger/c-exp-error1
-rw-r--r--libtests/qtest/logger/c-exp-info2
-rw-r--r--libtests/qtest/logger/c-exp-savebin0 -> 799 bytes
-rw-r--r--libtests/qtest/logger/c-exp-save22
-rw-r--r--libtests/qtest/logger/c-exp-stderr3
-rw-r--r--libtests/qtest/logger/c-exp-stdout4
-rw-r--r--libtests/qtest/logger/c-exp-warn4
-rw-r--r--libtests/qtest/logger/normal.pdf79
-rw-r--r--libtests/qtest/logger/warning.pdf79
15 files changed, 307 insertions, 5 deletions
diff --git a/libtests/CMakeLists.txt b/libtests/CMakeLists.txt
index 196cd3eb..62ba390e 100644
--- a/libtests/CMakeLists.txt
+++ b/libtests/CMakeLists.txt
@@ -33,10 +33,18 @@ set(TEST_PROGRAMS
runlength
sha2
sparse_array)
+set(TEST_C_PROGRAMS
+ logger_c)
+
foreach(PROG ${TEST_PROGRAMS})
add_executable(${PROG} ${PROG}.cc)
target_link_libraries(${PROG} libqpdf_object)
endforeach()
+foreach(PROG ${TEST_C_PROGRAMS})
+ add_executable(${PROG} ${PROG}.c)
+ target_link_libraries(${PROG} libqpdf_object)
+ set_property(TARGET ${PROG} PROPERTY LINKER_LANGUAGE CXX)
+endforeach()
# Since libtests link with the object library and don't use the DLL,
# we don't need to (and shouldn't) add the libqpdf target directory to
diff --git a/libtests/logger.cc b/libtests/logger.cc
index f10319f6..b968422e 100644
--- a/libtests/logger.cc
+++ b/libtests/logger.cc
@@ -22,7 +22,7 @@ test1()
*(logger->getInfo()) << "getSave exception: " << e.what() << "\n";
}
try {
- logger->saveToStandardOutput();
+ logger->saveToStandardOutput(true);
assert(false);
} catch (std::logic_error& e) {
*(logger->getInfo())
@@ -40,12 +40,12 @@ test2()
// First call saveToStandardOutput. Then use info, which then to
// go stderr.
QPDFLogger l;
- l.saveToStandardOutput();
+ l.saveToStandardOutput(true);
l.info(std::string("info to stderr\n"));
*(l.getSave()) << "save to stdout\n";
l.setInfo(nullptr);
l.info("info still to stderr\n");
- l.setSave(nullptr);
+ l.setSave(nullptr, false);
l.setInfo(nullptr);
l.info("info back to stdout\n");
}
diff --git a/libtests/logger_c.c b/libtests/logger_c.c
new file mode 100644
index 00000000..94815601
--- /dev/null
+++ b/libtests/logger_c.c
@@ -0,0 +1,108 @@
+#include <qpdf/assert_test.h>
+
+#include <qpdf/qpdflogger-c.h>
+
+#include <qpdf/Constants.h>
+#include <qpdf/qpdfjob-c.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static void
+fn(char const* data, size_t len, void* udata)
+{
+ FILE* f = (FILE*)udata;
+ fwrite(data, 1, len, f);
+}
+
+static void
+do_run(char const* json, int exp_status)
+{
+ int status = qpdfjob_run_from_json(json);
+ assert(status == exp_status);
+}
+
+static FILE*
+do_fopen(char const* filename)
+{
+ FILE* f = NULL;
+#ifdef _MSC_VER
+ if (fopen_s(&f, filename, "wb") != 0) {
+ f = NULL;
+ }
+#else
+ f = fopen(filename, "wb");
+#endif
+ if (f == NULL) {
+ fprintf(stderr, "unable to open %s\n", filename);
+ exit(2);
+ }
+ return f;
+}
+
+int
+main()
+{
+ FILE* info = do_fopen("info");
+ FILE* warn = do_fopen("warn");
+ FILE* error = do_fopen("error");
+ FILE* save = do_fopen("save");
+ FILE* save2 = do_fopen("save2");
+ qpdflogger_handle l = qpdflogger_default_logger();
+
+ qpdflogger_set_info(l, qpdf_log_dest_custom, fn, (void*)info);
+ qpdflogger_set_warn(l, qpdf_log_dest_custom, fn, (void*)warn);
+ qpdflogger_set_error(l, qpdf_log_dest_custom, fn, (void*)error);
+ qpdflogger_set_save(l, qpdf_log_dest_custom, fn, (void*)save, 0);
+
+ do_run(
+ "{\"inputFile\": \"normal.pdf\", \"showNpages\": \"\"}",
+ qpdf_exit_success);
+ do_run(
+ "{\"inputFile\": \"warning.pdf\", \"showNpages\": \"\"}",
+ qpdf_exit_warning);
+ do_run(
+ "{\"inputFile\": \"missing.pdf\", \"showNpages\": \"\"}",
+ qpdf_exit_error);
+ do_run(
+ "{\"inputFile\": \"normal.pdf\","
+ " \"staticId\": \"\","
+ " \"outputFile\": \"-\"}",
+ qpdf_exit_success);
+
+ fclose(info);
+ fclose(warn);
+ fclose(error);
+ fclose(save);
+
+ qpdflogger_set_info(l, qpdf_log_dest_stderr, NULL, NULL);
+ qpdflogger_set_warn(l, qpdf_log_dest_stdout, NULL, NULL);
+ qpdflogger_set_error(l, qpdf_log_dest_default, NULL, NULL);
+ qpdflogger_set_save(l, qpdf_log_dest_custom, fn, (void*)save2, 0);
+
+ do_run(
+ "{\"inputFile\": \"2pages.pdf\", \"showNpages\": \"\"}",
+ qpdf_exit_success);
+ do_run(
+ "{\"inputFile\": \"warning.pdf\", \"showNpages\": \"\"}",
+ qpdf_exit_warning);
+ do_run(
+
+ "{\"inputFile\": \"missing.pdf\", \"showNpages\": \"\"}",
+ qpdf_exit_error);
+ do_run(
+ "{\"inputFile\": \"attach.pdf\","
+ " \"showAttachment\": \"a\"}",
+ qpdf_exit_success);
+
+ /* This won't change save since it's already set */
+ qpdflogger_save_to_standard_output(l, 1);
+ do_run(
+ "{\"inputFile\": \"attach.pdf\","
+ " \"showAttachment\": \"a\"}",
+ qpdf_exit_success);
+
+ qpdflogger_cleanup(&l);
+
+ return 0;
+}
diff --git a/libtests/qtest/logger.test b/libtests/qtest/logger.test
index 86767eff..786af4fb 100644
--- a/libtests/qtest/logger.test
+++ b/libtests/qtest/logger.test
@@ -24,10 +24,22 @@ $td->runtest("check stderr",
{$td->FILE => "exp-stderr"},
$td->NORMALIZE_NEWLINES);
+$td->runtest("logger C API",
+ {$td->COMMAND => "logger_c >stdout 2>stderr"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+foreach my $f (qw(stdout stderr info warn error save save2))
+{
+ $td->runtest("check $f (C)",
+ {$td->FILE => "$f"},
+ {$td->FILE => "c-exp-$f"},
+ $td->NORMALIZE_NEWLINES);
+}
+
cleanup();
-$td->report(3);
+$td->report(11);
sub cleanup
{
- unlink "stdout", "stderr";
+ unlink "stdout", "stderr", "info", "warn", "error", "save", "save2";
}
diff --git a/libtests/qtest/logger/2pages.pdf b/libtests/qtest/logger/2pages.pdf
new file mode 100644
index 00000000..f3e1700d
--- /dev/null
+++ b/libtests/qtest/logger/2pages.pdf
Binary files differ
diff --git a/libtests/qtest/logger/attach.pdf b/libtests/qtest/logger/attach.pdf
new file mode 100644
index 00000000..bbc09588
--- /dev/null
+++ b/libtests/qtest/logger/attach.pdf
Binary files differ
diff --git a/libtests/qtest/logger/c-exp-error b/libtests/qtest/logger/c-exp-error
new file mode 100644
index 00000000..8e33a38a
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-error
@@ -0,0 +1 @@
+qpdfjob json: open missing.pdf: No such file or directory
diff --git a/libtests/qtest/logger/c-exp-info b/libtests/qtest/logger/c-exp-info
new file mode 100644
index 00000000..6ed281c7
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-info
@@ -0,0 +1,2 @@
+1
+1
diff --git a/libtests/qtest/logger/c-exp-save b/libtests/qtest/logger/c-exp-save
new file mode 100644
index 00000000..b8c692ed
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-save
Binary files differ
diff --git a/libtests/qtest/logger/c-exp-save2 b/libtests/qtest/logger/c-exp-save2
new file mode 100644
index 00000000..3d1fe696
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-save2
@@ -0,0 +1,2 @@
+quack
+quack
diff --git a/libtests/qtest/logger/c-exp-stderr b/libtests/qtest/logger/c-exp-stderr
new file mode 100644
index 00000000..bfbb2cff
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-stderr
@@ -0,0 +1,3 @@
+2
+1
+qpdfjob json: open missing.pdf: No such file or directory
diff --git a/libtests/qtest/logger/c-exp-stdout b/libtests/qtest/logger/c-exp-stdout
new file mode 100644
index 00000000..e7566de7
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-stdout
@@ -0,0 +1,4 @@
+WARNING: warning.pdf: file is damaged
+WARNING: warning.pdf (offset 1556): xref not found
+WARNING: warning.pdf: Attempting to reconstruct cross-reference table
+qpdfjob json: operation succeeded with warnings
diff --git a/libtests/qtest/logger/c-exp-warn b/libtests/qtest/logger/c-exp-warn
new file mode 100644
index 00000000..e7566de7
--- /dev/null
+++ b/libtests/qtest/logger/c-exp-warn
@@ -0,0 +1,4 @@
+WARNING: warning.pdf: file is damaged
+WARNING: warning.pdf (offset 1556): xref not found
+WARNING: warning.pdf: Attempting to reconstruct cross-reference table
+qpdfjob json: operation succeeded with warnings
diff --git a/libtests/qtest/logger/normal.pdf b/libtests/qtest/logger/normal.pdf
new file mode 100644
index 00000000..a7e01f91
--- /dev/null
+++ b/libtests/qtest/logger/normal.pdf
@@ -0,0 +1,79 @@
+%PDF-1.3
+1 0 obj
+<<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+endobj
+
+2 0 obj
+<<
+ /Type /Pages
+ /Kids [
+ 3 0 R
+ ]
+ /Count 1
+>>
+endobj
+
+3 0 obj
+<<
+ /Type /Page
+ /Parent 2 0 R
+ /MediaBox [0 0 612 792]
+ /Contents 4 0 R
+ /Resources <<
+ /ProcSet 5 0 R
+ /Font <<
+ /F1 6 0 R
+ >>
+ >>
+>>
+endobj
+
+4 0 obj
+<<
+ /Length 44
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Potato) Tj
+ET
+endstream
+endobj
+
+5 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+6 0 obj
+<<
+ /Type /Font
+ /Subtype /Type1
+ /Name /F1
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+>>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000009 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000307 00000 n
+0000000403 00000 n
+0000000438 00000 n
+trailer <<
+ /Size 7
+ /Root 1 0 R
+>>
+startxref
+556
+%%EOF
diff --git a/libtests/qtest/logger/warning.pdf b/libtests/qtest/logger/warning.pdf
new file mode 100644
index 00000000..e8a7042c
--- /dev/null
+++ b/libtests/qtest/logger/warning.pdf
@@ -0,0 +1,79 @@
+%PDF-1.3
+1 0 obj
+<<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+endobj
+
+2 0 obj
+<<
+ /Type /Pages
+ /Kids [
+ 3 0 R
+ ]
+ /Count 1
+>>
+endobj
+
+3 0 obj
+<<
+ /Type /Page
+ /Parent 2 0 R
+ /MediaBox [0 0 612 792]
+ /Contents 4 0 R
+ /Resources <<
+ /ProcSet 5 0 R
+ /Font <<
+ /F1 6 0 R
+ >>
+ >>
+>>
+endobj
+
+4 0 obj
+<<
+ /Length 44
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Potato) Tj
+ET
+endstream
+endobj
+
+5 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+6 0 obj
+<<
+ /Type /Font
+ /Subtype /Type1
+ /Name /F1
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+>>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000009 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000307 00000 n
+0000000403 00000 n
+0000000438 00000 n
+trailer <<
+ /Size 7
+ /Root 1 0 R
+>>
+startxref
+1556
+%%EOF