From e37a82a8f14071d41a68a99900175ca63d062d1d Mon Sep 17 00:00:00 2001 From: gitlost Date: Sat, 3 Oct 2020 22:51:08 +0100 Subject: [PATCH] Tabs/typo in zint.h; PostNet -> POSTNET; ui: shortcuts, tooltips; tests inkscape -> libreoffice --- backend/tests/CMakeLists.txt | 33 +++-- backend/tests/data/emf/code39_rotate_180.emf | Bin 0 -> 1136 bytes backend/tests/data/emf/code39_rotate_270.emf | Bin 0 -> 1136 bytes backend/tests/data/emf/code39_rotate_90.emf | Bin 0 -> 1136 bytes backend/tests/data/svg/codablockf_3rows.svg | 106 ++++++++-------- backend/tests/test_2of5.c | 22 ++-- backend/tests/test_auspost.c | 26 ++-- backend/tests/test_aztec.c | 8 +- backend/tests/test_bmp.c | 10 +- backend/tests/test_channel.c | 12 +- backend/tests/test_codablock.c | 28 ++--- backend/tests/test_code.c | 22 ++-- backend/tests/test_code1.c | 16 +-- backend/tests/test_code128.c | 45 ++++--- backend/tests/test_code16k.c | 20 +-- backend/tests/test_code49.c | 14 +-- backend/tests/test_dotcode.c | 16 +-- backend/tests/test_eci.c | 8 +- backend/tests/test_emf.c | 53 ++++---- backend/tests/test_gb18030.c | 13 +- backend/tests/test_gb2312.c | 14 +-- backend/tests/test_gif.c | 6 +- backend/tests/test_gridmtx.c | 18 +-- backend/tests/test_gs1.c | 28 ++--- backend/tests/test_hanxin.c | 16 +-- backend/tests/test_imail.c | 21 ++-- backend/tests/test_large.c | 52 ++++---- backend/tests/test_library.c | 33 +++-- backend/tests/test_mailmark.c | 14 +-- backend/tests/test_maxicode.c | 18 +-- backend/tests/test_medical.c | 22 ++-- backend/tests/test_pcx.c | 4 +- backend/tests/test_pdf417.c | 20 +-- backend/tests/test_plessey.c | 22 ++-- backend/tests/test_png.c | 10 +- backend/tests/test_postal.c | 20 +-- backend/tests/test_print.c | 27 ++-- backend/tests/test_ps.c | 25 ++-- backend/tests/test_qr.c | 68 +++++------ backend/tests/test_raster.c | 46 ++++--- backend/tests/test_rss.c | 2 - backend/tests/test_sjis.c | 13 +- backend/tests/test_svg.c | 94 +++++++------- backend/tests/test_telepen.c | 26 ++-- backend/tests/test_tif.c | 6 +- backend/tests/test_ultra.c | 8 +- backend/tests/test_upcean.c | 24 ++-- backend/tests/test_vector.c | 36 +++--- backend/tests/testcommon.c | 115 ++++++++++++++---- backend/tests/testcommon.h | 6 +- .../tests/tools/bwipp_dump-barcode.ps.diff | 56 ++++----- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 116944 -> 116808 bytes backend/zint.h | 4 +- backend_tcl/zint.c | 4 +- docs/manual.txt | 28 ++--- frontend/main.c | 4 +- frontend/tests/CMakeLists.txt | 26 +++- frontend/tests/test_args.c | 5 - frontend_qt/CMakeLists.txt | 10 +- frontend_qt/extData.ui | 43 ++++++- frontend_qt/extExport.ui | 54 ++++++-- frontend_qt/extSequence.ui | 93 ++++++++++++-- frontend_qt/grpAztec.ui | 12 +- frontend_qt/grpC11.ui | 6 +- frontend_qt/grpC128.ui | 8 +- frontend_qt/grpC16k.ui | 6 +- frontend_qt/grpC39.ui | 6 +- frontend_qt/grpC49.ui | 6 +- frontend_qt/grpCodabar.ui | 2 +- frontend_qt/grpCodablockF.ui | 10 +- frontend_qt/grpCodeOne.ui | 6 +- frontend_qt/grpDM.ui | 14 +-- frontend_qt/grpDotCode.ui | 2 +- frontend_qt/grpGrid.ui | 6 +- frontend_qt/grpHX.ui | 6 +- frontend_qt/grpLOGMARS.ui | 4 +- frontend_qt/grpMQR.ui | 6 +- frontend_qt/grpMaxicode.ui | 2 +- frontend_qt/grpMicroPDF.ui | 4 +- frontend_qt/grpPDF417.ui | 6 +- frontend_qt/grpQR.ui | 12 +- frontend_qt/grpRMQR.ui | 10 +- frontend_qt/grpUPCA.ui | 2 +- frontend_qt/grpUPCEAN.ui | 2 +- frontend_qt/grpUltra.ui | 20 +-- frontend_qt/grpVIN.ui | 2 +- frontend_qt/mainWindow.ui | 54 ++++---- frontend_qt/mainwindow.cpp | 74 +++++------ frontend_qt/mainwindow.h | 5 - frontend_qt/sequencewindow.cpp | 2 + 90 files changed, 1048 insertions(+), 840 deletions(-) create mode 100644 backend/tests/data/emf/code39_rotate_180.emf create mode 100644 backend/tests/data/emf/code39_rotate_270.emf create mode 100644 backend/tests/data/emf/code39_rotate_90.emf diff --git a/backend/tests/CMakeLists.txt b/backend/tests/CMakeLists.txt index a4251d58..bb3afc14 100644 --- a/backend/tests/CMakeLists.txt +++ b/backend/tests/CMakeLists.txt @@ -4,6 +4,7 @@ # vim: set ts=4 sw=4 et : cmake_minimum_required(VERSION 3.9) +project(zint_backend_tests) enable_testing() @@ -30,20 +31,38 @@ if(NOT EXISTS ${BWIPP_PS}) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tools) endif() -if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - if(ZINT_DEBUG) +include(CheckCCompilerFlag) + +check_c_compiler_flag(-Wall C_COMPILER_FLAG_WALL) +if(C_COMPILER_FLAG_WALL) + add_compile_options("-Wall") +endif() + +check_c_compiler_flag(-Wextra C_COMPILER_FLAG_WEXTRA) +if(C_COMPILER_FLAG_WEXTRA) + add_compile_options("-Wextra") +endif() + +if(ZINT_DEBUG) + check_c_compiler_flag(-g C_COMPILER_FLAG_G) + if(C_COMPILER_FLAG_G) add_compile_options("-g") endif() - if(ZINT_SANITIZE) +endif() + +if(ZINT_SANITIZE) + # check_c_compiler_flag fails for -fsanitize + if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") add_compile_options("-fsanitize=undefined") add_compile_options("-fsanitize=address") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address") - endif() - if(ZINT_TEST) - add_definitions("-DZINT_TEST") + link_libraries("-fsanitize=undefined -fsanitize=address") endif() endif() +if(ZINT_TEST) + add_definitions("-DZINT_TEST") +endif() + add_library(testcommon testcommon.c testcommon.h) if(PNG_FOUND) target_link_libraries(testcommon ZINT::ZINT ${PNG_LIBRARIES}) diff --git a/backend/tests/data/emf/code39_rotate_180.emf b/backend/tests/data/emf/code39_rotate_180.emf new file mode 100644 index 0000000000000000000000000000000000000000..5f208be15badb63813c56fdde6c1d6d71bf74d68 GIT binary patch literal 1136 zcmaizUn@jW6vfwIB>$BpNfY@u{*)nkP^Q7;0T1%vK|%;=nq~?Q(#Uo6oW$^cQlSXNguXK?xJxai~!*zDDdO;_6ZA zp<}N7CG{2a;gkZSj*l7FdE)vB<5Q03j88kR`<52yc%OVqIRlQb8ZS7$VSLl^E#upc z7mb%3-!ooz{J{93&VhHNG#kX{=t;Vl&eP#{3~@r= z(|zBVeTxPja2Kck8_zN$)E8o%XNguVLE(-=j%x8aVmA?2jZzOC zbL}swu9y#}6c}}U%(%`I=T8`)a=c)C+Hu{tv_QxE6jRC`aD3Hx$?*;2n~rZ8-*&uW ze8=%U<5kBGj2}9FY+St&pa0bOnd9fiFC4!#e(kvSl+;1-{^~>Nk&bySr9j>BhVf^| zUyZ*x{%$-m9(qi@uXnEgl+*``^}bcJ>J8$zmP$RCeV0kO!l+5-Y29V4kS|um8cJB_ Lob{yoFG%q(ZU;s; literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/code39_rotate_90.emf b/backend/tests/data/emf/code39_rotate_90.emf new file mode 100644 index 0000000000000000000000000000000000000000..a735b78cf88af8d5287e2816162dbb79bf3dbdbb GIT binary patch literal 1136 zcmaizUn@jW6vfwIB>$BpNfY@ugEAx!YNmW+tYGsZYbvjlT=j!xAo@n1jF{JWyKNKewLmD=q#dKm-nN@#i!U!bSyemYBs-!a88 zeMb+_!*r~Vzryz>E>S}htMm;TxW{c=`fonZiqK!kwVwj5UV_3q4mIk<*N9z5Ts=yC zbj-EBq`qQ4nowZe@d@MFPh3A`e8%yd@ma_9zNIBPUMHVW&Vb`<#*2<`8sBn!+xU*- zW#bjcca2va-#32X_>pnVM!f$MiC=SmhmuSntgq9&8MU}P_FN-p4D#<&srkQAkU@FW~t1qNoQ%j%UGdaERS^* NvB8+mq~ - Zint Generated Symbol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/tests/test_2of5.c b/backend/tests/test_2of5.c index d6170b5d..8174a101 100644 --- a/backend/tests/test_2of5.c +++ b/backend/tests/test_2of5.c @@ -38,7 +38,7 @@ static void test_large(int index, int debug) { int ret; struct item { int symbology; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -79,7 +79,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -100,8 +100,8 @@ static void test_hrt(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; - unsigned char *expected; + char *data; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -119,8 +119,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -130,10 +128,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -148,7 +146,7 @@ static void test_input(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -175,7 +173,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -198,7 +196,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -266,7 +264,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_auspost.c b/backend/tests/test_auspost.c index 499474f2..d2298893 100644 --- a/backend/tests/test_auspost.c +++ b/backend/tests/test_auspost.c @@ -38,7 +38,7 @@ static void test_large(int index, int debug) { int ret; struct item { int symbology; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -79,7 +79,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -100,9 +100,9 @@ static void test_hrt(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; - unsigned char *expected; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -110,8 +110,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -121,10 +119,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -139,7 +137,7 @@ static void test_input(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -176,7 +174,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -201,7 +199,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -266,7 +264,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -309,7 +307,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int ret; }; @@ -339,7 +337,7 @@ static void test_fuzz(int index, int debug) { length = strlen(data[i].data); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_aztec.c b/backend/tests/test_aztec.c index 5fc420b2..073b7fb1 100644 --- a/backend/tests/test_aztec.c +++ b/backend/tests/test_aztec.c @@ -41,7 +41,7 @@ static void test_encode(int index, int generate, int debug) { int input_mode; int option_1; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -444,7 +444,7 @@ static void test_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -480,7 +480,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int input_mode; int option_1; @@ -912,7 +912,7 @@ static void test_fuzz(int index, int debug) { } symbol->debug |= debug; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_bmp.c b/backend/tests/test_bmp.c index 40683b0b..502dc2d1 100644 --- a/backend/tests/test_bmp.c +++ b/backend/tests/test_bmp.c @@ -47,7 +47,7 @@ static void test_pixel_plot(int index, int debug) { struct item { int width; int height; - unsigned char *pattern; + char *pattern; int repeat; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) @@ -66,8 +66,6 @@ static void test_pixel_plot(int index, int debug) { int data_size = ARRAY_SIZE(data); char *bmp = "out.bmp"; - char escaped[1024]; - int escaped_size = 1024; char data_buf[8 * 2 + 1]; @@ -94,7 +92,7 @@ static void test_pixel_plot(int index, int debug) { } assert_equal(size, (int) strlen(data_buf), "i:%d bmp_pixel_plot size %d != strlen(data_buf) %d\n", i, size, (int) strlen(data_buf)); - symbol->bitmap = data_buf; + symbol->bitmap = (unsigned char *) data_buf; ret = bmp_pixel_plot(symbol, data_buf); assert_zero(ret, "i:%d bmp_pixel_plot ret %d != 0 (%s)\n", i, ret, symbol->errtxt); @@ -126,7 +124,7 @@ static void test_print(int index, int generate, int debug) { int option_2; char *fgcolour; char *bgcolour; - unsigned char* data; + char* data; char* expected_file; }; struct item data[] = { @@ -165,7 +163,7 @@ static void test_print(int index, int generate, int debug) { strcpy(symbol->bgcolour, data[i].bgcolour); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, bmp); diff --git a/backend/tests/test_channel.c b/backend/tests/test_channel.c index dc9fb50f..e1c9ae36 100644 --- a/backend/tests/test_channel.c +++ b/backend/tests/test_channel.c @@ -38,7 +38,7 @@ static void test_input(int index, int debug) { int ret; struct item { int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -104,7 +104,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CHANNEL, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (ret < 5) { @@ -127,7 +127,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -362,7 +362,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CHANNEL, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -406,7 +406,7 @@ static void test_generate(int generate) { int ret; struct item { - unsigned char *data; + char *data; }; struct item data[] = { { "576688" }, { "7742862" } }; int data_size = ARRAY_SIZE(data); @@ -417,7 +417,7 @@ static void test_generate(int generate) { int length = testUtilSetSymbol(symbol, BARCODE_CHANNEL, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, 0); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 (%s)\n", i, ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_codablock.c b/backend/tests/test_codablock.c index f0da6be4..1b55342c 100644 --- a/backend/tests/test_codablock.c +++ b/backend/tests/test_codablock.c @@ -37,7 +37,7 @@ static void test_large(int index, int debug) { int ret; struct item { - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -71,7 +71,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODABLOCKF, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -94,7 +94,7 @@ static void test_options(int index, int debug) { int input_mode; int option_1; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -138,7 +138,7 @@ static void test_options(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODABLOCKF, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -161,7 +161,7 @@ static void test_reader_init(int index, int generate, int debug) { int symbology; int input_mode; int output_options; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -187,7 +187,7 @@ static void test_reader_init(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -199,7 +199,7 @@ static void test_reader_init(int index, int generate, int debug) { if (ret < 5) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -218,7 +218,7 @@ static void test_input(int index, int generate, int debug) { int symbology; int input_mode; int option_2; - unsigned char *data; + char *data; int length; int ret; int expected_rows; @@ -294,7 +294,7 @@ static void test_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -306,7 +306,7 @@ static void test_input(int index, int generate, int debug) { if (ret < 5) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -327,7 +327,7 @@ static void test_encode(int index, int generate, int debug) { int symbology; int option_1; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -426,7 +426,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, UNICODE_MODE, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -472,7 +472,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; }; @@ -491,7 +491,7 @@ static void test_fuzz(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODABLOCKF, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_code.c b/backend/tests/test_code.c index 1d915ed7..d493ad89 100644 --- a/backend/tests/test_code.c +++ b/backend/tests/test_code.c @@ -39,7 +39,7 @@ static void test_large(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -87,7 +87,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -109,10 +109,10 @@ static void test_hrt(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int length; - unsigned char *expected; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -146,8 +146,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -157,10 +155,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -176,7 +174,7 @@ static void test_input(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int length; int ret; int expected_rows; @@ -224,7 +222,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -248,7 +246,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int length; int ret; @@ -352,7 +350,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_code1.c b/backend/tests/test_code1.c index aa82c882..df1d9b04 100644 --- a/backend/tests/test_code1.c +++ b/backend/tests/test_code1.c @@ -38,7 +38,7 @@ static void test_large(int index, int debug) { int ret; struct item { int option_2; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -93,7 +93,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODEONE, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -115,7 +115,7 @@ static void test_input(int index, int debug) { struct item { int input_mode; int option_2; - unsigned char *data; + char *data; int length; int ret; int expected_rows; @@ -149,7 +149,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODEONE, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -172,7 +172,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int option_2; - unsigned char *data; + char *data; int length; int ret; @@ -216,7 +216,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODEONE, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -258,7 +258,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; }; @@ -280,7 +280,7 @@ static void test_fuzz(int index, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index cb574048..75d6ecef 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -40,7 +40,7 @@ static void test_large(int index, int debug) { int ret; struct item { int symbology; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_width; @@ -87,7 +87,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -108,7 +108,7 @@ static void test_hrt_cpy_iso8859_1(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; char *expected; @@ -135,7 +135,6 @@ static void test_hrt_cpy_iso8859_1(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - int vals[20]; struct zint_symbol symbol; symbol.debug |= debug; @@ -145,14 +144,14 @@ static void test_hrt_cpy_iso8859_1(int index, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = hrt_cpy_iso8859_1(&symbol, data[i].data, length); + ret = hrt_cpy_iso8859_1(&symbol, (unsigned char *) data[i].data, length); for (int j = 0; j < ret; j++) { //fprintf(stderr, "symbol.text[%d] %2X\n", j, symbol.text[j]); } assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); - assert_equal(ret, (int) strlen(symbol.text), "i:%d ret %d != strlen %d\n", i, ret, (int) strlen(symbol.text)); - assert_nonzero(testUtilIsValidUTF8(symbol.text, strlen(symbol.text)), "i:%d testUtilIsValidUTF8(%s) != 1\n", i, symbol.text); - assert_zero(strcmp(symbol.text, data[i].expected), "i:%d symbol.text (%s) != expected (%s)\n", i, symbol.text, data[i].expected); + assert_equal(ret, (int) ustrlen(symbol.text), "i:%d ret %d != strlen %d\n", i, ret, (int) ustrlen(symbol.text)); + assert_nonzero(testUtilIsValidUTF8(symbol.text, ustrlen(symbol.text)), "i:%d testUtilIsValidUTF8(%s) != 1\n", i, symbol.text); + assert_zero(strcmp((char *) symbol.text, data[i].expected), "i:%d symbol.text (%s) != expected (%s)\n", i, symbol.text, data[i].expected); } testFinish(); @@ -166,10 +165,10 @@ static void test_hrt(int index, int debug) { struct item { int symbology; int input_mode; - unsigned char *data; + char *data; int length; - unsigned char *expected; + char *expected; }; // é U+00E9 (\351, 233), UTF-8 C3A9, CodeB-only extended ASCII // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) @@ -188,8 +187,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -199,10 +196,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -219,7 +216,7 @@ static void test_reader_init(int index, int generate, int debug) { int symbology; int input_mode; int output_options; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -250,7 +247,7 @@ static void test_reader_init(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -279,7 +276,7 @@ static void test_input(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int length; int ret; int expected_width; @@ -345,7 +342,7 @@ static void test_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE128, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -371,7 +368,7 @@ static void test_ean128_input(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; int expected_width; char *expected; @@ -415,7 +412,7 @@ static void test_ean128_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_GS1_128, GS1_MODE, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -441,7 +438,7 @@ static void test_hibc_input(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; int expected_width; char *expected; @@ -466,7 +463,7 @@ static void test_hibc_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_HIBC_128, UNICODE_MODE, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -496,7 +493,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int symbology; int input_mode; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -650,7 +647,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_code16k.c b/backend/tests/test_code16k.c index aececf27..d04153d2 100644 --- a/backend/tests/test_code16k.c +++ b/backend/tests/test_code16k.c @@ -37,7 +37,7 @@ static void test_large(int index, int debug) { int ret; struct item { - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -66,7 +66,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE16K, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -88,7 +88,7 @@ static void test_reader_init(int index, int generate, int debug) { struct item { int input_mode; int output_options; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -116,7 +116,7 @@ static void test_reader_init(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE16K, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -128,7 +128,7 @@ static void test_reader_init(int index, int generate, int debug) { if (ret < 5) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -145,7 +145,7 @@ static void test_input(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int length; int ret; int expected_rows; @@ -195,7 +195,7 @@ static void test_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE16K, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -206,7 +206,7 @@ static void test_input(int index, int generate, int debug) { if (ret < 5) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -225,7 +225,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -260,7 +260,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE16K, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_code49.c b/backend/tests/test_code49.c index 962260d4..628f6104 100644 --- a/backend/tests/test_code49.c +++ b/backend/tests/test_code49.c @@ -37,7 +37,7 @@ static void test_large(int index, int debug) { int ret; struct item { - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -66,7 +66,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE49, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -87,7 +87,7 @@ static void test_input(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int length; int ret; int expected_rows; @@ -128,7 +128,7 @@ static void test_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE49, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -139,7 +139,7 @@ static void test_input(int index, int generate, int debug) { if (ret < 5) { assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data); assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data); - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -158,7 +158,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -194,7 +194,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE49, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_dotcode.c b/backend/tests/test_dotcode.c index bbadfe7e..fdf3d281 100644 --- a/backend/tests/test_dotcode.c +++ b/backend/tests/test_dotcode.c @@ -39,7 +39,7 @@ static void test_input(int index, int generate, int debug) { struct item { int input_mode; int eci; - unsigned char *data; + char *data; int length; int ret; char *expected; @@ -104,7 +104,7 @@ static void test_input(int index, int generate, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -113,7 +113,7 @@ static void test_input(int index, int generate, int debug) { data[i].length, testUtilErrorName(data[i].ret), symbol->errtxt, data[i].comment); } else { if (ret < 5) { - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -131,7 +131,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int input_mode; int option_2; - unsigned char *data; + char *data; int length; int ret; @@ -375,7 +375,7 @@ static void test_encode(int index, int generate, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -410,7 +410,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int length; int input_mode; int ret; @@ -457,7 +457,7 @@ static void test_fuzz(int index, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); @@ -504,7 +504,7 @@ static void test_large(int index, int debug) { memset(data_buf, data[i].datum, length); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_eci.c b/backend/tests/test_eci.c index 1d6bc102..85e97a22 100644 --- a/backend/tests/test_eci.c +++ b/backend/tests/test_eci.c @@ -71,7 +71,7 @@ static void test_bom(int debug) { "111111100101101000101"; int ret; - ret = ZBarcode_Encode(symbol, data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data, length); assert_equal(ret, ZINT_WARN_USES_ECI, "ZBarcode_Encode ret %d != ZINT_WARN_USES_ECI\n", ret); assert_equal(symbol->eci, 21, "eci %d != 21\n", symbol->eci); // ECI 21 == Windows-1250 @@ -99,7 +99,7 @@ static void test_iso_8859_16(int debug) { int length = strlen(data); int ret; - ret = ZBarcode_Encode(symbol, data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data, length); assert_equal(ret, ZINT_WARN_USES_ECI, "ZBarcode_Encode ret %d != ZINT_WARN_USES_ECI\n", ret); assert_equal(symbol->eci, 18, "eci %d != 18\n", symbol->eci); // ECI 18 == ISO 8859-16 @@ -118,7 +118,7 @@ static void test_reduced_charset_input(int index, int debug) { int symbology; int input_mode; int eci; - unsigned char *data; + char *data; int ret; int expected_eci; char *comment; @@ -228,7 +228,7 @@ static void test_reduced_charset_input(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (data[i].expected_eci != -1) { diff --git a/backend/tests/test_emf.c b/backend/tests/test_emf.c index 4e29e22b..cacd5261 100644 --- a/backend/tests/test_emf.c +++ b/backend/tests/test_emf.c @@ -36,8 +36,8 @@ static void test_emf(int index, int debug) { testStart(""); - if (!testUtilHaveInkscape()) { - testSkip("Inkscape not available"); + if (!testUtilHaveLibreOffice()) { + testSkip("LibreOffice not available"); return; } @@ -49,7 +49,7 @@ static void test_emf(int index, int debug) { char *fgcolour; char *bgcolour; float scale; - unsigned char *data; + char *data; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -76,7 +76,7 @@ static void test_emf(int index, int debug) { symbol->scale = data[i].scale; } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); char *filename = "out.emf"; @@ -84,8 +84,8 @@ static void test_emf(int index, int debug) { ret = ZBarcode_Print(symbol, 0); assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); - ret = testUtilVerifyInkscape(symbol->outfile, debug); // Slow - assert_zero(ret, "i:%d %s inkscape %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); + ret = testUtilVerifyLibreOffice(symbol->outfile, debug); // Slow + assert_zero(ret, "i:%d %s libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); assert_zero(remove(symbol->outfile), "i:%d remove(%s) != 0\n", i, symbol->outfile); @@ -99,7 +99,10 @@ static void test_print(int index, int generate, int debug) { testStart(""); - int have_inkscape = testUtilHaveInkscape(); + int have_libreoffice = 0; + if (generate) { + have_libreoffice = testUtilHaveLibreOffice(); + } int ret; struct item { @@ -111,18 +114,22 @@ static void test_print(int index, int generate, int debug) { int option_2; char *fgcolour; char *bgcolour; - unsigned char* data; + int rotate_angle; + char* data; char* expected_file; }; struct item data[] = { - /* 0*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, "", "", "Égjpqy", "../data/emf/code128_egrave_bold.emf" }, - /* 1*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, "147AD0", "FC9630", "123", "../data/emf/telenum_fg_bg.emf" }, - /* 2*/ { BARCODE_ULTRA, -1, -1, 5, -1, -1, "147AD0", "FC9630", "123", "../data/emf/ultracode_fg_bg.emf" }, - /* 3*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "", "", "9780877799306+54321", "../data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf" }, - /* 4*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "", "", "012345678905+24", "../data/emf/upca_2addon_ggs_5.2.6.6-5.emf" }, - /* 5*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "", "", "0123456+12", "../data/emf/upce_2addon.emf" }, - /* 6*/ { BARCODE_UPCE, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "", "", "0123456+12", "../data/emf/upce_2addon_small_bold.emf" }, - /* 7*/ { BARCODE_ITF14, -1, BOLD_TEXT, -1, -1, -1, "", "", "123", "../data/emf/itf14_bold.emf" }, + /* 0*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, "", "", 0, "Égjpqy", "../data/emf/code128_egrave_bold.emf" }, + /* 1*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, "147AD0", "FC9630", 0, "123", "../data/emf/telenum_fg_bg.emf" }, + /* 2*/ { BARCODE_ULTRA, -1, -1, 5, -1, -1, "147AD0", "FC9630", 0, "123", "../data/emf/ultracode_fg_bg.emf" }, + /* 3*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "", "", 0, "9780877799306+54321", "../data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf" }, + /* 4*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "", "", 0, "012345678905+24", "../data/emf/upca_2addon_ggs_5.2.6.6-5.emf" }, + /* 5*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "", "", 0, "0123456+12", "../data/emf/upce_2addon.emf" }, + /* 6*/ { BARCODE_UPCE, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "", "", 0, "0123456+12", "../data/emf/upce_2addon_small_bold.emf" }, + /* 7*/ { BARCODE_ITF14, -1, BOLD_TEXT, -1, -1, -1, "", "", 0, "123", "../data/emf/itf14_bold.emf" }, + /* 8*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, "", "", 90, "123", "../data/emf/code39_rotate_90.emf" }, + /* 9*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, "", "", 180, "123", "../data/emf/code39_rotate_180.emf" }, + /* 10*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, "", "", 270, "123", "../data/emf/code39_rotate_270.emf" }, }; int data_size = ARRAY_SIZE(data); @@ -156,22 +163,22 @@ static void test_print(int index, int generate, int debug) { strcpy(symbol->bgcolour, data[i].bgcolour); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, emf); - ret = ZBarcode_Print(symbol, 0); + ret = ZBarcode_Print(symbol, data[i].rotate_angle); assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); if (generate) { - printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\"},\n", + printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, \"%s\", \"%s\", %d, \"%s\", \"%s\"},\n", i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), data[i].whitespace_width, - data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); + data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, data[i].rotate_angle, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); - if (have_inkscape) { - ret = testUtilVerifyInkscape(data[i].expected_file, debug); - assert_zero(ret, "i:%d %s inkscape %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); + if (have_libreoffice) { + ret = testUtilVerifyLibreOffice(data[i].expected_file, debug); + assert_zero(ret, "i:%d %s libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); } } else { assert_nonzero(testUtilExists(symbol->outfile), "i:%d testUtilExists(%s) == 0\n", i, symbol->outfile); diff --git a/backend/tests/test_gb18030.c b/backend/tests/test_gb18030.c index 529afec3..8e60ff90 100644 --- a/backend/tests/test_gb18030.c +++ b/backend/tests/test_gb18030.c @@ -152,7 +152,7 @@ static void test_gb18030_utf8tomb(int index) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -192,7 +192,7 @@ static void test_gb18030_utf8tomb(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - ret = gb18030_utf8tomb(&symbol, data[i].data, &ret_length, gbdata); + ret = gb18030_utf8tomb(&symbol, (unsigned char *) data[i].data, &ret_length, gbdata); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol.errtxt); if (ret == 0) { assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); @@ -213,7 +213,7 @@ static void test_gb18030_utf8tosb(int index) { struct item { int eci; int full_multibyte; - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -267,7 +267,7 @@ static void test_gb18030_utf8tosb(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - ret = gb18030_utf8tosb(data[i].eci, data[i].data, &ret_length, gbdata, data[i].full_multibyte); + ret = gb18030_utf8tosb(data[i].eci, (unsigned char *) data[i].data, &ret_length, gbdata, data[i].full_multibyte); assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); @@ -284,10 +284,9 @@ static void test_gb18030_cpy(int index) { testStart(""); - int ret; struct item { int full_multibyte; - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -319,7 +318,7 @@ static void test_gb18030_cpy(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - gb18030_cpy(data[i].data, &ret_length, gbdata, data[i].full_multibyte); + gb18030_cpy((unsigned char *) data[i].data, &ret_length, gbdata, data[i].full_multibyte); assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); for (int j = 0; j < (int) ret_length; j++) { assert_equal(gbdata[j], data[i].expected_gbdata[j], "i:%d gbdata[%d] %04X != %04X\n", i, j, gbdata[j], data[i].expected_gbdata[j]); diff --git a/backend/tests/test_gb2312.c b/backend/tests/test_gb2312.c index 0f62998c..56871c58 100644 --- a/backend/tests/test_gb2312.c +++ b/backend/tests/test_gb2312.c @@ -55,7 +55,6 @@ static void test_gb2312_wctomb_zint(void) { testStart(""); int ret, ret2; - unsigned char buf[2], buf2[2]; unsigned int val, val2; for (unsigned int i = 0; i < 0xFFFE; i++) { @@ -93,7 +92,7 @@ static void test_gb2312_utf8tomb(int index) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -133,7 +132,7 @@ static void test_gb2312_utf8tomb(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - ret = gb2312_utf8tomb(&symbol, data[i].data, &ret_length, gbdata); + ret = gb2312_utf8tomb(&symbol, (unsigned char *) data[i].data, &ret_length, gbdata); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol.errtxt); if (ret == 0) { assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); @@ -154,7 +153,7 @@ static void test_gb2312_utf8tosb(int index) { struct item { int eci; int full_multibyte; - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -206,7 +205,7 @@ static void test_gb2312_utf8tosb(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - ret = gb2312_utf8tosb(data[i].eci, data[i].data, &ret_length, gbdata, data[i].full_multibyte); + ret = gb2312_utf8tosb(data[i].eci, (unsigned char *) data[i].data, &ret_length, gbdata, data[i].full_multibyte); assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); @@ -223,10 +222,9 @@ static void test_gb2312_cpy(int index) { testStart(""); - int ret; struct item { int full_multibyte; - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -258,7 +256,7 @@ static void test_gb2312_cpy(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - gb2312_cpy(data[i].data, &ret_length, gbdata, data[i].full_multibyte); + gb2312_cpy((unsigned char *) data[i].data, &ret_length, gbdata, data[i].full_multibyte); assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); for (int j = 0; j < (int) ret_length; j++) { assert_equal(gbdata[j], data[i].expected_gbdata[j], "i:%d gbdata[%d] %04X != %04X\n", i, j, gbdata[j], data[i].expected_gbdata[j]); diff --git a/backend/tests/test_gif.c b/backend/tests/test_gif.c index 6a9bc3ae..c3d4f654 100644 --- a/backend/tests/test_gif.c +++ b/backend/tests/test_gif.c @@ -46,7 +46,7 @@ static void test_pixel_plot(int index, int debug) { struct item { int width; int height; - unsigned char *pattern; + char *pattern; int repeat; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) @@ -65,8 +65,6 @@ static void test_pixel_plot(int index, int debug) { int data_size = ARRAY_SIZE(data); char *gif = "out.gif"; - char escaped[1024]; - int escaped_size = 1024; char data_buf[19 * 32 + 1]; // 19 * 32 == 608 @@ -93,7 +91,7 @@ static void test_pixel_plot(int index, int debug) { } assert_equal(size, (int) strlen(data_buf), "i:%d gif_pixel_plot size %d != strlen(data_buf) %d\n", i, size, (int) strlen(data_buf)); - symbol->bitmap = data_buf; + symbol->bitmap = (unsigned char *) data_buf; ret = gif_pixel_plot(symbol, data_buf); assert_zero(ret, "i:%d gif_pixel_plot ret %d != 0 (%s)\n", i, ret, symbol->errtxt); diff --git a/backend/tests/test_gridmtx.c b/backend/tests/test_gridmtx.c index ce5d62b5..719b117b 100644 --- a/backend/tests/test_gridmtx.c +++ b/backend/tests/test_gridmtx.c @@ -37,7 +37,7 @@ static void test_large(int index, int debug) { int ret; struct item { - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -68,7 +68,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_GRIDMATRIX, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -88,7 +88,7 @@ static void test_options(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int option_1; int option_2; int ret_encode; @@ -126,7 +126,7 @@ static void test_options(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); if (data[i].ret_vector != -1) { @@ -151,7 +151,7 @@ static void test_input(int index, int generate, int debug) { int input_mode; int eci; int option_3; - unsigned char *data; + char *data; int ret; int expected_eci; char *expected; @@ -238,7 +238,7 @@ static void test_input(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -249,7 +249,7 @@ static void test_input(int index, int generate, int debug) { if (ret < 5) { assert_equal(symbol->eci, data[i].expected_eci, "i:%d eci %d != %d\n", i, symbol->eci, data[i].expected_eci); - assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); + assert_zero(strcmp((char *) symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected); } } @@ -265,7 +265,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int input_mode; int option_1; int option_2; @@ -395,7 +395,7 @@ static void test_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_gs1.c b/backend/tests/test_gs1.c index 54976636..8db0009f 100644 --- a/backend/tests/test_gs1.c +++ b/backend/tests/test_gs1.c @@ -44,12 +44,12 @@ static void test_gs1_reduce(int index, int generate, int debug) { struct item { int symbology; int input_mode; - unsigned char *data; - unsigned char *composite; + char *data; + char *composite; int ret; char *comment; - unsigned char *expected; + char *expected; }; struct item data[] = { /* 0*/ { BARCODE_GS1_128, -1, "12345678901234", "", ZINT_ERROR_INVALID_DATA, "GS1 data required", "" }, @@ -193,7 +193,7 @@ static void test_gs1_reduce(int index, int generate, int debug) { } int length = strlen(text); - ret = ZBarcode_Encode(symbol, text, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); if (generate) { if (data[i].ret == 0) { @@ -237,10 +237,10 @@ static void test_hrt(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; - unsigned char *composite; + char *data; + char *composite; - unsigned char *expected; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -275,10 +275,10 @@ static void test_hrt(int index, int debug) { } int length = strlen(text); - ret = ZBarcode_Encode(symbol, text, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -294,7 +294,7 @@ static void test_gs1_verify(int index) { int ret; struct item { - unsigned char *data; + char *data; int ret; char *expected; }; @@ -801,7 +801,7 @@ static void test_gs1_verify(int index) { int length = strlen(data[i].data); - ret = gs1_verify(symbol, data[i].data, length, reduced); + ret = gs1_verify(symbol, (unsigned char *) data[i].data, length, reduced); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (length %d \"%s\") %s\n", i, ret, data[i].ret, length, data[i].data, symbol->errtxt); if (ret == 0) { @@ -821,8 +821,8 @@ static void test_input_mode(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; - unsigned char *composite; + char *data; + char *composite; int input_mode; int output_options; int ret; @@ -894,7 +894,7 @@ static void test_input_mode(int index, int debug) { } int length = strlen(text); - ret = ZBarcode_Encode(symbol, text, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d %s\n", i, ret, data[i].ret, symbol->errtxt); if (index == -1 && data[i].compare_previous) { ret = testUtilSymbolCmp(symbol, &previous_symbol); diff --git a/backend/tests/test_hanxin.c b/backend/tests/test_hanxin.c index 6d907045..d9568ffd 100644 --- a/backend/tests/test_hanxin.c +++ b/backend/tests/test_hanxin.c @@ -37,7 +37,7 @@ static void test_large(int index, int debug) { int ret; struct item { - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -68,7 +68,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_HANXIN, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -88,7 +88,7 @@ static void test_options(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int option_1; int option_2; int ret_encode; @@ -130,7 +130,7 @@ static void test_options(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); if (data[i].ret_vector != -1) { @@ -155,7 +155,7 @@ static void test_input(int index, int generate, int debug) { int input_mode; int eci; int option_3; - unsigned char *data; + char *data; int length; int ret; int expected_eci; @@ -229,7 +229,7 @@ static void test_input(int index, int generate, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -255,7 +255,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int input_mode; int option_1; int option_2; @@ -439,7 +439,7 @@ static void test_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_imail.c b/backend/tests/test_imail.c index c8f84e0d..d8a79c41 100644 --- a/backend/tests/test_imail.c +++ b/backend/tests/test_imail.c @@ -53,7 +53,6 @@ static void test_csv(int index, int debug) { char actual_daft[70]; int ret; - int i; int lc = 0; while (fgets(buffer, sizeof(buffer), fd) != NULL) { @@ -101,7 +100,7 @@ static void test_csv(int index, int debug) { symbol->symbology = BARCODE_USPS_IMAIL; symbol->debug |= debug; - ret = ZBarcode_Encode(symbol, data, strlen(data)); + ret = ZBarcode_Encode(symbol, (unsigned char *) data, strlen(data)); if (strcmp(return_code, "00") == 0) { @@ -130,8 +129,8 @@ static void test_hrt(int index, int debug) { int ret; struct item { - unsigned char *data; - unsigned char *expected; + char *data; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -139,8 +138,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -150,10 +147,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_USPS_IMAIL, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -167,7 +164,7 @@ static void test_input(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -199,7 +196,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_USPS_IMAIL, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -221,7 +218,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; int expected_rows; @@ -251,7 +248,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_USPS_IMAIL, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_large.c b/backend/tests/test_large.c index 8f876376..fcb016b5 100644 --- a/backend/tests/test_large.c +++ b/backend/tests/test_large.c @@ -36,7 +36,7 @@ int clz_u64(uint64_t x); -static void test_clz_u64(int index, int debug) { +static void test_clz_u64(int index) { testStart(""); @@ -187,11 +187,10 @@ static void test_clz_u64(int index, int debug) { testFinish(); } -static void test_load(int index, int debug) { +static void test_load(int index) { testStart(""); - int ret; struct item { large_int t; large_int s; @@ -224,14 +223,13 @@ static void test_load(int index, int debug) { testFinish(); } -static void test_load_str_u64(int index, int debug) { +static void test_load_str_u64(int index) { testStart(""); - int ret; struct item { large_int t; - const unsigned char *s; + const char *s; int length; large_int expected; }; @@ -254,7 +252,7 @@ static void test_load_str_u64(int index, int debug) { if (index != -1 && i != index) continue; - large_load_str_u64(&data[i].t, data[i].s, data[i].length == -1 ? (int) strlen(data[i].s) : data[i].length); + large_load_str_u64(&data[i].t, (unsigned char *) data[i].s, data[i].length == -1 ? (int) strlen(data[i].s) : data[i].length); assert_equal(data[i].t.lo, data[i].expected.lo, "i:%d lo 0x%lX (%s) != expected lo 0x%lX (%s)\n", i, data[i].t.lo, large_dump(&data[i].t, t_dump), data[i].expected.lo, large_dump(&data[i].expected, expected_dump)); @@ -265,11 +263,10 @@ static void test_load_str_u64(int index, int debug) { testFinish(); } -static void test_add_u64(int index, int debug) { +static void test_add_u64(int index) { testStart(""); - int ret; struct item { large_int t; uint64_t s; @@ -309,11 +306,10 @@ static void test_add_u64(int index, int debug) { testFinish(); } -static void test_sub_u64(int index, int debug) { +static void test_sub_u64(int index) { testStart(""); - int ret; struct item { large_int t; uint64_t s; @@ -353,11 +349,10 @@ static void test_sub_u64(int index, int debug) { testFinish(); } -static void test_mul_u64(int index, int debug) { +static void test_mul_u64(int index) { testStart(""); - int ret; struct item { large_int t; uint64_t s; @@ -410,7 +405,7 @@ static void test_mul_u64(int index, int debug) { testFinish(); } -static void test_div_u64(int index, int debug) { +static void test_div_u64(int index) { testStart(""); @@ -535,11 +530,10 @@ static void test_div_u64(int index, int debug) { testFinish(); } -static void test_unset_bit(int index, int debug) { +static void test_unset_bit(int index) { testStart(""); - int ret; struct item { large_int t; int s; @@ -699,11 +693,10 @@ static void test_unset_bit(int index, int debug) { testFinish(); } -static void test_uint_array(int index, int debug) { +static void test_uint_array(int index) { testStart(""); - int ret; struct item { large_int t; int size; @@ -784,11 +777,10 @@ static void test_uint_array(int index, int debug) { testFinish(); } -static void test_dump(int index, int debug) { +static void test_dump(int index) { testStart(""); - int ret; struct item { large_int t; char *expected; @@ -863,16 +855,16 @@ static void test_dump(int index, int debug) { int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ - { "test_clz_u64", test_clz_u64, 1, 0, 1 }, - { "test_load", test_load, 1, 0, 1 }, - { "test_load_str_u64", test_load_str_u64, 1, 0, 1 }, - { "test_add_u64", test_add_u64, 1, 0, 1 }, - { "test_sub_u64", test_sub_u64, 1, 0, 1 }, - { "test_mul_u64", test_mul_u64, 1, 0, 1 }, - { "test_div_u64", test_div_u64, 1, 0, 1 }, - { "test_unset_bit", test_unset_bit, 1, 0, 1 }, - { "test_uint_array", test_uint_array, 1, 0, 1 }, - { "test_dump", test_dump, 1, 0, 1 }, + { "test_clz_u64", test_clz_u64, 1, 0, 0 }, + { "test_load", test_load, 1, 0, 0 }, + { "test_load_str_u64", test_load_str_u64, 1, 0, 0 }, + { "test_add_u64", test_add_u64, 1, 0, 0 }, + { "test_sub_u64", test_sub_u64, 1, 0, 0 }, + { "test_mul_u64", test_mul_u64, 1, 0, 0 }, + { "test_div_u64", test_div_u64, 1, 0, 0 }, + { "test_unset_bit", test_unset_bit, 1, 0, 0 }, + { "test_uint_array", test_uint_array, 1, 0, 0 }, + { "test_dump", test_dump, 1, 0, 0 }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index 2d3a4597..144e06fc 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -41,7 +41,7 @@ static void test_checks(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int input_mode; int eci; @@ -65,10 +65,6 @@ static void test_checks(int index, int debug) { }; int data_size = sizeof(data) / sizeof(struct item); - char *text; - char *primary; - char escaped_primary[1024]; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -90,7 +86,7 @@ static void test_checks(int index, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode(%d) ret %d != %d (%s)\n", i, data[i].symbology, ret, data[i].ret, symbol->errtxt); ret = strcmp(symbol->errtxt, data[i].expected); @@ -108,7 +104,7 @@ static void test_input_mode(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int input_mode; int ret; @@ -143,7 +139,7 @@ static void test_input_mode(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); assert_equal(symbol->input_mode, data[i].expected_input_mode, "i:%d symbol->input_mode %d != %d\n", i, symbol->input_mode, data[i].expected_input_mode); @@ -160,7 +156,7 @@ static void test_escape_char_process(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int ret; int expected_width; char *expected; @@ -199,7 +195,7 @@ static void test_escape_char_process(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE128, data[i].input_mode | ESCAPE_MODE, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -219,7 +215,7 @@ static void test_escape_char_process(int index, int generate, int debug) { testFinish(); } -static void test_cap(int index, int debug) { +static void test_cap(int index) { testStart(""); @@ -288,7 +284,6 @@ static void test_encode_file_directory(void) { int ret; char dirname[] = "in_dir"; - int fd; struct zint_symbol *symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); @@ -331,12 +326,12 @@ static void test_bad_args(void) { assert_zero(ret, "ZBarcode_Cap(10, ~0) ret 0x%X != 0\n", ret); // NULL symbol - assert_equal(ZBarcode_Encode(NULL, data, 1), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(NULL, data, 1) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode(NULL, (unsigned char *) data, 1), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(NULL, data, 1) != ZINT_ERROR_INVALID_DATA\n"); assert_equal(ZBarcode_Print(NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Print(NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_equal(ZBarcode_Buffer(NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Buffer(NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_equal(ZBarcode_Buffer_Vector(NULL, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Buffer_Vector(NULL, 0) != ZINT_ERROR_INVALID_DATA\n"); - assert_equal(ZBarcode_Encode_and_Print(NULL, data, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(NULL, data, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); - assert_equal(ZBarcode_Encode_and_Buffer(NULL, data, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(NULL, data, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_and_Print(NULL, (unsigned char *) data, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(NULL, data, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_and_Buffer(NULL, (unsigned char *) data, 1, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(NULL, data, 1, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_equal(ZBarcode_Encode_File(NULL, filename), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File(NULL, filename) != ZINT_ERROR_INVALID_DATA\n"); assert_equal(ZBarcode_Encode_File_and_Print(NULL, filename, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Print(NULL, filename, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_equal(ZBarcode_Encode_File_and_Buffer(NULL, filename, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File_and_Buffer(NULL, filename, 0) != ZINT_ERROR_INVALID_DATA\n"); @@ -366,13 +361,13 @@ static void test_bad_args(void) { // Empty data/filename symbol->errtxt[0] = '\0'; - assert_equal(ZBarcode_Encode(symbol, empty, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(symbol, empty, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode(symbol, (unsigned char *) empty, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode(symbol, empty, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode(symbol, empty, 0) no errtxt\n"); symbol->errtxt[0] = '\0'; - assert_equal(ZBarcode_Encode_and_Print(symbol, empty, 0, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(symbol, empty, 0, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_and_Print(symbol, (unsigned char *) empty, 0, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Print(symbol, empty, 0, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_and_Print(symbol, empty, 0, 0) no errtxt\n"); symbol->errtxt[0] = '\0'; - assert_equal(ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0) != ZINT_ERROR_INVALID_DATA\n"); + assert_equal(ZBarcode_Encode_and_Buffer(symbol, (unsigned char *) empty, 0, 0), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0) != ZINT_ERROR_INVALID_DATA\n"); assert_nonzero(strlen(symbol->errtxt), "ZBarcode_Encode_and_Buffer(symbol, empty, 0, 0) no errtxt\n"); symbol->errtxt[0] = '\0'; assert_equal(ZBarcode_Encode_File(symbol, empty), ZINT_ERROR_INVALID_DATA, "ZBarcode_Encode_File(symbol, empty) != ZINT_ERROR_INVALID_DATA\n"); @@ -395,7 +390,7 @@ int main(int argc, char *argv[]) { { "test_checks", test_checks, 1, 0, 1 }, { "test_input_mode", test_input_mode, 1, 0, 1 }, { "test_escape_char_process", test_escape_char_process, 1, 1, 1 }, - { "test_cap", test_cap, 1, 0, 1 }, + { "test_cap", test_cap, 1, 0, 0 }, { "test_encode_file_zero_length", test_encode_file_zero_length, 0, 0, 0 }, { "test_encode_file_directory", test_encode_file_directory, 0, 0, 0 }, { "test_bad_args", test_bad_args, 0, 0, 0 }, diff --git a/backend/tests/test_mailmark.c b/backend/tests/test_mailmark.c index d4d098da..db61a0a9 100644 --- a/backend/tests/test_mailmark.c +++ b/backend/tests/test_mailmark.c @@ -36,7 +36,7 @@ static void test_input(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -109,7 +109,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_MAILMARK, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -133,12 +133,12 @@ static void test_encode_vector(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret_encode; float w; float h; int ret_vector; - unsigned char *expected_daft; + char *expected_daft; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -179,7 +179,7 @@ static void test_encode_vector(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); assert_equal(symbol->rows, 3, "i:%d symbol->rows %d != 3\n", i, symbol->rows); @@ -203,7 +203,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; int expected_rows; @@ -231,7 +231,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_MAILMARK, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_maxicode.c b/backend/tests/test_maxicode.c index 003c6520..8e00eaf1 100644 --- a/backend/tests/test_maxicode.c +++ b/backend/tests/test_maxicode.c @@ -38,7 +38,7 @@ static void test_large(int index, int debug) { int ret; struct item { int option_1; - unsigned char *pattern; + char *pattern; int length; char* primary; int ret; @@ -73,7 +73,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_MAXICODE, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); strcpy(symbol->primary, data[i].primary); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -95,7 +95,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int input_mode; int option_1; - unsigned char *data; + char *data; char* primary; int ret; @@ -190,7 +190,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_MAXICODE, data[i].input_mode, -1 /*eci*/, data[i].option_1, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); strcpy(symbol->primary, data[i].primary); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -224,7 +224,7 @@ static void test_best_supported_set(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; float w; float h; @@ -233,7 +233,7 @@ static void test_best_supported_set(int index, int generate, int debug) { int expected_rows; int expected_width; char *comment; - unsigned char *expected; + char *expected; }; struct item data[] = { /* 0*/ { "am.//ab,\034TA# z\015!", 0, 100, 100, 0, 33, 30, "TODO: Better data and verify expected", @@ -288,7 +288,7 @@ static void test_best_supported_set(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -322,7 +322,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; }; @@ -351,7 +351,7 @@ static void test_fuzz(int index, int debug) { length = strlen(data[i].data); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_medical.c b/backend/tests/test_medical.c index d21342fe..76e81785 100644 --- a/backend/tests/test_medical.c +++ b/backend/tests/test_medical.c @@ -39,7 +39,7 @@ static void test_large(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -74,7 +74,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -96,9 +96,9 @@ static void test_hrt(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; - unsigned char *expected; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -112,8 +112,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -123,10 +121,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -141,7 +139,7 @@ static void test_input(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -186,7 +184,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -210,7 +208,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -267,7 +265,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_pcx.c b/backend/tests/test_pcx.c index a150b5bc..cfdb852a 100644 --- a/backend/tests/test_pcx.c +++ b/backend/tests/test_pcx.c @@ -48,7 +48,7 @@ static void test_pcx(int index, int debug) { char *fgcolour; char *bgcolour; float scale; - unsigned char *data; + char *data; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -92,7 +92,7 @@ static void test_pcx(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); char *filename = "out.pcx"; diff --git a/backend/tests/test_pdf417.c b/backend/tests/test_pdf417.c index ef36de7e..d94fd103 100644 --- a/backend/tests/test_pdf417.c +++ b/backend/tests/test_pdf417.c @@ -41,7 +41,7 @@ static void test_options(int index, int debug) { int option_1; int option_2; int option_3; - unsigned char *data; + char *data; int ret_encode; int ret_vector; @@ -80,7 +80,7 @@ static void test_options(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1, data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); assert_equal(symbol->option_1, data[i].expected_option_1, "i:%d symbol->option_1 %d != %d (%d) (%s)\n", i, symbol->option_1, data[i].expected_option_1, data[i].option_1, symbol->errtxt); @@ -120,7 +120,7 @@ static void test_reader_init(int index, int generate, int debug) { int symbology; int input_mode; int output_options; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -146,7 +146,7 @@ static void test_reader_init(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, -1 /*option_1*/, -1 /*option_2*/, -1, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -177,7 +177,7 @@ static void test_input(int index, int generate, int debug) { int symbology; int input_mode; int eci; - unsigned char *data; + char *data; int ret; int expected_eci; int expected_rows; @@ -229,7 +229,7 @@ static void test_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -264,7 +264,7 @@ static void test_encode(int index, int generate, int debug) { int input_mode; int option_1; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -622,7 +622,7 @@ static void test_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -670,7 +670,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int option_1; int ret; @@ -951,7 +951,7 @@ static void test_fuzz(int index, int debug) { length = strlen(data[i].data); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_plessey.c b/backend/tests/test_plessey.c index d453ef2b..a574a8de 100644 --- a/backend/tests/test_plessey.c +++ b/backend/tests/test_plessey.c @@ -39,7 +39,7 @@ static void test_large(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -76,7 +76,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -98,9 +98,9 @@ static void test_hrt(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; - unsigned char *expected; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -120,8 +120,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -131,10 +129,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -150,7 +148,7 @@ static void test_input(int index, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -173,7 +171,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -195,7 +193,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -242,7 +240,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_png.c b/backend/tests/test_png.c index a33df6a1..1eefb5a3 100644 --- a/backend/tests/test_png.c +++ b/backend/tests/test_png.c @@ -47,7 +47,7 @@ static void test_pixel_plot(int index, int debug) { struct item { int width; int height; - unsigned char *pattern; + char *pattern; int repeat; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) @@ -63,8 +63,6 @@ static void test_pixel_plot(int index, int debug) { int data_size = ARRAY_SIZE(data); char *png = "out.png"; - char escaped[1024]; - int escaped_size = 1024; char data_buf[8 * 2 + 1]; @@ -91,7 +89,7 @@ static void test_pixel_plot(int index, int debug) { } assert_equal(size, (int) strlen(data_buf), "i:%d png_pixel_plot size %d != strlen(data_buf) %d\n", i, size, (int) strlen(data_buf)); - symbol->bitmap = data_buf; + symbol->bitmap = (unsigned char *) data_buf; ret = png_pixel_plot(symbol, data_buf); assert_zero(ret, "i:%d png_pixel_plot ret %d != 0 (%s)\n", i, ret, symbol->errtxt); @@ -125,7 +123,7 @@ static void test_print(int index, int generate, int debug) { int option_2; int height; float scale; - unsigned char *data; + char *data; char *composite; char *expected_file; char *comment; @@ -205,7 +203,7 @@ static void test_print(int index, int generate, int debug) { } int text_length = strlen(text); - ret = ZBarcode_Encode(symbol, text, text_length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, text_length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, png); diff --git a/backend/tests/test_postal.c b/backend/tests/test_postal.c index 9c5ac147..6638ba6d 100644 --- a/backend/tests/test_postal.c +++ b/backend/tests/test_postal.c @@ -42,7 +42,7 @@ static void test_large(int index, int debug) { int ret; struct item { int symbology; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -85,7 +85,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -105,7 +105,7 @@ static void test_koreapost(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret_encode; int ret_vector; @@ -130,7 +130,7 @@ static void test_koreapost(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret_encode); if (data[i].ret_vector != -1) { @@ -154,7 +154,7 @@ static void test_japanpost(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret_encode; int ret_vector; @@ -182,7 +182,7 @@ static void test_japanpost(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret_encode); if (data[i].ret_vector != -1) { @@ -207,7 +207,7 @@ static void test_input(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -261,7 +261,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -284,7 +284,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -388,7 +388,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_print.c b/backend/tests/test_print.c index 148f6486..a81721a8 100644 --- a/backend/tests/test_print.c +++ b/backend/tests/test_print.c @@ -38,9 +38,16 @@ static void test_print(int index, int generate, int debug) { testStart(""); - int have_identify = testUtilHaveIdentify(); - int have_inkscape = testUtilHaveInkscape(); - int have_ghostscript = testUtilHaveGhostscript(); + int have_identify = 0; + int have_libreoffice = 0; + int have_ghostscript = 0; + int have_vnu = 0; + if (generate) { + have_identify = testUtilHaveIdentify(); + have_libreoffice = testUtilHaveLibreOffice(); + have_ghostscript = testUtilHaveGhostscript(); + have_vnu = testUtilHaveVnu(); + } int ret; struct item { @@ -48,7 +55,7 @@ static void test_print(int index, int generate, int debug) { int option_1; int option_2; float scale; - unsigned char *data; + char *data; char *expected_file; }; struct item data[] = { @@ -104,7 +111,7 @@ static void test_print(int index, int generate, int debug) { symbol->scale = data[i].scale; } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, "out."); @@ -134,9 +141,13 @@ static void test_print(int index, int generate, int debug) { assert_zero(ret, "i:%d %s ghostscript %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else if (strcmp(exts[j], "svg") == 0 || strcmp(exts[j], "emf") == 0) { - if (have_inkscape) { - ret = testUtilVerifyInkscape(expected_file, debug); - assert_zero(ret, "i:%d %s inkscape %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); + if (have_libreoffice) { + ret = testUtilVerifyLibreOffice(expected_file, debug); // Slow + assert_zero(ret, "i:%d %s libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); + } + if (have_vnu && strcmp(exts[j], "svg") == 0) { + ret = testUtilVerifyVnu(expected_file, debug); // Very slow + assert_zero(ret, "i:%d %s vnu %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else if (strcmp(exts[j], "txt") != 0) { // I.e. rasters if (have_identify) { diff --git a/backend/tests/test_ps.c b/backend/tests/test_ps.c index 95f4922b..a3a076ef 100644 --- a/backend/tests/test_ps.c +++ b/backend/tests/test_ps.c @@ -36,7 +36,7 @@ static void test_print(int index, int generate, int debug) { testStart(""); - int have_inkscape = testUtilHaveInkscape(); + int have_ghostscript = testUtilHaveGhostscript(); int ret; struct item { @@ -48,7 +48,7 @@ static void test_print(int index, int generate, int debug) { int option_2; char *fgcolour; char *bgcolour; - unsigned char *data; + char *data; char *expected_file; }; struct item data[] = { @@ -94,7 +94,7 @@ static void test_print(int index, int generate, int debug) { strcpy(symbol->bgcolour, data[i].bgcolour); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, eps); @@ -107,9 +107,9 @@ static void test_print(int index, int generate, int debug) { data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); - if (have_inkscape) { - ret = testUtilVerifyInkscape(data[i].expected_file, debug); - assert_zero(ret, "i:%d %s inkscape %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); + if (have_ghostscript) { + ret = testUtilVerifyGhostscript(data[i].expected_file, debug); + assert_zero(ret, "i:%d %s ghostscript %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); } } else { assert_nonzero(testUtilExists(symbol->outfile), "i:%d testUtilExists(%s) == 0\n", i, symbol->outfile); @@ -128,14 +128,13 @@ static void test_print(int index, int generate, int debug) { void ps_convert(const unsigned char *string, unsigned char *ps_string); -static void test_ps_convert(int index, int debug) { +static void test_ps_convert(int index) { testStart(""); - int ret; struct item { - unsigned char *data; - unsigned char *expected; + char *data; + char *expected; }; struct item data[] = { /* 0*/ { "1\\(é)2€3", "1\\\\\\(\351\\)23" }, @@ -148,8 +147,8 @@ static void test_ps_convert(int index, int debug) { if (index != -1 && i != index) continue; - ps_convert(data[i].data, converted); - assert_zero(strcmp(converted, data[i].expected), "i:%d ps_convert(%s) %s != %s\n", i, data[i].data, converted, data[i].expected); + ps_convert((unsigned char *) data[i].data, converted); + assert_zero(strcmp((char *) converted, data[i].expected), "i:%d ps_convert(%s) %s != %s\n", i, data[i].data, converted, data[i].expected); } testFinish(); @@ -159,7 +158,7 @@ int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ { "test_print", test_print, 1, 1, 1 }, - { "test_ps_convert", test_ps_convert, 1, 0, 1 }, + { "test_ps_convert", test_ps_convert, 1, 0, 0 }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_qr.c b/backend/tests/test_qr.c index c8f20eae..ac506ae5 100644 --- a/backend/tests/test_qr.c +++ b/backend/tests/test_qr.c @@ -37,7 +37,7 @@ static void test_qr_options(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int option_1; int option_2; int ret_encode; @@ -102,7 +102,7 @@ static void test_qr_options(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); if (index == -1 && data[i].compare_previous != -1) { ret = testUtilSymbolCmp(symbol, &previous_symbol); @@ -132,7 +132,7 @@ static void test_qr_input(int index, int generate, int debug) { int input_mode; int eci; int option_3; - unsigned char *data; + char *data; int ret; int expected_eci; char *expected; @@ -265,7 +265,7 @@ static void test_qr_input(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -292,7 +292,7 @@ static void test_qr_gs1(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; char *expected; char *comment; @@ -327,7 +327,7 @@ static void test_qr_gs1(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -352,7 +352,7 @@ static void test_qr_optimize(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int ret; char *expected; @@ -412,7 +412,7 @@ static void test_qr_optimize(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -436,7 +436,7 @@ static void test_qr_encode(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int option_2; int ret; @@ -935,7 +935,7 @@ static void test_qr_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -969,7 +969,7 @@ static void test_microqr_options(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int option_1; int option_2; int ret_encode; @@ -1051,7 +1051,7 @@ static void test_microqr_options(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); if (index == -1 && data[i].compare_previous != -1) { ret = testUtilSymbolCmp(symbol, &previous_symbol); @@ -1080,7 +1080,7 @@ static void test_microqr_input(int index, int generate, int debug) { struct item { int input_mode; int option_3; - unsigned char *data; + char *data; int ret; char *expected; char *comment; @@ -1162,7 +1162,7 @@ static void test_microqr_input(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -1188,7 +1188,7 @@ static void test_microqr_padding(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int option_1; int ret; char *expected; @@ -1242,7 +1242,7 @@ static void test_microqr_padding(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -1268,7 +1268,7 @@ static void test_microqr_optimize(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int option_2; int ret; @@ -1312,7 +1312,7 @@ static void test_microqr_optimize(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -1336,7 +1336,7 @@ static void test_microqr_encode(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int option_2; int ret; @@ -1522,7 +1522,7 @@ static void test_microqr_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -1557,7 +1557,7 @@ static void test_upnqr_input(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int ret; char *expected; char *comment; @@ -1589,7 +1589,7 @@ static void test_upnqr_input(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); assert_equal(symbol->eci, 4, "i:%d ZBarcode_Encode symbol->eci %d != 4\n", i, symbol->eci); @@ -1616,7 +1616,7 @@ static void test_upnqr_encode(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int option_2; int ret; @@ -1729,7 +1729,7 @@ static void test_upnqr_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -1763,7 +1763,7 @@ static void test_rmqr_options(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int option_1; int option_2; int ret_encode; @@ -1861,7 +1861,7 @@ static void test_rmqr_options(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); if (data[i].ret_vector != -1) { @@ -1885,7 +1885,7 @@ static void test_rmqr_input(int index, int generate, int debug) { struct item { int input_mode; int option_3; - unsigned char *data; + char *data; int ret; char *expected; char *comment; @@ -1933,7 +1933,7 @@ static void test_rmqr_input(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -1958,7 +1958,7 @@ static void test_rmqr_gs1(int index, int generate, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret; char *expected; char *comment; @@ -1994,7 +1994,7 @@ static void test_rmqr_gs1(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -2019,7 +2019,7 @@ static void test_rmqr_optimize(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int ret; char *expected; @@ -2071,7 +2071,7 @@ static void test_rmqr_optimize(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -2095,7 +2095,7 @@ static void test_rmqr_encode(int index, int generate, int debug) { int ret; struct item { int input_mode; - unsigned char *data; + char *data; int option_1; int option_2; int ret; @@ -2156,7 +2156,7 @@ static void test_rmqr_encode(int index, int generate, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_raster.c b/backend/tests/test_raster.c index ae50690f..3cc32e1a 100644 --- a/backend/tests/test_raster.c +++ b/backend/tests/test_raster.c @@ -51,7 +51,7 @@ static void test_options(int index, int debug) { char *fgcolour; char *bgcolour; int rotate_angle; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -88,7 +88,7 @@ static void test_options(int index, int debug) { strcpy(symbol->bgcolour, data[i].bgcolour); } - ret = ZBarcode_Encode_and_Buffer(symbol, data[i].data, length, data[i].rotate_angle); + ret = ZBarcode_Encode_and_Buffer(symbol, (unsigned char *) data[i].data, length, data[i].rotate_angle); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -111,7 +111,7 @@ static void test_buffer(int index, int generate, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; char *composite; int expected_height; @@ -274,7 +274,7 @@ static void test_buffer(int index, int generate, int debug) { } int length = strlen(text); - ret = ZBarcode_Encode(symbol, text, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); assert_zero(ret, "i:%d ZBarcode_Encode(%s) ret %d != 0 (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, 0); @@ -311,7 +311,7 @@ static void test_upcean_hrt(int index, int debug) { struct item { int symbology; int show_hrt; - unsigned char *data; + char *data; int ret; int expected_height; @@ -379,7 +379,7 @@ static void test_upcean_hrt(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode_and_Buffer(symbol, data[i].data, length, 0); + ret = ZBarcode_Encode_and_Buffer(symbol, (unsigned char *) data[i].data, length, 0); assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); assert_nonnull(symbol->bitmap, "i:%d (%d) symbol->bitmap NULL\n", i, data[i].symbology); @@ -448,7 +448,7 @@ static void test_row_separator(int index, int debug) { int border_width; int option_1; int option_3; - unsigned char *data; + char *data; int ret; int expected_height; @@ -486,7 +486,7 @@ static void test_row_separator(int index, int debug) { symbol->border_width = data[i].border_width; } - ret = ZBarcode_Encode_and_Buffer(symbol, data[i].data, length, 0); + ret = ZBarcode_Encode_and_Buffer(symbol, (unsigned char *) data[i].data, length, 0); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); assert_nonnull(symbol->bitmap, "i:%d (%s) symbol->bitmap NULL\n", i, testUtilBarcodeName(data[i].symbology)); @@ -533,8 +533,8 @@ static void test_stacking(int index, int debug) { int output_options; int option_1; int option_3; - unsigned char *data; - unsigned char *data2; + char *data; + char *data2; int expected_height; int expected_rows; @@ -561,11 +561,11 @@ static void test_stacking(int index, int debug) { assert_nonnull(symbol, "Symbol not created\n"); int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, -1, data[i].option_3, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ret %d != zero\n", i, ret); int length2 = strlen(data[i].data2); - ret = ZBarcode_Encode(symbol, data[i].data2, length2); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data2, length2); assert_zero(ret, "i:%d ret %d != zero\n", i, ret); ret = ZBarcode_Buffer(symbol, 0); @@ -616,7 +616,7 @@ static void test_output_options(int index, int debug) { int border_width; int output_options; int rotate_angle; - unsigned char *data; + char *data; int ret; int expected_height; @@ -692,8 +692,6 @@ static void test_output_options(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - struct zint_vector_rect *rect; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -709,7 +707,7 @@ static void test_output_options(int index, int debug) { symbol->border_width = data[i].border_width; } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%s) ret %d != 0 (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, data[i].rotate_angle); @@ -754,8 +752,8 @@ static void test_draw_string_wrap(int index, int debug) { struct item { int symbology; int output_options; - unsigned char *data; - unsigned char* text; + char *data; + char* text; int expected_height; int expected_rows; @@ -782,11 +780,11 @@ static void test_draw_string_wrap(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 (%s)\n", i, data[i].symbology, ret, symbol->errtxt); // Cheat by overwriting text - strcpy(symbol->text, data[i].text); + strcpy((char *) symbol->text, data[i].text); ret = ZBarcode_Buffer(symbol, 0); assert_zero(ret, "i:%d ZBarcode_Buffer(%d) ret %d != 0 (%s)\n", i, data[i].symbology, ret, symbol->errtxt); @@ -825,7 +823,7 @@ static void test_code128_utf8(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int expected_height; int expected_rows; @@ -851,7 +849,7 @@ static void test_code128_utf8(int index, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_CODE128, UNICODE_MODE, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, BARCODE_CODE128, ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, 0); @@ -895,7 +893,7 @@ static void test_scale(int index, int debug) { int border_width; int output_options; float scale; - unsigned char *data; + char *data; char *composite; int expected_height; @@ -961,7 +959,7 @@ static void test_scale(int index, int debug) { } int length = strlen(text); - ret = ZBarcode_Encode(symbol, text, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer(symbol, 0); diff --git a/backend/tests/test_rss.c b/backend/tests/test_rss.c index 899bb1d4..6999cf49 100644 --- a/backend/tests/test_rss.c +++ b/backend/tests/test_rss.c @@ -1059,8 +1059,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; diff --git a/backend/tests/test_sjis.c b/backend/tests/test_sjis.c index ab70131c..ea003c46 100644 --- a/backend/tests/test_sjis.c +++ b/backend/tests/test_sjis.c @@ -112,7 +112,7 @@ static void test_sjis_utf8tomb(int index) { int ret; struct item { - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -151,7 +151,7 @@ static void test_sjis_utf8tomb(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - ret = sjis_utf8tomb(&symbol, data[i].data, &ret_length, jisdata); + ret = sjis_utf8tomb(&symbol, (unsigned char *) data[i].data, &ret_length, jisdata); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol.errtxt); if (ret == 0) { assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); @@ -172,7 +172,7 @@ static void test_sjis_utf8tosb(int index) { struct item { int eci; int full_multibyte; - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -217,7 +217,7 @@ static void test_sjis_utf8tosb(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - ret = sjis_utf8tosb(data[i].eci, data[i].data, &ret_length, jisdata, data[i].full_multibyte); + ret = sjis_utf8tosb(data[i].eci, (unsigned char *) data[i].data, &ret_length, jisdata, data[i].full_multibyte); assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); @@ -234,10 +234,9 @@ static void test_sjis_cpy(int index) { testStart(""); - int ret; struct item { int full_multibyte; - unsigned char *data; + char *data; int length; int ret; size_t ret_length; @@ -268,7 +267,7 @@ static void test_sjis_cpy(int index) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; size_t ret_length = length; - sjis_cpy(data[i].data, &ret_length, jisdata, data[i].full_multibyte); + sjis_cpy((unsigned char *) data[i].data, &ret_length, jisdata, data[i].full_multibyte); assert_equal(ret_length, data[i].ret_length, "i:%d ret_length %zu != %zu\n", i, ret_length, data[i].ret_length); for (int j = 0; j < (int) ret_length; j++) { assert_equal(jisdata[j], data[i].expected_jisdata[j], "i:%d jisdata[%d] %04X != %04X\n", i, j, jisdata[j], data[i].expected_jisdata[j]); diff --git a/backend/tests/test_svg.c b/backend/tests/test_svg.c index 78eb54fe..2b8a3c92 100644 --- a/backend/tests/test_svg.c +++ b/backend/tests/test_svg.c @@ -36,53 +36,59 @@ static void test_print(int index, int generate, int debug) { testStart(""); - int have_inkscape = testUtilHaveInkscape(); + int have_libreoffice = 0; + int have_vnu = 0; + if (generate) { + have_libreoffice = testUtilHaveLibreOffice(); + have_vnu = testUtilHaveVnu(); + } int ret; struct item { int symbology; int input_mode; + int border_width; int output_options; int show_hrt; int option_1; int option_2; - unsigned char *data; + char *data; char *composite; char *expected_file; }; struct item data[] = { - /* 0*/ { BARCODE_CODE128, -1, -1, -1, -1, -1, "<>\"&'", "", "../data/svg/code128_amperands.svg" }, - /* 1*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT, -1, -1, -1, "Égjpqy", "", "../data/svg/code128_egrave_bold.svg" }, - /* 2*/ { BARCODE_CODE128, UNICODE_MODE, BOLD_TEXT | BARCODE_BOX, -1, -1, -1, "Égjpqy", "", "../data/svg/code128_egrave_bold_box3.svg" }, - /* 3*/ { BARCODE_GS1_128_CC, -1, -1, -1, 3, -1, "[00]030123456789012340", "[02]13012345678909[37]24[10]1234567ABCDEFG", "../data/svg/gs1_128_cc_fig12.svg" }, - /* 4*/ { BARCODE_CODABLOCKF, -1, -1, -1, 3, -1, "AAAAAAAAA", "", "../data/svg/codablockf_3rows.svg" }, - /* 5*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "9771384524017+12", "", "../data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg" }, - /* 6*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "9780877799306+54321", "", "../data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg" }, - /* 7*/ { BARCODE_EANX_CC, -1, -1, -1, 1, -1, "123456789012+12", "[91]123456789012345678901", "../data/svg/ean13_cc_2addon_cca_4x4.svg" }, - /* 8*/ { BARCODE_EANX_CC, -1, -1, -1, 2, -1, "123456789012+54321", "[91]1234567890", "../data/svg/ean13_cc_5addon_ccb_3x4.svg" }, - /* 9*/ { BARCODE_EANX_CC, -1, -1, 0, 2, -1, "123456789012+54321", "[91]1234567890", "../data/svg/ean13_cc_5addon_ccb_3x4_notext.svg" }, - /* 10*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "012345678905+24", "", "../data/svg/upca_2addon_ggs_5.2.6.6-5.svg" }, - /* 11*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon.svg" }, - /* 12*/ { BARCODE_UPCA, -1, BARCODE_BIND, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon_bind3.svg" }, - /* 13*/ { BARCODE_UPCA, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon_small_bold.svg" }, - /* 14*/ { BARCODE_UPCA_CC, -1, -1, -1, 1, -1, "12345678901+12", "[91]123456789", "../data/svg/upca_cc_2addon_cca_3x4.svg" }, - /* 15*/ { BARCODE_UPCA_CC, -1, -1, -1, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4.svg" }, - /* 16*/ { BARCODE_UPCA_CC, -1, -1, 0, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4_notext.svg" }, - /* 17*/ { BARCODE_UPCA_CC, -1, BARCODE_BIND, -1, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4_bind3.svg" }, - /* 18*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "1234567+12", "", "../data/svg/upce_2addon.svg" }, - /* 19*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, "1234567+12345", "", "../data/svg/upce_5addon.svg" }, - /* 20*/ { BARCODE_UPCE, -1, -1, 0, -1, -1, "1234567+12345", "", "../data/svg/upce_5addon_notext.svg" }, - /* 21*/ { BARCODE_UPCE_CC, -1, -1, -1, 1, -1, "0654321+89", "[91]1", "../data/svg/upce_cc_2addon_cca_5x2.svg" }, - /* 22*/ { BARCODE_UPCE_CC, -1, -1, -1, 2, -1, "1876543+56789", "[91]12345", "../data/svg/upce_cc_5addon_ccb_8x2.svg" }, - /* 23*/ { BARCODE_UPCE_CC, -1, -1, 0, 2, -1, "1876543+56789", "[91]12345", "../data/svg/upce_cc_5addon_ccb_8x2_notext.svg" }, - /* 24*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "1234567+12", "", "../data/svg/ean8_2addon.svg" }, - /* 25*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "1234567+12345", "", "../data/svg/ean8_5addon.svg" }, - /* 26*/ { BARCODE_EANX_CC, -1, -1, -1, 1, -1, "9876543+65", "[91]1234567", "../data/svg/ean8_cc_2addon_cca_4x3.svg" }, - /* 27*/ { BARCODE_EANX_CC, -1, -1, -1, 2, -1, "9876543+74083", "[91]123456789012345678", "../data/svg/ean8_cc_5addon_ccb_8x3.svg" }, - /* 28*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "12345", "", "../data/svg/ean5.svg" }, - /* 29*/ { BARCODE_EANX, -1, -1, -1, -1, -1, "12", "", "../data/svg/ean2.svg" }, - /* 30*/ { BARCODE_CODE39, -1, SMALL_TEXT, -1, -1, -1, "123", "", "../data/svg/code39_small.svg" }, - /* 31*/ { BARCODE_POSTNET, -1, -1, -1, -1, -1, "12345", "", "../data/svg/postnet_zip.svg" }, + /* 0*/ { BARCODE_CODE128, -1, -1, -1, -1, -1, -1, "<>\"&'", "", "../data/svg/code128_amperands.svg" }, + /* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, "Égjpqy", "", "../data/svg/code128_egrave_bold.svg" }, + /* 2*/ { BARCODE_CODE128, UNICODE_MODE, 3, BOLD_TEXT | BARCODE_BOX, -1, -1, -1, "Égjpqy", "", "../data/svg/code128_egrave_bold_box3.svg" }, + /* 3*/ { BARCODE_GS1_128_CC, -1, -1, -1, -1, 3, -1, "[00]030123456789012340", "[02]13012345678909[37]24[10]1234567ABCDEFG", "../data/svg/gs1_128_cc_fig12.svg" }, + /* 4*/ { BARCODE_CODABLOCKF, -1, -1, -1, -1, 3, -1, "AAAAAAAAA", "", "../data/svg/codablockf_3rows.svg" }, + /* 5*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, "9771384524017+12", "", "../data/svg/ean13_2addon_ggs_5.2.2.5.1-2.svg" }, + /* 6*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, "9780877799306+54321", "", "../data/svg/ean13_5addon_ggs_5.2.2.5.2-2.svg" }, + /* 7*/ { BARCODE_EANX_CC, -1, -1, -1, -1, 1, -1, "123456789012+12", "[91]123456789012345678901", "../data/svg/ean13_cc_2addon_cca_4x4.svg" }, + /* 8*/ { BARCODE_EANX_CC, -1, -1, -1, -1, 2, -1, "123456789012+54321", "[91]1234567890", "../data/svg/ean13_cc_5addon_ccb_3x4.svg" }, + /* 9*/ { BARCODE_EANX_CC, -1, -1, -1, 0, 2, -1, "123456789012+54321", "[91]1234567890", "../data/svg/ean13_cc_5addon_ccb_3x4_notext.svg" }, + /* 10*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, "012345678905+24", "", "../data/svg/upca_2addon_ggs_5.2.6.6-5.svg" }, + /* 11*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon.svg" }, + /* 12*/ { BARCODE_UPCA, -1, 3, BARCODE_BIND, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon_bind3.svg" }, + /* 13*/ { BARCODE_UPCA, -1, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, "614141234417+12345", "", "../data/svg/upca_5addon_small_bold.svg" }, + /* 14*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, 1, -1, "12345678901+12", "[91]123456789", "../data/svg/upca_cc_2addon_cca_3x4.svg" }, + /* 15*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4.svg" }, + /* 16*/ { BARCODE_UPCA_CC, -1, -1, -1, 0, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4_notext.svg" }, + /* 17*/ { BARCODE_UPCA_CC, -1, 3, BARCODE_BIND, -1, 2, -1, "12345678901+12121", "[91]1234567890123", "../data/svg/upca_cc_5addon_ccb_4x4_bind3.svg" }, + /* 18*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, "1234567+12", "", "../data/svg/upce_2addon.svg" }, + /* 19*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, "1234567+12345", "", "../data/svg/upce_5addon.svg" }, + /* 20*/ { BARCODE_UPCE, -1, -1, -1, 0, -1, -1, "1234567+12345", "", "../data/svg/upce_5addon_notext.svg" }, + /* 21*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, 1, -1, "0654321+89", "[91]1", "../data/svg/upce_cc_2addon_cca_5x2.svg" }, + /* 22*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, 2, -1, "1876543+56789", "[91]12345", "../data/svg/upce_cc_5addon_ccb_8x2.svg" }, + /* 23*/ { BARCODE_UPCE_CC, -1, -1, -1, 0, 2, -1, "1876543+56789", "[91]12345", "../data/svg/upce_cc_5addon_ccb_8x2_notext.svg" }, + /* 24*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, "1234567+12", "", "../data/svg/ean8_2addon.svg" }, + /* 25*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, "1234567+12345", "", "../data/svg/ean8_5addon.svg" }, + /* 26*/ { BARCODE_EANX_CC, -1, -1, -1, -1, 1, -1, "9876543+65", "[91]1234567", "../data/svg/ean8_cc_2addon_cca_4x3.svg" }, + /* 27*/ { BARCODE_EANX_CC, -1, -1, -1, -1, 2, -1, "9876543+74083", "[91]123456789012345678", "../data/svg/ean8_cc_5addon_ccb_8x3.svg" }, + /* 28*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, "12345", "", "../data/svg/ean5.svg" }, + /* 29*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, "12", "", "../data/svg/ean2.svg" }, + /* 30*/ { BARCODE_CODE39, -1, -1, SMALL_TEXT, -1, -1, -1, "123", "", "../data/svg/code39_small.svg" }, + /* 31*/ { BARCODE_POSTNET, -1, -1, -1, -1, -1, -1, "12345", "", "../data/svg/postnet_zip.svg" }, }; int data_size = ARRAY_SIZE(data); @@ -110,8 +116,8 @@ static void test_print(int index, int generate, int debug) { if (data[i].show_hrt != -1) { symbol->show_hrt = data[i].show_hrt; } - if (data[i].output_options & (BARCODE_BOX | BARCODE_BIND)) { - symbol->border_width = 3; + if (data[i].border_width != -1) { + symbol->border_width = data[i].border_width; } if (strlen(data[i].composite)) { text = data[i].composite; @@ -121,7 +127,7 @@ static void test_print(int index, int generate, int debug) { } int text_length = strlen(text); - ret = ZBarcode_Encode(symbol, text, text_length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, text_length); assert_zero(ret, "i:%d %s ZBarcode_Encode ret %d != 0 %s\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); strcpy(symbol->outfile, svg); @@ -129,14 +135,18 @@ static void test_print(int index, int generate, int debug) { assert_zero(ret, "i:%d %s ZBarcode_Print %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), symbol->outfile, ret); if (generate) { - printf(" /*%3d*/ { %s, %s, %s, %d, %d, %d, \"%s\", \"%s\", \"%s\" },\n", - i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), testUtilOutputOptionsName(data[i].output_options), + printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, %d, \"%s\", \"%s\", \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].border_width, testUtilOutputOptionsName(data[i].output_options), data[i].show_hrt, data[i].option_1, data[i].option_2, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].composite, data[i].expected_file); ret = rename(symbol->outfile, data[i].expected_file); assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret); - if (have_inkscape) { - ret = testUtilVerifyInkscape(data[i].expected_file, debug); - assert_zero(ret, "i:%d %s inkscape %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); + if (have_libreoffice) { + ret = testUtilVerifyLibreOffice(data[i].expected_file, debug); + assert_zero(ret, "i:%d %s libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); + } + if (have_vnu) { + ret = testUtilVerifyVnu(data[i].expected_file, debug); // Very slow + assert_zero(ret, "i:%d %s vnu libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret); } } else { assert_nonzero(testUtilExists(symbol->outfile), "i:%d testUtilExists(%s) == 0\n", i, symbol->outfile); diff --git a/backend/tests/test_telepen.c b/backend/tests/test_telepen.c index 6c83d87c..148040fb 100644 --- a/backend/tests/test_telepen.c +++ b/backend/tests/test_telepen.c @@ -38,7 +38,7 @@ static void test_large(int index, int debug) { int ret; struct item { int symbology; - unsigned char *pattern; + char *pattern; int length; int ret; int expected_rows; @@ -67,7 +67,7 @@ static void test_large(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data_buf, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -88,10 +88,10 @@ static void test_hrt(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; - unsigned char *expected; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { @@ -106,8 +106,6 @@ static void test_hrt(int index, int debug) { }; int data_size = ARRAY_SIZE(data); - char *text; - for (int i = 0; i < data_size; i++) { if (index != -1 && i != index) continue; @@ -117,10 +115,10 @@ static void test_hrt(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode ret %d != 0 %s\n", i, ret, symbol->errtxt); - assert_zero(strcmp(symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); + assert_zero(strcmp((char *) symbol->text, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->text, data[i].expected); ZBarcode_Delete(symbol); } @@ -135,7 +133,7 @@ static void test_input(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int ret; int expected_rows; @@ -164,7 +162,7 @@ static void test_input(int index, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -189,7 +187,7 @@ static void test_encode(int index, int generate, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int ret; @@ -242,7 +240,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -285,7 +283,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int ret; }; @@ -314,7 +312,7 @@ static void test_fuzz(int index, int debug) { int length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_tif.c b/backend/tests/test_tif.c index 96d85f83..344370a4 100644 --- a/backend/tests/test_tif.c +++ b/backend/tests/test_tif.c @@ -47,7 +47,7 @@ static void test_pixel_plot(int index, int debug) { struct item { int width; int height; - unsigned char *pattern; + char *pattern; int repeat; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) @@ -84,8 +84,6 @@ static void test_pixel_plot(int index, int debug) { int data_size = ARRAY_SIZE(data); char *tif = "out.tif"; - char escaped[1024]; - int escaped_size = 1024; char data_buf[2731 * 4 + 1]; @@ -112,7 +110,7 @@ static void test_pixel_plot(int index, int debug) { } assert_equal(size, (int) strlen(data_buf), "i:%d tif_pixel_plot size %d != strlen(data_buf) %d\n", i, size, (int) strlen(data_buf)); - symbol->bitmap = data_buf; + symbol->bitmap = (unsigned char *) data_buf; ret = tif_pixel_plot(symbol, data_buf); assert_zero(ret, "i:%d tif_pixel_plot ret %d != 0 (%s)\n", i, ret, symbol->errtxt); diff --git a/backend/tests/test_ultra.c b/backend/tests/test_ultra.c index 067affff..83f7b035 100644 --- a/backend/tests/test_ultra.c +++ b/backend/tests/test_ultra.c @@ -41,7 +41,7 @@ static void test_input(int index, int generate, int debug) { int eci; int option_1; int option_3; - unsigned char *data; + char *data; int ret; char *expected; char *comment; @@ -108,7 +108,7 @@ static void test_input(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_ULTRA, data[i].input_mode, data[i].eci, data[i].option_1, -1, data[i].option_3, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { @@ -137,7 +137,7 @@ static void test_encode(int index, int generate, int debug) { int eci; int option_1; int option_3; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -433,7 +433,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, BARCODE_ULTRA, data[i].input_mode, data[i].eci, data[i].option_1, -1, data[i].option_3, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { diff --git a/backend/tests/test_upcean.c b/backend/tests/test_upcean.c index 4e974c05..a80a9812 100644 --- a/backend/tests/test_upcean.c +++ b/backend/tests/test_upcean.c @@ -38,7 +38,7 @@ static void test_upce_length(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%2d*\/", line(".") - line("'<")) @@ -73,7 +73,7 @@ static void test_upce_length(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); @@ -90,7 +90,7 @@ static void test_upca_print(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) @@ -111,7 +111,7 @@ static void test_upca_print(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); strcpy(symbol->outfile, "out.gif"); @@ -132,7 +132,7 @@ static void test_isbn(int index, int debug) { int ret; struct item { - unsigned char *data; + char *data; int ret_encode; int ret_vector; }; @@ -196,7 +196,7 @@ static void test_isbn(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); if (data[i].ret_vector != -1) { @@ -217,7 +217,7 @@ static void test_vector_same(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int ret_encode; int ret_vector; }; @@ -244,7 +244,7 @@ static void test_vector_same(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret_encode, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret_encode, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); @@ -283,7 +283,7 @@ static void test_encode(int index, int generate, int debug) { struct item { int symbology; int option_2; - unsigned char *data; + char *data; int ret; int expected_rows; @@ -415,7 +415,7 @@ static void test_encode(int index, int generate, int debug) { int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, -1 /*output_options*/, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { @@ -457,7 +457,7 @@ static void test_fuzz(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int length; int ret; }; @@ -491,7 +491,7 @@ static void test_fuzz(int index, int debug) { length = strlen(data[i].data); } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); ZBarcode_Delete(symbol); diff --git a/backend/tests/test_vector.c b/backend/tests/test_vector.c index 0e0097a4..ef13283f 100644 --- a/backend/tests/test_vector.c +++ b/backend/tests/test_vector.c @@ -70,7 +70,7 @@ static void test_options(int index, int debug) { char *fgcolour; char *bgcolour; int rotate_angle; - unsigned char *data; + char *data; int ret; int expected_rows; int expected_width; @@ -103,7 +103,7 @@ static void test_options(int index, int debug) { strcpy(symbol->bgcolour, data[i].bgcolour); } - ret = ZBarcode_Encode_and_Buffer_Vector(symbol, data[i].data, length, data[i].rotate_angle); + ret = ZBarcode_Encode_and_Buffer_Vector(symbol, (unsigned char *) data[i].data, length, data[i].rotate_angle); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (ret < 5) { @@ -128,7 +128,7 @@ static void test_buffer_vector(int index, int generate, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; char *composite; int expected_height; @@ -289,7 +289,7 @@ static void test_buffer_vector(int index, int generate, int debug) { } int length = strlen(text); - ret = ZBarcode_Encode(symbol, text, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); @@ -324,7 +324,7 @@ static void test_upcean_hrt(int index, int debug) { struct item { int symbology; int show_hrt; - unsigned char *data; + char *data; int ret; int expected_height; @@ -395,7 +395,7 @@ static void test_upcean_hrt(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); @@ -446,7 +446,7 @@ static void test_row_separator(int index, int debug) { int border_width; int option_1; int option_3; - unsigned char *data; + char *data; int ret; int expected_height; @@ -484,7 +484,7 @@ static void test_row_separator(int index, int debug) { symbol->border_width = data[i].border_width; } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); @@ -514,8 +514,8 @@ static void test_stacking(int index, int debug) { int output_options; int option_1; int option_3; - unsigned char *data; - unsigned char *data2; + char *data; + char *data2; int expected_height; int expected_rows; @@ -544,11 +544,11 @@ static void test_stacking(int index, int debug) { assert_nonnull(symbol, "Symbol not created\n"); int length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, data[i].option_1, -1, data[i].option_3, data[i].output_options, data[i].data, -1, debug); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ret %d != zero\n", i, ret); int length2 = strlen(data[i].data2); - ret = ZBarcode_Encode(symbol, data[i].data2, length2); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data2, length2); assert_zero(ret, "i:%d ret %d != zero\n", i, ret); ret = ZBarcode_Buffer(symbol, 0); @@ -593,7 +593,7 @@ static void test_output_options(int index, int debug) { int whitespace_width; int border_width; int output_options; - unsigned char *data; + char *data; int ret; int expected_height; @@ -666,7 +666,7 @@ static void test_output_options(int index, int debug) { symbol->border_width = data[i].border_width; } - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); @@ -713,7 +713,7 @@ static void test_noncomposite_string_x(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int expected_width; float expected_string_x; @@ -739,7 +739,7 @@ static void test_noncomposite_string_x(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); @@ -765,7 +765,7 @@ static void test_upcean_whitespace_width(int index, int debug) { int ret; struct item { int symbology; - unsigned char *data; + char *data; int whitespace_width; int expected_width; @@ -799,7 +799,7 @@ static void test_upcean_whitespace_width(int index, int debug) { int length = strlen(data[i].data); - ret = ZBarcode_Encode(symbol, data[i].data, length); + ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); ret = ZBarcode_Buffer_Vector(symbol, 0); diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index 208edf35..ea71faf1 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -1397,8 +1397,7 @@ int testUtilHaveIdentify() { } int testUtilVerifyIdentify(char *filename, int debug) { - int ret; - char buf[512 + 128]; + char cmd[512 + 128]; if (strlen(filename) > 512) { return -1; @@ -1407,36 +1406,90 @@ int testUtilVerifyIdentify(char *filename, int debug) { if (debug & ZINT_DEBUG_TEST_PRINT) { // Verbose very noisy though so for quick check just return default output if (debug & ZINT_DEBUG_TEST_LESS_NOISY) { - sprintf(buf, "identify %s", filename); + sprintf(cmd, "identify %s", filename); } else { - sprintf(buf, "identify -verbose %s", filename); + sprintf(cmd, "identify -verbose %s", filename); } } else { - sprintf(buf, "identify -verbose %s > /dev/null", filename); + sprintf(cmd, "identify -verbose %s > /dev/null", filename); } - return system(buf); + return system(cmd); } -int testUtilHaveInkscape() { - return system("inkscape -z -V > /dev/null") == 0; +int testUtilHaveLibreOffice() { + return system("libreoffice --version > /dev/null") == 0; } -int testUtilVerifyInkscape(char *filename, int debug) { - int ret; - char buf[512 + 128]; +int testUtilVerifyLibreOffice(char *filename, int debug) { + char cmd[512 + 128]; + char svg[512]; + char *slash, *dot; + char buf[32768]; + char *b = buf, *be = buf + sizeof(buf) - 1; + FILE *fp; + int len; + /* Hack to read SVG produced by LibreOffice and search for 'x="-32767"' which indicates it didn't load barcode file */ if (strlen(filename) > 512) { return -1; } - if (debug & ZINT_DEBUG_TEST_PRINT) { - sprintf(buf, "inkscape -z -f %s", filename); // Prints nothing unless bad - printf("%s\n", buf); + slash = strrchr(filename, '/'); + if (slash) { + strcpy(svg, slash + 1); } else { - sprintf(buf, "inkscape -z -f %s > /dev/null", filename); + strcpy(svg, filename); + } + dot = strrchr(svg, '.'); + if (dot) { + strcpy(dot, ".svg"); + } else { + strcat(svg, ".svg"); + } + if (strcmp(svg, filename) == 0) { + fprintf(stderr, "testUtilVerifyLibreOffice: input '%s' same as svg '%s'\n", filename, svg); + return -1; } - return system(buf); + sprintf(cmd, "libreoffice --convert-to svg %s > /dev/null 2>&1", filename); + if (debug & ZINT_DEBUG_TEST_PRINT) { + printf("%s\n", cmd); + } + if (system(cmd) != 0) { + fprintf(stderr, "testUtilVerifyLibreOffice: failed to run '%s'\n", cmd); + return -1; + } + + fp = fopen(svg, "r"); + if (!fp) { + fprintf(stderr, "testUtilVerifyLibreOffice: failed to open '%s' (%s)\n", svg, cmd); + return -1; + } + while (!feof(fp) && b < be) { + if (fgets(b, be - b, fp) == NULL) { + fprintf(stderr, "testUtilVerifyLibreOffice: failed to get line from '%s' (%s)\n", svg, cmd); + fclose(fp); + return -1; + } + len = (int) strlen(b); + if (len == 0) { + break; + } + b += len; + } + *b = '\0'; + fclose(fp); + + if (strlen(buf) < 1024) { + fprintf(stderr, "testUtilVerifyLibreOffice: failed to get much input from '%s' (%s)\n", svg, cmd); + return -1; + } + if (strstr(buf, "x=\"-32767\"") != NULL) { + return -1; + } + remove(svg); + + return 0; } int testUtilHaveGhostscript() { @@ -1444,17 +1497,38 @@ int testUtilHaveGhostscript() { } int testUtilVerifyGhostscript(char *filename, int debug) { - int ret; + char cmd[512 + 128]; + + if (strlen(filename) > 512) { + return -1; + } + if (debug & ZINT_DEBUG_TEST_PRINT) { + sprintf(cmd, "gs -dNOPAUSE -dBATCH -dNODISPLAY -q %s", filename); // Prints nothing of interest with or without -q unless bad + printf("%s\n", cmd); + } else { + sprintf(cmd, "gs -dNOPAUSE -dBATCH -dNODISPLAY -q %s", filename); + } + + return system(cmd); +} + +/* v.Nu https://github.com/validator/validator + * Needs "$INSTALL_DIR/vnu-runtime-image/bin" in PATH */ +int testUtilHaveVnu() { + return system("vnu --version > /dev/null") == 0; +} + +int testUtilVerifyVnu(char *filename, int debug) { char buf[512 + 128]; if (strlen(filename) > 512) { return -1; } if (debug & ZINT_DEBUG_TEST_PRINT) { - sprintf(buf, "gs -dNOPAUSE -dBATCH -dNODISPLAY -q %s", filename); // Prints nothing of interest with or without -q unless bad + sprintf(buf, "vnu --svg --verbose %s", filename); printf("%s\n", buf); } else { - sprintf(buf, "gs -dNOPAUSE -dBATCH -dNODISPLAY -q %s", filename); + sprintf(buf, "vnu --svg %s", filename); } return system(buf); @@ -1764,7 +1838,6 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int int r, h; int parse; - int composite = is_composite(symbology); int upcean = is_extendable(symbology); int upca = symbology == BARCODE_UPCA || symbology == BARCODE_UPCA_CHK || symbology == BARCODE_UPCA_CC; int addon_posn; @@ -1902,7 +1975,7 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int || symbology == BARCODE_DAFT || symbology == BARCODE_USPS_IMAIL || symbology == BARCODE_AUSPOST || symbology == BARCODE_PHARMA_TWO) { for (r = 0; r < symbol->rows; r++) bwipp_row_height[r] = 1; /* Zap */ if (symbology == BARCODE_KIX) { - to_upper(bwipp_data); + to_upper((unsigned char *) bwipp_data); } else if (symbology == BARCODE_USPS_IMAIL) { char *dash = strchr(bwipp_data, '-'); if (dash) { diff --git a/backend/tests/testcommon.h b/backend/tests/testcommon.h index 505680c1..4d4de826 100644 --- a/backend/tests/testcommon.h +++ b/backend/tests/testcommon.h @@ -106,10 +106,12 @@ int testUtilCmpSvgs(char *svg1, char *svg2); int testUtilCmpEpss(char *eps1, char *eps2); int testUtilHaveIdentify(); int testUtilVerifyIdentify(char *filename, int debug); -int testUtilHaveInkscape(); -int testUtilVerifyInkscape(char *filename, int debug); +int testUtilHaveLibreOffice(); +int testUtilVerifyLibreOffice(char *filename, int debug); int testUtilHaveGhostscript(); int testUtilVerifyGhostscript(char *filename, int debug); +int testUtilHaveVnu(); +int testUtilVerifyVnu(char *filename, int debug); int testUtilCanBwipp(int symbology, int option_1, int option_2, int option_3, int debug); int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size); int testUtilBwippCmp(const struct zint_symbol *symbol, char *msg, const char *bwipp_buf, const char *expected); diff --git a/backend/tests/tools/bwipp_dump-barcode.ps.diff b/backend/tests/tools/bwipp_dump-barcode.ps.diff index fe2a392c..cfa936d0 100644 --- a/backend/tests/tools/bwipp_dump-barcode.ps.diff +++ b/backend/tests/tools/bwipp_dump-barcode.ps.diff @@ -1,5 +1,5 @@ ---- ../../../../postscriptbarcode/build/monolithic/barcode.ps 2020-09-18 02:41:06.166708679 +0100 -+++ ../tools/bwipp_dump.ps 2020-09-18 03:56:06.144846176 +0100 +--- ../../../../postscriptbarcode/build/monolithic/barcode.ps 2020-10-02 20:03:59.411955883 +0100 ++++ ../tools/bwipp_dump.ps 2020-10-03 01:47:30.454223200 +0100 @@ -29,6 +29,8 @@ % CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS % IN THE SOFTWARE. @@ -9,7 +9,7 @@ % --BEGIN TEMPLATE-- % --BEGIN RESOURCE preamble-- -@@ -25403,34 +25405,80 @@ +@@ -25404,34 +25406,80 @@ pop } ifelse @@ -109,7 +109,7 @@ end -@@ -25489,7 +25537,7 @@ +@@ -25490,7 +25538,7 @@ pop } ifelse @@ -118,7 +118,7 @@ % Get the result of encoding with ean8 and gs1-cc options (lintype) (ean8) put -@@ -25497,29 +25545,75 @@ +@@ -25498,29 +25546,75 @@ options (dontdraw) true put % Plot the linear part @@ -214,7 +214,7 @@ end -@@ -25578,34 +25672,80 @@ +@@ -25579,34 +25673,80 @@ pop } ifelse @@ -314,7 +314,7 @@ end -@@ -25679,34 +25819,80 @@ +@@ -25680,34 +25820,80 @@ /opt options >> def @@ -414,7 +414,7 @@ end -@@ -25765,7 +25951,7 @@ +@@ -25766,7 +25952,7 @@ pop } ifelse @@ -423,7 +423,7 @@ options (lintype) (databaromni) put options (linkage) true put -@@ -25776,7 +25962,7 @@ +@@ -25777,7 +25963,7 @@ linear options //databaromni exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -432,7 +432,7 @@ % Plot the separator /sepfinder { -@@ -25807,20 +25993,66 @@ +@@ -25808,20 +25994,66 @@ sep 0 [0 0 0] putinterval sep sep length 4 sub [0 0 0 0] putinterval 18 sepfinder 64 sepfinder @@ -511,7 +511,7 @@ end -@@ -25878,7 +26110,7 @@ +@@ -25879,7 +26111,7 @@ pop } ifelse @@ -520,7 +520,7 @@ options (lintype) (databarstacked) put options (linkage) true put -@@ -25889,7 +26121,7 @@ +@@ -25890,7 +26122,7 @@ linear options //databarstacked exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -529,7 +529,7 @@ % Plot the separator /sepfinder { -@@ -25917,20 +26149,52 @@ +@@ -25918,20 +26150,52 @@ sep 0 [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval 18 sepfinder @@ -594,7 +594,7 @@ end -@@ -25988,7 +26252,7 @@ +@@ -25989,7 +26253,7 @@ pop } ifelse @@ -603,7 +603,7 @@ options (lintype) (databarstackedomni) put options (linkage) true put -@@ -25999,7 +26263,7 @@ +@@ -26000,7 +26264,7 @@ linear options //databarstackedomni exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -612,7 +612,7 @@ % Plot the separator /sepfinder { -@@ -26027,20 +26291,52 @@ +@@ -26028,20 +26292,52 @@ sep 0 [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval 18 sepfinder @@ -677,7 +677,7 @@ end -@@ -26213,7 +26509,7 @@ +@@ -26214,7 +26510,7 @@ pop } ifelse @@ -686,7 +686,7 @@ options (lintype) (databarlimited) put options (linkage) true put -@@ -26224,7 +26520,7 @@ +@@ -26225,7 +26521,7 @@ linear options //databarlimited exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -695,7 +695,7 @@ % Plot the separator mark -@@ -26232,22 +26528,68 @@ +@@ -26233,22 +26529,68 @@ counttomark 1 sub array astore /sep exch def pop pop sep 0 [0 0 0] putinterval sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces @@ -778,7 +778,7 @@ end -@@ -26306,7 +26648,7 @@ +@@ -26307,7 +26649,7 @@ pop } ifelse @@ -787,7 +787,7 @@ options (lintype) (databarexpanded) put options (linkage) true put -@@ -26317,7 +26659,7 @@ +@@ -26318,7 +26660,7 @@ linear options //databarexpanded exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -796,7 +796,7 @@ % Plot the separator /sepfinder { -@@ -26346,20 +26688,60 @@ +@@ -26347,20 +26689,60 @@ 18 98 bot length 13 sub {} for 69 98 bot length 13 sub {} for ] {sepfinder} forall @@ -869,7 +869,7 @@ end -@@ -26417,7 +26799,7 @@ +@@ -26418,7 +26800,7 @@ pop } ifelse @@ -878,7 +878,7 @@ options (lintype) (databarexpandedstacked) put options (linkage) true put -@@ -26428,7 +26810,7 @@ +@@ -26429,7 +26811,7 @@ linear options //databarexpandedstacked exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -887,7 +887,7 @@ % Plot the separator /sepfinder { -@@ -26448,27 +26830,55 @@ +@@ -26449,27 +26831,55 @@ } for } bind def /sep [ bot {1 exch sub} forall ] def @@ -957,7 +957,7 @@ end -@@ -26527,7 +26937,7 @@ +@@ -26528,7 +26938,7 @@ pop } ifelse @@ -966,7 +966,7 @@ options (inkspread) (0) put options (dontdraw) true put -@@ -26554,35 +26964,87 @@ +@@ -26555,35 +26965,87 @@ linear << options {} forall >> //gs1-128 exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -1068,7 +1068,7 @@ end -@@ -27880,3 +28342,176 @@ +@@ -27881,3 +28343,176 @@ % --END ENCODER hibcazteccode-- % --END TEMPLATE-- diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index e6df65e22912cac3ad122c288a1001f900db2f8b..38fc9caad3475c5e035c656f01aeb3a3a6f6dc5c 100644 GIT binary patch literal 116808 zcmV(-K-|CmH+ooF000E$*0e?f03iV!0000G&sfao;zaNNT>vp1$yUEJ0H%@u`y9Po z7M&UcT)M1GaJ=_k5-&EC->-(AC}nayZbk)zWFCd{%&W{QW?_@MG|BXmv7JsTH#Pn; zV)v*m?m7OfqbsVzSd|DJx`lS!-J0g`^aNH)cn%)vksVI2?cwWAY3JurfrH5Rw(&fS)JVfs|25oI?{daf~Fu4uMnI{S~*5Bhyj>~AKbqQ3qQ==yV!u`Qp6 zN*98fYJv?w6DZzG-xipMX(aQq1p@6(uTALxg0|_qq6JOAD0|#2;Bu!6a#<1L_}}?C z`>wdr;M>W(mS2{zO`CsNbJeJFI^f;Fi$y=iSA<-tGb2cTkj73Gg#PXI6a7r4pa-T( zaQ_UDs{P`M5bCW%f;6zg&_7u?J|uLy9VmmqxnrbLxr z2fM{1Dz(Pn^3rv(a)0JE(bZxWVH1y;WCaZ}^6Xb-LnEW#_a?~GHDnhnpB!mJ}#?vYgir9|gJ+|4&{s5|v4onB;~{GTxD!f7^BkdpD* z4^TzrMOEZl8P*nEqJWb{hd#OQTzA5ivp&n%pS6?J#6EEf4sw2yZMhHVZ4LNY&2o9N z^go2J)&<5E-kbPaev&`iv-HTN-seX%#E<;2210}9y_1~9ejl{v2}7Ee@9AHe{m?8^ z&j+^pFhdL^5*wrsR-jT3UbSfZQ5EYdw<;Dg2A5Nc*VHvvWuEl;UD=&V-b*=n5|woB z6+x$KPYt(t-KT%YW`X72=^;iYk?XJg+HMEW9%yEZ6W-njad-HAxMCbmJhz>gvIFX; zyK(j$^fn@1pZ<#~bzI9_^1T7ZOW5W=os7CyE7#vgx=7Fn_kfE%01#gL3>}(H6XUOa zK!IeS=P>BYJeevz(`Tex;=%dKM+NX%{_rExYI-ZR1i?oW{%Tz%y3Vg0qZq*#4(yi3 zt)mb4O4y!}rd>RWAQ+V>*nJ2u<{yT}j;x*MxL-#QV!c%)NYvHOSY} z?AOgv-U^gZmf%VAe0pUX?P1iCB(r97fWg;KT#t){VAiA5`m#AOWu_GuI1QbwI&xD$ z?q%ldpz0d&^(B@{188`P>@2Q2Sw_xOIuH|yGsk^`aG6ZeVk}?hRfYuaYJ}yk^mzhO z>qr}zJ>}I2WW@cSbC7nw(2I5vNktVCq{^$#$u#?qzuV6}AXd28c+ue^ROToz0%{M zR#{ngHCP^u7))AlGuiL6@KqSt7mbFODF4sgUmnES4jt7HD5H|q==$J!&=vgH!!^WX z1z*e`^z^;ceDBm%SQ*>=rz9{YvGI(UB(82TNJ3WQ5#C;`Z=;?i-`ZXpYuPpc4PZdW zL;$kI=Nx6MLT12NIOnx(P)>aeg}*g6Gt&v^6uo#6>u{W8YMl4)=-~^CzW8|$^~@ZU zJ%F`tBvbC3Y_`T}v_ASvUh~&5@Z2#yHu`hmd#|GDrV6dUAUS=w)QKOYo4S-_?R+iz zerzr-GvRBTw{CDk%x>j#E_3W>rZs{BMI|}hgb&Sj6ROKIxdhBe&_vG2h9A?nLXqGe zp-nWHV)rl(+jSdQVgOxPbMq3F#=~)j#Z$kE{5A*x!n~8l8T0oi&)USGWZ`ZeMrXhn zH6wDeYbCm3cd@o#x~ZG>A2EBGa$5@S>3SNXfm6`Iabpq)O2}}+Bm{k3_=UQ5Y3hOw zgtALl2i@BGmyqm34Eg;N39&>Yjb3p)+~0Rfl2e0gxQM1FseB|M9Hi{Of8gbA5{1l@ zkSn2uGTbni5hOBv_aKSGPawzU$Uju@{($dP zq;voiI57Y2DHxz9W<{+fL`I3`lk&_luhyU5F2sd=DLQ9)H#*yb2kdE-EcDjFE6%xG zRYz9~@y`laLr+hxOe3z*mqd>>W;o`^632X_zp{c-9LXI^LT@P#!?uUEuQip?V5*`<~%fM`wWNc&TM4{MUM@8T
  • WsIX<;Ng`&dM96W4mxvkC( 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 J00004Sz5X)#UB6w literal 116944 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%0Ar^Nc$aCW++l2ve9=@ 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 diff --git a/backend/zint.h b/backend/zint.h index 99a27952..ae27702d 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -48,7 +48,7 @@ extern "C" { float width; /* Suggested string width, may be 0 if none recommended */ int length; int rotation; - int halign; /* Horizontal alignment: 0 for centre (middle, 1 for left (start), 2 for right (end) */ + int halign; /* Horizontal alignment: 0 for centre (middle), 1 for left (start), 2 for right (end) */ unsigned char *text; struct zint_vector_string *next; /* Pointer to next character */ }; @@ -274,7 +274,7 @@ extern "C" { #define ZINT_WARN_NONCOMPLIANT 4 #define ZINT_ERROR 5 /* Warn/error marker, not returned */ #define ZINT_ERROR_TOO_LONG 5 -#define ZINT_ERROR_INVALID_DATA 6 +#define ZINT_ERROR_INVALID_DATA 6 #define ZINT_ERROR_INVALID_CHECK 7 #define ZINT_ERROR_INVALID_OPTION 8 #define ZINT_ERROR_ENCODING_PROBLEM 9 diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index e04eef44..59bf724b 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -189,7 +189,7 @@ static char *s_code_list[] = { "UPC-A+Check", "UPC-E", "UPC-E+Check", - "Postnet", + "POSTNET", "MSIPlessey", "FIM", "Logmars", @@ -217,7 +217,7 @@ static char *s_code_list[] = { "GS1DataBarStacked", "GS1DataBarSstackedOmni", "GS1DataBarExpandedStacked", - "Planet", + "PLANET", "DPDCode", "MicroPDF417", "USPSIntelligentMail", diff --git a/docs/manual.txt b/docs/manual.txt index f0817730..07931114 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -284,7 +284,7 @@ Numeric Value | Barcode Name 35 | UPC-A + Check Digit 37 | UPC-E 38 | UPC-E + Check Digit -40 | PostNet +40 | POSTNET 47 | MSI Plessey 49 | FIM 50 | LOGMARS @@ -946,7 +946,7 @@ plotted in green. int main(int argc, char **argv) { struct zint_symbol *my_symbol; - my_symbol = ZBarcode_Create(); + my_symbol = ZBarcode_Create(); strcpy(my_symbol->fgcolour, "00ff00"); my_symbol->height = 400; ZBarcode_Encode_and_Print(my_symbol, argv[1], 0, 0); @@ -982,7 +982,7 @@ ZINT_WARN_NONCOMPLIANT | The symbol was created but is not compliant with | (e.g. height, GS1 AI data lengths). ZINT_ERROR | Marks the divide between warnings and errors. | For return values greater than or equal to - | this no symbol is generated. + | this no symbol is generated. ZINT_ERROR_TOO_LONG | The input data is too long or too short for the | selected symbology. No symbol has been | generated. @@ -1081,7 +1081,7 @@ Value | 35 | BARCODE_UPCA_CHK | UPC-A + Check Digit 37 | BARCODE_UPCE | UPC-E 38 | BARCODE_UPCE_CHK | UPC-E + Check Digit -40 | BARCODE_POSTNET | PostNet +40 | BARCODE_POSTNET | POSTNET 47 | BARCODE_MSI_PLESSEY | MSI Plessey 49 | BARCODE_FIM | FIM 50 | BARCODE_LOGMARS | LOGMARS @@ -1284,7 +1284,7 @@ int ZBarcode_Version(); The version parts are separated by hundreds. For instance, version "2.9.1" is returned as "20901". -[1] This value is ignored for Australia Post 4-State Barcodes, PostNet, PLANET, +[1] This value is ignored for Australia Post 4-State Barcodes, POSTNET, PLANET, USPS Intelligent Mail, RM4SCC, PDF417, Data Matrix, Maxicode, QR Code, GS1 DataBar Stacked, PDF417 and MicroPDF417 - all of which have a fixed height. @@ -1587,8 +1587,8 @@ Latin-1 character set is shown in Appendix A. 6.1.11.2 Code 128 Subset B -------------------------- It is sometimes advantageous to stop Code 128 from using subset mode C which -compresses numerical data. The BARCODE_CODE128B option (symbology 60) -suppresses mode C in favour of mode B. +compresses numerical data. The BARCODE_CODE128B option (symbology 60) suppresses +mode C in favour of mode B. 6.1.11.3 GS1-128 ---------------- @@ -1903,11 +1903,11 @@ Developed by Laetus, Pharmacode Two-Track is an alternative system to Pharmacode One-Track used for the identification of pharmaceuticals. The symbology is able to encode whole numbers between 4 and 64570080. -6.4.2 PostNet +6.4.2 POSTNET ------------- -Used by the United States Postal Service until 2009, the PostNet barcode was -used for encoding zip-codes on mail items. PostNet uses numerical input data -and includes a modulo-10 check digit. While Zint will encode PostNet symbols of +Used by the United States Postal Service until 2009, the POSTNET barcode was +used for encoding zip-codes on mail items. POSTNET uses numerical input data +and includes a modulo-10 check digit. While Zint will encode POSTNET symbols of any length, standard lengths as used by USPS were PostNet6 (5 digits ZIP input), PostNet10 (5 digit ZIP + 4 digit user data) and PostNet12 (5 digit ZIP + 6 digit user data). @@ -1987,7 +1987,7 @@ the input data. 6.5.5 USPS Intelligent Mail --------------------------- Also known as the OneCode barcode and used in the US by the United States Postal -Service (USPS), the Intelligent Mail system replaced the PostNet and PLANET +Service (USPS), the Intelligent Mail system replaced the POSTNET and PLANET symbologies in 2009. Intelligent Mail is a fixed length (65-bar) symbol which combines routing and customer information in a single symbol. Input data consists of a 20 digit tracking code, followed by a dash (-), followed by a @@ -2661,7 +2661,7 @@ generated using the characters A-D as shown in the table below. Code Letter | Usage ---------------------------------------------------------------------------- A | Used for courtesy reply mail and metered reply mail with a - | pre-printed PostNet symbol. + | pre-printed POSTNET symbol. B | Used for business reply mail without a pre-printed zip code. C | Used for business reply mail with a pre-printed zip code. D | Used for Information Based Indicia (IBI) postage. @@ -2817,7 +2817,7 @@ Code. Rearranged symbology numbers to match Tbarcode v8. Corrected a never ending loop bug in EAN-128. 29/9/2008 v2.0 beta r2 - Many corrections and bugfixes. (Code 11, Code 128, EAN-128, -Aztec Code, Codablock-F, Code 16k, Postnet, PLANET, NVE-18, PZN, Data Matrix +Aztec Code, Codablock-F, Code 16k, POSTNET, PLANET, NVE-18, PZN, Data Matrix ECC200, Maxicode and QR Code) v2.0 - Made corrections to Aztec Code and tested output with bcTester. Added diff --git a/frontend/main.c b/frontend/main.c index ff5c0d44..91dfa27f 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -63,11 +63,11 @@ static void types(void) { "30: GS1 DataBar Ltd 79: GS1 DataBar Stack 135: Comp UPC-A\n" "31: GS1 DataBar Exp 80: GS1 DataBar Stack Omni 136: Comp UPC-E\n" "32: Telepen Alpha 81: GS1 DataBar Exp Stack 137: Comp DataBar Stack\n" - "34: UPC-A 82: Planet 138: Comp DataBar Stack Omni\n" + "34: UPC-A 82: PLANET 138: Comp DataBar Stack Omni\n" "35: UPC-A + Check 84: MicroPDF 139: Comp DataBar Exp Stack\n" "37: UPC-E 85: USPS Intelligent Mail 140: Channel Code\n" "38: UPC-E + Check 86: UK Plessey 141: Code One\n" - "40: Postnet 87: Telepen Numeric 142: Grid Matrix\n" + "40: POSTNET 87: Telepen Numeric 142: Grid Matrix\n" "47: MSI Plessey 89: ITF-14 143: UPNQR\n" "49: FIM 90: KIX Code 144: Ultracode\n" "50: Logmars 92: Aztec Code 145: rMQR\n" diff --git a/frontend/tests/CMakeLists.txt b/frontend/tests/CMakeLists.txt index 66bc0dcf..218f5879 100644 --- a/frontend/tests/CMakeLists.txt +++ b/frontend/tests/CMakeLists.txt @@ -4,6 +4,7 @@ # vim: set ts=4 sw=4 et : cmake_minimum_required(VERSION 3.9) +project(zint_frontend_tests) enable_testing() @@ -15,14 +16,31 @@ set(ZINT_SANITIZE FALSE CACHE BOOL "Set sanitize compile/link flags") find_package(LibZint REQUIRED) find_package(PNG REQUIRED) -if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - if(ZINT_DEBUG) +include(CheckCCompilerFlag) + +check_c_compiler_flag(-Wall C_COMPILER_FLAG_WALL) +if(C_COMPILER_FLAG_WALL) + add_compile_options("-Wall") +endif() + +check_c_compiler_flag(-Wextra C_COMPILER_FLAG_WEXTRA) +if(C_COMPILER_FLAG_WEXTRA) + add_compile_options("-Wextra") +endif() + +if(ZINT_DEBUG) + check_c_compiler_flag(-g C_COMPILER_FLAG_G) + if(C_COMPILER_FLAG_G) add_compile_options("-g") endif() - if(ZINT_SANITIZE) +endif() + +if(ZINT_SANITIZE) + # check_c_compiler_flag fails for -fsanitize + if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") add_compile_options("-fsanitize=undefined") add_compile_options("-fsanitize=address") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address") + link_libraries("-fsanitize=undefined -fsanitize=address") endif() endif() diff --git a/frontend/tests/test_args.c b/frontend/tests/test_args.c index a025a618..4ffc6dea 100644 --- a/frontend/tests/test_args.c +++ b/frontend/tests/test_args.c @@ -161,7 +161,6 @@ static void test_dump_args(int index, int debug) { testStart(""); - int ret; struct item { int b; char *data; @@ -280,7 +279,6 @@ static void test_input(int index, int debug) { testStart(""); - int ret; struct item { int b; int batch; @@ -351,7 +349,6 @@ static void test_batch_input(int index, int debug) { testStart(""); - int ret; struct item { int b; char *data; @@ -410,7 +407,6 @@ static void test_batch_large(int index, int debug) { testStart(""); - int ret; struct item { int b; int mirror; @@ -469,7 +465,6 @@ static void test_checks(int index, int debug) { testStart(""); - int ret; struct item { int addongap; int border; diff --git a/frontend_qt/CMakeLists.txt b/frontend_qt/CMakeLists.txt index cf8090e6..a18c13fa 100644 --- a/frontend_qt/CMakeLists.txt +++ b/frontend_qt/CMakeLists.txt @@ -8,11 +8,11 @@ set(zint-qt_SRCS barcodeitem.cpp main.cpp mainwindow.cpp datawindow.cpp sequen QT5_WRAP_CPP(zint-qt_SRCS mainwindow.h datawindow.h sequencewindow.h exportwindow.h) QT5_WRAP_UI(zint-qt_SRCS mainWindow.ui extData.ui extSequence.ui extExport.ui) -# grpAztec.ui grpC49.ui grpDBExtend.ui grpLOGMARS.ui grpPDF417.ui grpUPCA.ui -# grpC11.ui grpChannel.ui grpDM.ui grpMaxicode.ui grpPZN.ui grpUPCEAN.ui -# grpC128.ui grpCodabar.ui grpDotCode.ui grpMicroPDF.ui grpQR.ui grpVIN.ui -# grpC16k.ui grpCodablockF.ui grpGrid.ui grpMQR.ui grpRMQR.ui -# grpC39.ui grpCodeOne.ui grpHX.ui grpMSICheck.ui grpUltra.ui +# grpAztec.ui grpC49.ui grpDBExtend.ui grpLOGMARS.ui grpPDF417.ui grpUPCEAN.ui +# grpC11.ui grpChannel.ui grpDM.ui grpMaxicode.ui grpQR.ui grpVIN.ui +# grpC128.ui grpCodabar.ui grpDotCode.ui grpMicroPDF.ui grpRMQR.ui +# grpC16k.ui grpCodablockF.ui grpGrid.ui grpMQR.ui grpUltra.ui +# grpC39.ui grpCodeOne.ui grpHX.ui grpMSICheck.ui grpUPCA.ui QT5_ADD_RESOURCES(zint-qt_SRCS resources.qrc) diff --git a/frontend_qt/extData.ui b/frontend_qt/extData.ui index 4ba04790..933a114d 100644 --- a/frontend_qt/extData.ui +++ b/frontend_qt/extData.ui @@ -24,7 +24,14 @@ - Data + &Data + + + Input data. Newlines (Line Feeds (0xA0)) +will be converted to spaces + + + txtDataInput @@ -46,14 +53,34 @@ - From File... + &From File... + + + Get input data from a file. Certain characters <br/>will be converted to escape sequences +<table cellpadding="3"> +<tr><td>End of Transmission (0x04)</td><td>\E</td></tr> +<tr><td>Bell (0x07)</td><td>\a</td></tr> +<tr><td>Backspace (0x08)</td><td>\b</td></tr> +<tr><td>Horizontal Tab (0x09)</td><td>\t</td></tr> +<tr><td>Vertical Tab (0x0B)</td><td>\v</td></tr> +<tr><td>Form Feed (0x0C)</td><td>\f</td></tr> +<tr><td>Carriage Return (0x0D)</td><td>\r</td></tr> +<tr><td>Escape (0x1B)</td><td>\e</td></tr> +<tr><td>Group Selector (0x1D)</td><td>\G</td></tr> +<tr><td>Record Selector (0x1E)</td><td>\R</td></tr> +<tr><td>Backslash (0x5C)</td><td>\\</td></tr> +</table> +Note that newlines (Line Feed (0x0A)) are <br/>not included - Reset + &Reset + + + Clear data window @@ -73,14 +100,20 @@ - OK + &OK + + + Close window and update input data - Cancel + &Cancel + + + Close window without updating input data diff --git a/frontend_qt/extExport.ui b/frontend_qt/extExport.ui index cbdb5054..f8f3f1bb 100644 --- a/frontend_qt/extExport.ui +++ b/frontend_qt/extExport.ui @@ -74,7 +74,7 @@ - Sat the naming convention used by the files + Set the naming convention used by the files @@ -153,7 +153,7 @@ Find a destination for your files - ... + &... @@ -166,7 +166,13 @@ - Destination Path: + &Destination Path: + + + Destination folder + + + linDestPath @@ -179,7 +185,13 @@ - File Name Prefix: + File Name &Prefix: + + + The first part of the filenames + + + linPrefix @@ -192,7 +204,13 @@ - File Name: + File &Name: + + + Set the naming convention used by the files + + + cmbFileName @@ -205,7 +223,13 @@ - File Format: + File &Format: + + + The type of file which you want to create + + + cmbFileFormat @@ -218,7 +242,10 @@ - Close + &Close + + + Close window @@ -231,23 +258,26 @@ - Export + &Export + + + Create files - 0 + 10 180 - 441 - 321 + 430 + 315 - 0 + 10 160 101 17 diff --git a/frontend_qt/extSequence.ui b/frontend_qt/extSequence.ui index 830bfb5d..8bcadfbf 100644 --- a/frontend_qt/extSequence.ui +++ b/frontend_qt/extSequence.ui @@ -42,28 +42,57 @@ - Start Value: + &Start Value: + + + linStartVal + + + Start sequence at this value - End Value: + End &Value: + + + linEndVal + + + End sequence at this value - Increment By: + Increment &By: + + + linIncVal + + + Go from start to end in steps of this amount - Format: + &Format: + + + linFormat + + + Format sequence using special characters<table cellpadding="3"> +<tr><td>#</td><td>Number or space</td></tr> +<tr><td>$</td><td>Number or '0'</td></tr> +<tr><td>*</td><td>Number or '*'</td></tr> +<tr><td>Other</td><td>Insert literally</td></tr> +</table> @@ -72,6 +101,9 @@ Sequence: + + Create a data sequence + @@ -79,13 +111,22 @@ Sequence File: + + Get a data sequence from a file + - + Generate Bar Codes: + + false + + + Save the symbols to files + @@ -100,6 +141,9 @@ true + + Start sequence at this value + @@ -107,6 +151,9 @@ 10 + + End sequence at this value + @@ -114,6 +161,9 @@ 1 + + Go from start to end in steps of this amount + @@ -121,6 +171,14 @@ $$$$$$ + + Format sequence using special characters<table cellpadding="3"> +<tr><td>#</td><td>Number or space</td></tr> +<tr><td>$</td><td>Number or '0'</td></tr> +<tr><td>*</td><td>Number or '*'</td></tr> +<tr><td>Other</td><td>Insert literally</td></tr> +</table> + @@ -129,17 +187,17 @@ Create a data sequence - Create + Crea&te - Get a data sequence from file + Get a data sequence from a file - Import... + &Import... @@ -149,10 +207,10 @@ false - Save the symbols to file + Save the symbols to files - Export... + &Export... @@ -172,7 +230,10 @@ - Sequence Preview + Sequence &Data + + + The data to be encoded, one line per symbol Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -212,14 +273,20 @@ - Reset + &Reset + + + Clear the sequence data - Close + &Close + + + Close window diff --git a/frontend_qt/grpAztec.ui b/frontend_qt/grpAztec.ui index 84053d09..30d66307 100644 --- a/frontend_qt/grpAztec.ui +++ b/frontend_qt/grpAztec.ui @@ -25,7 +25,7 @@ - Automatic Resizing + Auto&matic Resizing true @@ -35,7 +35,7 @@ - Adjust Size To: + Adjust Si&ze To: @@ -229,7 +229,7 @@ - Add Minimum Error Correction: + Add Minimum E&rror Correction: @@ -274,7 +274,7 @@ - Standard Mode + S&tandard Mode true @@ -284,14 +284,14 @@ - GS1 Data Mode + GS&1 Data Mode - HIBC Aztec Code + H&IBC Aztec Code diff --git a/frontend_qt/grpC11.ui b/frontend_qt/grpC11.ui index 34bbe746..f967186b 100644 --- a/frontend_qt/grpC11.ui +++ b/frontend_qt/grpC11.ui @@ -29,7 +29,7 @@ - Two (Mod-11) + &Two (Mod-11) true @@ -39,14 +39,14 @@ - One (Mod-11) + &One (Mod-11) - No Check Digit + &No Check Digit diff --git a/frontend_qt/grpC128.ui b/frontend_qt/grpC128.ui index 97d18bcd..1746b789 100644 --- a/frontend_qt/grpC128.ui +++ b/frontend_qt/grpC128.ui @@ -32,7 +32,7 @@ - Standard Mode + S&tandard Mode true @@ -42,21 +42,21 @@ - Subset C Supression + Subset &C Suppression - GS1-128 + GS&1-128 - HIBC 128 + H&IBC 128 diff --git a/frontend_qt/grpC16k.ui b/frontend_qt/grpC16k.ui index df574456..b74f400a 100644 --- a/frontend_qt/grpC16k.ui +++ b/frontend_qt/grpC16k.ui @@ -25,7 +25,7 @@ - Row Separator Height: + &Row Separator Height: cmbC16kRowSepHeight @@ -70,7 +70,7 @@ - Standard Mode + S&tandard Mode true @@ -80,7 +80,7 @@ - GS1 Data Mode + GS&1 Data Mode diff --git a/frontend_qt/grpC39.ui b/frontend_qt/grpC39.ui index 3e1a7525..5abde122 100644 --- a/frontend_qt/grpC39.ui +++ b/frontend_qt/grpC39.ui @@ -25,7 +25,7 @@ - No Check Digit + &No Check Digit true @@ -35,14 +35,14 @@ - HIBC 39 + H&IBC 39 - Mod-43 Check Digit + &Mod-43 Check Digit diff --git a/frontend_qt/grpC49.ui b/frontend_qt/grpC49.ui index 05369469..80152dfa 100644 --- a/frontend_qt/grpC49.ui +++ b/frontend_qt/grpC49.ui @@ -25,7 +25,7 @@ - Row Separator Height: + &Row Separator Height: cmbC49RowSepHeight @@ -70,7 +70,7 @@ - Standard Mode + S&tandard Mode true @@ -80,7 +80,7 @@ - GS1 Data Mode + GS&1 Data Mode diff --git a/frontend_qt/grpCodabar.ui b/frontend_qt/grpCodabar.ui index dae8192d..d8e1007c 100644 --- a/frontend_qt/grpCodabar.ui +++ b/frontend_qt/grpCodabar.ui @@ -17,7 +17,7 @@ - Add Check Character (Mod-16) + Add &Check Character (Mod-16) false diff --git a/frontend_qt/grpCodablockF.ui b/frontend_qt/grpCodablockF.ui index cd033450..7259c1a8 100644 --- a/frontend_qt/grpCodablockF.ui +++ b/frontend_qt/grpCodablockF.ui @@ -25,7 +25,7 @@ - Symbol Width (Columns): + Symbol &Width (Columns): cmbCbfWidth @@ -342,7 +342,7 @@ - Symbol Height (Rows): + Symbol &Height (Rows): cmbCbfHeight @@ -584,7 +584,7 @@ - Row Separator Height: + &Row Separator Height: cmbCbfRowSepHeight @@ -629,7 +629,7 @@ - Standard Mode + S&tandard Mode true @@ -639,7 +639,7 @@ - HIBC Codablock-F + H&IBC Codablock-F diff --git a/frontend_qt/grpCodeOne.ui b/frontend_qt/grpCodeOne.ui index 934da91d..6349ed8a 100644 --- a/frontend_qt/grpCodeOne.ui +++ b/frontend_qt/grpCodeOne.ui @@ -25,7 +25,7 @@ - Symbol Size: + Symbol Si&ze: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -108,7 +108,7 @@ - Standard Mode + S&tandard Mode true @@ -118,7 +118,7 @@ - GS1 Data Mode + GS&1 Data Mode diff --git a/frontend_qt/grpDM.ui b/frontend_qt/grpDM.ui index 954efeaa..bb64bbb5 100644 --- a/frontend_qt/grpDM.ui +++ b/frontend_qt/grpDM.ui @@ -25,7 +25,7 @@ - Size: + Si&ze: cmbDM200Size @@ -298,7 +298,7 @@ - Standard Mode + S&tandard Mode true @@ -308,14 +308,14 @@ - GS1 Data Mode + GS&1 Data Mode - HIBC Data Matrix + H&IBC Data Matrix @@ -325,7 +325,7 @@ - Suppress Rectangular Symbols in Automatic Mode + Suppress &Rectangular Symbols in Automatic Mode true @@ -335,7 +335,7 @@ - Allow DMRE in Automatic Mode + Allo&w DMRE in Automatic Mode false @@ -345,7 +345,7 @@ - Use separator GS for GS1 + &Use separator GS for GS1 false diff --git a/frontend_qt/grpDotCode.ui b/frontend_qt/grpDotCode.ui index e9b9dc59..209cb8e2 100644 --- a/frontend_qt/grpDotCode.ui +++ b/frontend_qt/grpDotCode.ui @@ -321,7 +321,7 @@ - &GS1 Data Mode + GS&1 Data Mode diff --git a/frontend_qt/grpGrid.ui b/frontend_qt/grpGrid.ui index 8ffb14c6..6dbce5d5 100644 --- a/frontend_qt/grpGrid.ui +++ b/frontend_qt/grpGrid.ui @@ -25,7 +25,7 @@ - Size: + Si&ze: cmbGridSize @@ -109,7 +109,7 @@ - Error Correction: + E&rror Correction: cmbGridECC @@ -182,7 +182,7 @@ - Full Multibyte + &Full Multibyte false diff --git a/frontend_qt/grpHX.ui b/frontend_qt/grpHX.ui index 05279122..5effb1a8 100644 --- a/frontend_qt/grpHX.ui +++ b/frontend_qt/grpHX.ui @@ -25,7 +25,7 @@ - Size: + Si&ze: cmbHXSize @@ -467,7 +467,7 @@ - Error Correction: + E&rror Correction: cmbHXECC @@ -508,7 +508,7 @@ - Full Multibyte + &Full Multibyte false diff --git a/frontend_qt/grpLOGMARS.ui b/frontend_qt/grpLOGMARS.ui index 7fd52619..72618208 100644 --- a/frontend_qt/grpLOGMARS.ui +++ b/frontend_qt/grpLOGMARS.ui @@ -29,7 +29,7 @@ - No Check Digit + &No Check Digit true @@ -39,7 +39,7 @@ - One (Mod-43) + &One (Mod-43) diff --git a/frontend_qt/grpMQR.ui b/frontend_qt/grpMQR.ui index 15304601..377497a8 100644 --- a/frontend_qt/grpMQR.ui +++ b/frontend_qt/grpMQR.ui @@ -24,7 +24,7 @@ - Size: + Si&ze: cmbMQRSize @@ -63,7 +63,7 @@ - Error Correction: + E&rror Correction: cmbMQRECC @@ -99,7 +99,7 @@ - Full Multibyte + &Full Multibyte false diff --git a/frontend_qt/grpMaxicode.ui b/frontend_qt/grpMaxicode.ui index ed31b0fb..0fbe86ed 100644 --- a/frontend_qt/grpMaxicode.ui +++ b/frontend_qt/grpMaxicode.ui @@ -41,7 +41,7 @@ false - &Primary Message: + P&rimary Message: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter diff --git a/frontend_qt/grpMicroPDF.ui b/frontend_qt/grpMicroPDF.ui index 1050bc7e..dd27e0b3 100644 --- a/frontend_qt/grpMicroPDF.ui +++ b/frontend_qt/grpMicroPDF.ui @@ -78,7 +78,7 @@ - Standard Mode + S&tandard Mode true @@ -88,7 +88,7 @@ - HIBC MicroPDF417 + H&IBC MicroPDF417 diff --git a/frontend_qt/grpPDF417.ui b/frontend_qt/grpPDF417.ui index 50c7d903..501b4e22 100644 --- a/frontend_qt/grpPDF417.ui +++ b/frontend_qt/grpPDF417.ui @@ -146,7 +146,7 @@ - &Error Correction Capacity: + E&rror Correction Capacity: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -224,7 +224,7 @@ - Standard Mode + S&tandard Mode true @@ -234,7 +234,7 @@ - HIBC PDF417 + H&IBC PDF417 diff --git a/frontend_qt/grpQR.ui b/frontend_qt/grpQR.ui index d7e6fa3a..2b0651bd 100644 --- a/frontend_qt/grpQR.ui +++ b/frontend_qt/grpQR.ui @@ -25,7 +25,7 @@ - Size: + Si&ze: cmbQRSize @@ -247,7 +247,7 @@ - Error Correction: + E&rror Correction: cmbQRECC @@ -297,7 +297,7 @@ - Standard Mode + S&tandard Mode true @@ -307,14 +307,14 @@ - GS1 Data Mode + GS&1 Data Mode - HIBC QR Code + H&IBC QR Code @@ -324,7 +324,7 @@ - Full Multibyte + &Full Multibyte false diff --git a/frontend_qt/grpRMQR.ui b/frontend_qt/grpRMQR.ui index 081553bd..74481c05 100644 --- a/frontend_qt/grpRMQR.ui +++ b/frontend_qt/grpRMQR.ui @@ -25,7 +25,7 @@ - Size: + Si&ze: cmbRMQRSize @@ -237,7 +237,7 @@ - Error Correction: + E&rror Correction: cmbRMQRECC @@ -277,7 +277,7 @@ - Standard Mode + S&tandard Mode true @@ -287,7 +287,7 @@ - GS1 Data Mode + GS&1 Data Mode @@ -297,7 +297,7 @@ - Full Multibyte + &Full Multibyte false diff --git a/frontend_qt/grpUPCA.ui b/frontend_qt/grpUPCA.ui index 3e9361f6..1686b44d 100644 --- a/frontend_qt/grpUPCA.ui +++ b/frontend_qt/grpUPCA.ui @@ -25,7 +25,7 @@ - &Add-on Gap: + A&dd-on Gap: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter diff --git a/frontend_qt/grpUPCEAN.ui b/frontend_qt/grpUPCEAN.ui index d520fa9f..3718f2d7 100644 --- a/frontend_qt/grpUPCEAN.ui +++ b/frontend_qt/grpUPCEAN.ui @@ -25,7 +25,7 @@ - &Add-on Gap: + A&dd-on Gap: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter diff --git a/frontend_qt/grpUltra.ui b/frontend_qt/grpUltra.ui index 2f77e918..f066a3d9 100644 --- a/frontend_qt/grpUltra.ui +++ b/frontend_qt/grpUltra.ui @@ -25,13 +25,20 @@ - A&utomatic Resizing + Auto&matic Resizing true + + + + E&rror Correction Level: + + + @@ -72,13 +79,6 @@ - - - - Error Correction Level: - - - @@ -93,7 +93,7 @@ - Standard Mode + S&tandard Mode true @@ -103,7 +103,7 @@ - GS1 Data Mode + GS&1 Data Mode diff --git a/frontend_qt/grpVIN.ui b/frontend_qt/grpVIN.ui index 082b23ff..25b8a412 100644 --- a/frontend_qt/grpVIN.ui +++ b/frontend_qt/grpVIN.ui @@ -25,7 +25,7 @@ - Import Character Prefix + &Import Character Prefix false diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index 4147696f..42f3ab1a 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -129,7 +129,7 @@ - General + &General @@ -167,7 +167,7 @@ or import from file - ... + &... @@ -301,7 +301,7 @@ or import from file false - &2D Component Data: + 2D &Component Data: txtComposite @@ -540,22 +540,23 @@ p, li { white-space: pre-wrap; } - Process escape sequences in input data -\0 - NUL character (0x00) -\E - End of Transmission (0x04) -\a - Bell (0x07) -\b - Backspace (0x08) -\t - Horizontal Tab (0x09) -\n - Line Feed (0x0A) -\v - Vertical Tab (0x0B) -\f - Form Feed (0x0C) -\r - Carriage Return (0x0D) -\e - Escape (0x1B) -\G - Group Selector (0x1D) -\R - Record Selector (0x1E) -\\ - Backslash (0x5C) -\xNN - 8-bit character (N hex) -\uNNNN - 16-bit Unicode (N hex) + Process escape sequences in input data<table cellpadding="3"> +<tr><td>\0</td><td>NUL character (0x00)</td></tr> +<tr><td>\E</td><td>End of Transmission (0x04)</td></tr> +<tr><td>\a</td><td>Bell (0x07)</td></tr> +<tr><td>\b</td><td>Backspace (0x08)</td></tr> +<tr><td>\t</td><td>Horizontal Tab (0x09)</td></tr> +<tr><td>\n</td><td>Line Feed (0x0A)</td></tr> +<tr><td>\v</td><td>Vertical Tab (0x0B)</td></tr> +<tr><td>\f</td><td>Form Feed (0x0C)</td></tr> +<tr><td>\r</td><td>Carriage Return (0x0D)</td></tr> +<tr><td>\e</td><td>Escape (0x1B)</td></tr> +<tr><td>\G</td><td>Group Selector (0x1D)</td></tr> +<tr><td>\R</td><td>Record Selector (0x1E)</td></tr> +<tr><td>\\</td><td>Backslash (0x5C)</td></tr> +<tr><td>\xNN</td><td>8-bit character (N hex)</td></tr> +<tr><td>\uNNNN</td><td>16-bit Unicode (N hex)</td></tr> +</table> &Parse Escapes @@ -605,7 +606,7 @@ p, li { white-space: pre-wrap; } - Appearance + A&ppearance @@ -773,7 +774,7 @@ p, li { white-space: pre-wrap; } - &Printing Scale: + Printing Sca&le: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -874,7 +875,7 @@ p, li { white-space: pre-wrap; } true - Colour: + Colour: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1003,7 +1004,7 @@ p, li { white-space: pre-wrap; } false - &Dot Size: + Dot S&ize: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1123,13 +1124,6 @@ p, li { white-space: pre-wrap; } - - tabMain - txtData - chkComposite - cmbCompType - txtComposite - diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index 1897aba9..b428a027 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -52,27 +52,27 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) "Australia Post Reply-Paid", "Australia Post Routing Code", "Australia Post Standard Customer", - "Aztec Code (ISO 24778)", + "Aztec Code (ISO 24778) (and HIBC)", "Aztec Runes", "Channel Code", "Codabar", - "Codablock-F", + "Codablock-F (and HIBC)", "Code 11", - "Code 128 (ISO 15417)", + "Code 128 (ISO 15417) (and GS1-128 and HIBC)", "Code 16k", "Code 2 of 5 Data Logic", "Code 2 of 5 IATA", "Code 2 of 5 Industrial", "Code 2 of 5 Interleaved", - "Code 2 of 5 Standard", + "Code 2 of 5 Standard (Matrix)", "Code 32 (Italian Pharmacode)", - "Code 39 (ISO 16388)", + "Code 39 (ISO 16388) (and HIBC)", "Code 39 Extended", "Code 49", "Code 93", "Code One", "DAFT Code", - "Data Matrix (ISO 16022)", + "Data Matrix (ISO 16022) (and HIBC)", "Deutsche Post Identcode", "Deutsche Post Leitcode", "DotCode", @@ -96,17 +96,17 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) "Korean Postal Barcode", "LOGMARS", "Maxicode (ISO 16023)", - "MicroPDF417 (ISO 24728)", + "MicroPDF417 (ISO 24728) (and HIBC)", "Micro QR Code", "MSI Plessey", "NVE-18 (SSCC-18)", - "PDF417 (ISO 15438)", + "PDF417 (ISO 15438) (and Compact and HIBC)", "Pharmacode", "Pharmacode 2-track", "Pharma Zentralnummer (PZN)", "PLANET", - "Postnet", - "QR Code (ISO 18004)", + "POSTNET", + "QR Code (ISO 18004) (and HIBC)", "Rectangular Micro QR (rMQR)", "Royal Mail 4-state Barcode", "Royal Mail 4-state Mailmark", @@ -217,7 +217,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags fl) connect(&m_bc.bc, SIGNAL(encoded()), SLOT(on_encoded())); - QShortcut *ctrl_q = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this); + QShortcut *ctrl_q = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q), this); connect(ctrl_q, SIGNAL(activated()), SLOT(quit_now())); } @@ -582,7 +582,7 @@ void MainWindow::change_options() if (tabMain->count()==3) tabMain->removeTab(1); - chkComposite->setText(tr("Add 2D Component")); + chkComposite->setText(tr("Add &2D Component")); btype->setItemText(0, tr("No border")); combobox_item_enabled(cmbFontSetting, 1, true); cmbFontSetting->setItemText(2, tr("Small")); @@ -594,8 +594,8 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Code 128")); - chkComposite->setText(tr("Add 2D Component (GS1-128 only)")); + tabMain->insertTab(1,m_optionWidget,tr("Cod&e 128")); + chkComposite->setText(tr("Add &2D Component (GS1-128 only)")); connect(m_optionWidget->findChild("radC128EAN"), SIGNAL(toggled( bool )), SLOT(composite_ean_check())); connect(m_optionWidget->findChild("radC128Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC128CSup"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -610,7 +610,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("PDF417")); + tabMain->insertTab(1,m_optionWidget,tr("PDF41&7")); connect(m_optionWidget->findChild("cmbPDFECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbPDFCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radPDFTruncated"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -626,7 +626,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Micro PDF417")); + tabMain->insertTab(1,m_optionWidget,tr("Micro PDF41&7")); connect(m_optionWidget->findChild("cmbMPDFCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radMPDFStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); } @@ -638,7 +638,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("DotCode")); + tabMain->insertTab(1,m_optionWidget,tr("DotCod&e")); connect(m_optionWidget->findChild("cmbDotCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDotStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDotGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -651,7 +651,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Aztec Code")); + tabMain->insertTab(1,m_optionWidget,tr("Aztec Cod&e")); connect(m_optionWidget->findChild("radAztecAuto"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecSize"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecECC"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -669,7 +669,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("MSI Plessey")); + tabMain->insertTab(1,m_optionWidget,tr("MSI Pless&ey")); connect(m_optionWidget->findChild("cmbMSICheck"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } @@ -680,7 +680,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Code 11")); + tabMain->insertTab(1,m_optionWidget,tr("Cod&e 11")); connect(m_optionWidget->findChild("radC11TwoCheckDigits"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC11OneCheckDigit"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC11NoCheckDigits"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -698,7 +698,7 @@ void MainWindow::change_options() connect(m_optionWidget->findChild("radC39HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); if (symbology == BARCODE_EXCODE39) { - tabMain->insertTab(1,m_optionWidget,tr("Code 39 Extended")); + tabMain->insertTab(1,m_optionWidget,tr("Cod&e 39 Extended")); if(m_optionWidget->findChild("radC39HIBC")->isChecked() == true) { m_optionWidget->findChild("radC39HIBC")->setChecked(false); @@ -707,7 +707,7 @@ void MainWindow::change_options() m_optionWidget->findChild("radC39HIBC")->setEnabled(false); } else { - tabMain->insertTab(1,m_optionWidget,tr("Code 39")); + tabMain->insertTab(1,m_optionWidget,tr("Cod&e 39")); m_optionWidget->findChild("radC39HIBC")->setEnabled(true); } } @@ -731,7 +731,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Code 16K")); + tabMain->insertTab(1,m_optionWidget,tr("Cod&e 16K")); btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbC16kRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC16kStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); @@ -755,7 +755,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Codablock-F")); + tabMain->insertTab(1,m_optionWidget,tr("Codablock&-F")); btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbCbfWidth"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbCbfHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); @@ -793,7 +793,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("QR Code")); + tabMain->insertTab(1,m_optionWidget,tr("QR Cod&e")); connect(m_optionWidget->findChild("cmbQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -809,7 +809,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("rMQR Code")); + tabMain->insertTab(1,m_optionWidget,tr("rMQR Cod&e")); connect(m_optionWidget->findChild("cmbRMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbRMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radRMQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); @@ -824,7 +824,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Han Xin Code")); + tabMain->insertTab(1,m_optionWidget,tr("Han Xin Cod&e")); connect(m_optionWidget->findChild("cmbHXSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbHXECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkHXFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); @@ -837,7 +837,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Micro QR Code")); + tabMain->insertTab(1,m_optionWidget,tr("Micro QR Cod&e")); connect(m_optionWidget->findChild("cmbMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); @@ -863,7 +863,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Maxicode")); + tabMain->insertTab(1,m_optionWidget,tr("Maxicod&e")); connect(m_optionWidget->findChild("cmbMaxiMode"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMaxiMode"), SIGNAL(currentIndexChanged( int )), SLOT(maxi_primary())); connect(m_optionWidget->findChild("txtMaxiPrimary"), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); @@ -876,7 +876,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Channel Code")); + tabMain->insertTab(1,m_optionWidget,tr("Channel Cod&e")); connect(m_optionWidget->findChild("cmbChannel"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } @@ -887,7 +887,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Code One")); + tabMain->insertTab(1,m_optionWidget,tr("Code On&e")); connect(m_optionWidget->findChild("cmbC1Size"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC1GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); } @@ -899,7 +899,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Code 49")); + tabMain->insertTab(1,m_optionWidget,tr("Cod&e 49")); connect(m_optionWidget->findChild("cmbC49RowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC49GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); } @@ -911,7 +911,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("GS1 DataBar Stacked")); + tabMain->insertTab(1,m_optionWidget,tr("GS1 DataBar Stack&ed")); connect(m_optionWidget->findChild("cmbCols"), SIGNAL(currentIndexChanged ( int )), SLOT(update_preview())); } @@ -922,7 +922,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("Ultracode")); + tabMain->insertTab(1,m_optionWidget,tr("Ultracod&e")); connect(m_optionWidget->findChild("radUltraAuto"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radUltraEcc"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbUltraEcc"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); @@ -956,11 +956,11 @@ void MainWindow::change_options() m_optionWidget=uiload.load(&file); file.close(); if (symbology == BARCODE_UPCE || symbology == BARCODE_UPCE_CHK || symbology == BARCODE_UPCE_CC) { - tabMain->insertTab(1, m_optionWidget, tr("UPC-E")); + tabMain->insertTab(1, m_optionWidget, tr("UPC-&E")); } else if (symbology == BARCODE_ISBNX) { tabMain->insertTab(1, m_optionWidget, tr("ISBN")); } else { - tabMain->insertTab(1, m_optionWidget, tr("EAN")); + tabMain->insertTab(1, m_optionWidget, tr("&EAN")); } combobox_item_enabled(cmbFontSetting, 1, false); if (cmbFontSetting->currentIndex() == 1) { @@ -977,7 +977,7 @@ void MainWindow::change_options() return; m_optionWidget=uiload.load(&file); file.close(); - tabMain->insertTab(1,m_optionWidget,tr("VIN")); + tabMain->insertTab(1,m_optionWidget,tr("&VIN")); connect(m_optionWidget->findChild("chkVINImportChar"), SIGNAL(clicked( bool )), SLOT(update_preview())); } diff --git a/frontend_qt/mainwindow.h b/frontend_qt/mainwindow.h index e17759a4..93f4befd 100644 --- a/frontend_qt/mainwindow.h +++ b/frontend_qt/mainwindow.h @@ -25,10 +25,7 @@ #include "ui_mainWindow.h" #include "barcodeitem.h" -class QAction; -class QActionGroup; class QLabel; -class QMenu; class MainWindow : public QWidget, private Ui::mainWindow { @@ -138,8 +135,6 @@ protected: void combobox_item_enabled(QComboBox *comboBox, int index, bool enabled); void upcean_addon_gap(QComboBox *comboBox, QLabel *label, int base); void set_gs1_mode(bool gs1_mode); - bool fixed_height(); - bool no_hrt(); const char *get_setting_name(int symbology); int get_button_group_index(const QStringList &children); void set_radiobutton_from_setting(QSettings &settings, const QString &setting, const QStringList &children, int default_val = 0); diff --git a/frontend_qt/sequencewindow.cpp b/frontend_qt/sequencewindow.cpp index 70db763d..10070f45 100644 --- a/frontend_qt/sequencewindow.cpp +++ b/frontend_qt/sequencewindow.cpp @@ -158,8 +158,10 @@ void SequenceWindow::check_generate() preview_copy = txtPreview->toPlainText(); if(preview_copy.isEmpty()) { btnExport->setEnabled(false); + lblExport->setEnabled(false); } else { btnExport->setEnabled(true); + lblExport->setEnabled(true); } }