labfy-investigation/tests/test_ocr_analysis.c
2026-07-28 07:15:49 +02:00

87 lines
3.1 KiB
C

/******************************************************************************
* @file test_ocr_analysis.c
* @brief Tests synthétiques de l'OCR.
******************************************************************************/
#include "core/ocr_analysis.h"
#include <glib.h>
#include <glib/gstdio.h>
static void test_languages_and_raw_text(void)
{
GError *error = NULL;
char *directory = g_dir_make_tmp("labfy-ocr-XXXXXX", &error);
char *path = g_build_filename(directory, "synthetic.png", NULL);
g_assert_true(g_file_set_contents(path, "PNG", 3, &error));
const char *languages[] = { "fra", "eng", "fra+eng" };
for (guint index = 0; index < G_N_ELEMENTS(languages); index++)
{
OcrAnalysisResult *result = ocr_analysis_run(
"tests/fake_document_tool", path, languages[index],
NULL, &error);
g_assert_no_error(error);
g_assert_cmpstr(result->requested_languages, ==, languages[index]);
g_assert_cmpstr(result->text, ==,
"Texte OCR synthétique page une.\n");
g_assert_cmpstr(result->execution->raw_stdout, ==, result->text);
g_assert_nonnull(result->execution->version);
ocr_analysis_result_free(result);
}
g_remove(path);
g_rmdir(directory);
g_free(path);
g_free(directory);
}
static void test_unavailable_and_compatibility(void)
{
GError *error = NULL;
OcrAnalysisResult *result = ocr_analysis_run(
"tests/missing_document_tool", "synthetic.png", "fra",
NULL, &error);
g_assert_no_error(error);
g_assert_cmpint(result->execution->state, ==,
DOCUMENT_ANALYSIS_STATE_UNAVAILABLE);
ocr_analysis_result_free(result);
g_assert_true(ocr_analysis_mime_is_compatible("image/png"));
g_assert_true(ocr_analysis_mime_is_compatible("image/tiff"));
g_assert_false(ocr_analysis_mime_is_compatible("text/plain"));
}
static gpointer cancel_ocr(gpointer user_data)
{
g_usleep(50000);
g_cancellable_cancel(user_data);
return NULL;
}
static void test_cancellation(void)
{
GError *error = NULL;
char *directory = g_dir_make_tmp("labfy-ocr-XXXXXX", &error);
char *path = g_build_filename(directory, "sleep.png", NULL);
g_assert_true(g_file_set_contents(path, "PNG", 3, &error));
GCancellable *cancellable = g_cancellable_new();
GThread *thread = g_thread_new("ocr-cancel", cancel_ocr, cancellable);
OcrAnalysisResult *result = ocr_analysis_run(
"tests/fake_document_tool", path, "fra", cancellable, &error);
g_thread_join(thread);
g_assert_null(result);
g_assert_error(error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
g_clear_error(&error);
g_object_unref(cancellable);
g_remove(path);
g_rmdir(directory);
g_free(path);
g_free(directory);
}
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
g_test_add_func("/ocr-analysis/languages-raw",
test_languages_and_raw_text);
g_test_add_func("/ocr-analysis/unavailable-compatible",
test_unavailable_and_compatibility);
g_test_add_func("/ocr-analysis/cancellation", test_cancellation);
return g_test_run();
}