2020-04-04 07:40:59 +13:00
/*
libzint - the open source barcode library
2021-02-27 09:45:08 +13:00
Copyright ( C ) 2020 - 2021 Robin Stuart < rstuart114 @ gmail . com >
2020-04-04 07:40:59 +13:00
Redistribution and use in source and binary forms , with or without
modification , are permitted provided that the following conditions
are met :
1. Redistributions of source code must retain the above copyright
notice , this list of conditions and the following disclaimer .
2. Redistributions in binary form must reproduce the above copyright
notice , this list of conditions and the following disclaimer in the
documentation and / or other materials provided with the distribution .
3. Neither the name of the project nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission .
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS IS " AND
ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL
DAMAGES ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES ; LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION )
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT
LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE .
*/
/* vim: set ts=4 sw=4 et : */
# include "testcommon.h"
2021-07-27 02:29:05 +12:00
# include <errno.h>
2020-04-04 07:40:59 +13:00
# include <sys/stat.h>
2020-12-23 23:57:24 +13:00
INTERNAL int png_pixel_plot ( struct zint_symbol * symbol , unsigned char * pixelbuf ) ;
2020-05-06 09:28:25 +12:00
static void test_pixel_plot ( int index , int debug ) {
struct item {
int width ;
int height ;
2020-10-04 10:51:08 +13:00
char * pattern ;
2020-05-06 09:28:25 +12:00
int repeat ;
2021-07-27 02:29:05 +12:00
int ret ;
2020-05-06 09:28:25 +12:00
} ;
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<"))
struct item data [ ] = {
2021-07-27 02:29:05 +12:00
/* 0*/ { 1 , 1 , " 1 " , 0 , 0 } ,
/* 1*/ { 2 , 1 , " 11 " , 0 , 0 } ,
/* 2*/ { 2 , 2 , " 10 " , 1 , 0 } ,
/* 3*/ { 3 , 1 , " 101 " , 0 , 0 } ,
/* 4*/ { 3 , 2 , " 101010 " , 0 , 0 } ,
/* 5*/ { 3 , 3 , " 101010101 " , 0 , 0 } ,
/* 6*/ { 8 , 2 , " CBMWKRYGGYRKWMBC " , 0 , 0 } ,
2020-05-06 09:28:25 +12:00
} ;
int data_size = ARRAY_SIZE ( data ) ;
2021-06-24 02:00:49 +12:00
int i , ret ;
struct zint_symbol * symbol ;
2020-05-06 09:28:25 +12:00
char * png = " out.png " ;
2020-05-06 12:33:56 +12:00
char data_buf [ 8 * 2 + 1 ] ;
2020-05-06 09:28:25 +12:00
2021-07-27 02:29:05 +12:00
int have_identify = testUtilHaveIdentify ( ) ;
2021-06-24 02:00:49 +12:00
2021-07-27 02:29:05 +12:00
testStart ( " test_pixel_plot " ) ;
2021-06-24 02:00:49 +12:00
for ( i = 0 ; i < data_size ; i + + ) {
int size ;
2020-05-06 09:28:25 +12:00
if ( index ! = - 1 & & i ! = index ) continue ;
2021-06-24 02:00:49 +12:00
symbol = ZBarcode_Create ( ) ;
2020-05-06 09:28:25 +12:00
assert_nonnull ( symbol , " Symbol not created \n " ) ;
strcpy ( symbol - > outfile , png ) ;
symbol - > bitmap_width = data [ i ] . width ;
symbol - > bitmap_height = data [ i ] . height ;
2020-05-07 06:57:27 +12:00
symbol - > debug | = debug ;
2020-05-06 09:28:25 +12:00
2021-06-24 02:00:49 +12:00
size = data [ i ] . width * data [ i ] . height ;
2020-05-06 09:28:25 +12:00
assert_nonzero ( size < ( int ) sizeof ( data_buf ) , " i:%d png_pixel_plot size %d < sizeof(data_buf) %d \n " , i , size , ( int ) sizeof ( data_buf ) ) ;
if ( data [ i ] . repeat ) {
2020-05-06 12:33:56 +12:00
testUtilStrCpyRepeat ( data_buf , data [ i ] . pattern , size ) ;
2020-05-06 09:28:25 +12:00
} else {
strcpy ( data_buf , data [ i ] . pattern ) ;
}
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 ) ) ;
2020-10-04 10:51:08 +13:00
symbol - > bitmap = ( unsigned char * ) data_buf ;
2020-05-06 09:28:25 +12:00
2020-11-02 07:32:55 +13:00
ret = png_pixel_plot ( symbol , ( unsigned char * ) data_buf ) ;
2021-07-27 02:29:05 +12:00
assert_equal ( ret , data [ i ] . ret , " i:%d png_pixel_plot ret %d != %d (%s) \n " , i , ret , data [ i ] . ret , symbol - > errtxt ) ;
2020-05-06 09:28:25 +12:00
2021-07-27 02:29:05 +12:00
if ( ret < ZINT_ERROR ) {
if ( have_identify ) {
ret = testUtilVerifyIdentify ( symbol - > outfile , debug ) ;
assert_zero ( ret , " i:%d identify %s ret %d != 0 \n " , i , symbol - > outfile , ret ) ;
}
if ( ! ( debug & ZINT_DEBUG_TEST_KEEP_OUTFILE ) ) {
assert_zero ( remove ( symbol - > outfile ) , " i:%d remove(%s) != 0 \n " , i , symbol - > outfile ) ;
}
} else {
if ( ! ( debug & ZINT_DEBUG_TEST_KEEP_OUTFILE ) ) {
( void ) remove ( symbol - > outfile ) ;
}
}
2020-05-06 09:28:25 +12:00
symbol - > bitmap = NULL ;
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
static void test_print ( int index , int generate , int debug ) {
2020-04-04 07:40:59 +13:00
struct item {
int symbology ;
2020-10-01 00:19:12 +13:00
int input_mode ;
2021-03-19 13:12:13 +13:00
int border_width ;
2020-10-01 00:19:12 +13:00
int output_options ;
2020-11-02 07:32:55 +13:00
int whitespace_width ;
2021-05-26 07:42:26 +12:00
int whitespace_height ;
2020-10-01 00:19:12 +13:00
int show_hrt ;
2020-04-04 07:40:59 +13:00
int option_1 ;
int option_2 ;
2021-06-20 00:11:23 +12:00
float height ;
2020-10-01 00:19:12 +13:00
float scale ;
Add Structured Append support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
GRIDMATRIX, MAXICODE, MICROPDF417, PDF417, QRCODE, ULTRA
DOTCODE: use pre-calculated generator poly coeffs in Reed-Solomon for
performance improvement
PDF417/MICROPDF417: use common routine pdf417_initial()
GUI: code lines <= 118, shorthand widget_obj(),
shorten calling upcean_addon_gap(), upcean_guard_descent()
various backend: var name debug -> debug_print
2021-09-29 09:42:44 +13:00
struct zint_structapp structapp ;
2020-11-02 07:32:55 +13:00
char * fgcolour ;
char * bgcolour ;
2020-10-04 10:51:08 +13:00
char * data ;
2020-10-01 00:19:12 +13:00
char * composite ;
2021-06-20 00:11:23 +12:00
int ret ;
2020-10-01 00:19:12 +13:00
char * expected_file ;
char * comment ;
2020-04-04 07:40:59 +13:00
} ;
struct item data [ ] = {
Add Structured Append support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
GRIDMATRIX, MAXICODE, MICROPDF417, PDF417, QRCODE, ULTRA
DOTCODE: use pre-calculated generator poly coeffs in Reed-Solomon for
performance improvement
PDF417/MICROPDF417: use common routine pdf417_initial()
GUI: code lines <= 118, shorthand widget_obj(),
shorten calling upcean_addon_gap(), upcean_guard_descent()
various backend: var name debug -> debug_print
2021-09-29 09:42:44 +13:00
/* 0*/ { BARCODE_CODE128 , UNICODE_MODE , - 1 , BOLD_TEXT , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " Égjpqy " , " " , 0 , " code128_egrave_bold.png " , " " } ,
/* 1*/ { BARCODE_CODE128 , UNICODE_MODE , 3 , BOLD_TEXT | BARCODE_BOX , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " Égjpqy " , " " , 0 , " code128_egrave_bold_box3.png " , " " } ,
/* 2*/ { BARCODE_CODE128 , UNICODE_MODE , 2 , BOLD_TEXT | BARCODE_BOX , 2 , 2 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " Égjpqy " , " " , 0 , " code128_egrave_bold_hvwsp2_box2.png " , " " } ,
/* 3*/ { BARCODE_GS1_128_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 3 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " [00]030123456789012340 " , " [02]13012345678909[37]24[10]1234567ABCDEFG " , 0 , " gs1_128_cc_fig12.png " , " " } ,
/* 4*/ { BARCODE_CODABLOCKF , - 1 , 3 , - 1 , - 1 , - 1 , - 1 , 3 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " AAAAAAAAA " , " " , 0 , " codablockf_3rows.png " , " " } ,
/* 5*/ { BARCODE_CODABLOCKF , - 1 , - 1 , - 1 , 2 , 2 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " AAAAAAAAA " , " " , 0 , " codablockf_hvwsp2.png " , " " } ,
/* 6*/ { BARCODE_CODABLOCKF , - 1 , 2 , BARCODE_BOX , 2 , 2 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " AAAAAAAAA " , " " , 0 , " codablockf_hvwsp2_box2.png " , " " } ,
/* 7*/ { BARCODE_EANX , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 9771384524017+12 " , " " , 0 , " ean13_2addon_ggs_5.2.2.5.1-2.png " , " " } ,
/* 8*/ { BARCODE_EANX , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 9780877799306+54321 " , " " , 0 , " ean13_5addon_ggs_5.2.2.5.2-2.png " , " " } ,
/* 9*/ { BARCODE_EANX_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 123456789012+12 " , " [91]123456789012345678901 " , 0 , " ean13_cc_2addon_cca_4x4.png " , " " } ,
/* 10*/ { BARCODE_EANX_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 123456789012+54321 " , " [91]1234567890 " , 0 , " ean13_cc_5addon_ccb_3x4.png " , " " } ,
/* 11*/ { BARCODE_EANX_CC , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 123456789012+54321 " , " [91]1234567890 " , 0 , " ean13_cc_5addon_ccb_3x4_notext.png " , " " } ,
/* 12*/ { BARCODE_UPCA , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 012345678905+24 " , " " , 0 , " upca_2addon_ggs_5.2.6.6-5.png " , " " } ,
/* 13*/ { BARCODE_UPCA , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 614141234417+12345 " , " " , 0 , " upca_5addon.png " , " " } ,
/* 14*/ { BARCODE_UPCA , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 614141234417+12345 " , " " , 0 , " upca_5addon_notext.png " , " " } ,
/* 15*/ { BARCODE_UPCA , - 1 , 3 , BARCODE_BIND , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 614141234417+12345 " , " " , 0 , " upca_5addon_bind3.png " , " " } ,
/* 16*/ { BARCODE_UPCA_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345678901+12 " , " [91]123456789 " , 0 , " upca_cc_2addon_cca_3x4.png " , " " } ,
/* 17*/ { BARCODE_UPCA_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345678901+12121 " , " [91]1234567890123 " , 0 , " upca_cc_5addon_ccb_4x4.png " , " " } ,
/* 18*/ { BARCODE_UPCA_CC , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345678901+12121 " , " [91]1234567890123 " , 0 , " upca_cc_5addon_ccb_4x4_notext.png " , " " } ,
/* 19*/ { BARCODE_UPCA_CC , - 1 , 3 , BARCODE_BIND , - 1 , - 1 , - 1 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345678901+12121 " , " [91]1234567890123 " , 0 , " upca_cc_5addon_ccb_4x4_bind3.png " , " " } ,
/* 20*/ { BARCODE_UPCE , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1234567+12 " , " " , 0 , " upce_2addon.png " , " " } ,
/* 21*/ { BARCODE_UPCE , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1234567+12345 " , " " , 0 , " upce_5addon.png " , " " } ,
/* 22*/ { BARCODE_UPCE , - 1 , - 1 , SMALL_TEXT , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1234567+12345 " , " " , 0 , " upce_5addon_small.png " , " " } ,
/* 23*/ { BARCODE_UPCE_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 0654321+89 " , " [91]1 " , 0 , " upce_cc_2addon_cca_5x2.png " , " " } ,
/* 24*/ { BARCODE_UPCE_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1876543+56789 " , " [91]12345 " , 0 , " upce_cc_5addon_ccb_8x2.png " , " " } ,
/* 25*/ { BARCODE_UPCE_CC , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 2 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1876543+56789 " , " [91]12345 " , 0 , " upce_cc_5addon_ccb_8x2_notext.png " , " " } ,
/* 26*/ { BARCODE_EANX , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1234567+12 " , " " , 0 , " ean8_2addon.png " , " " } ,
/* 27*/ { BARCODE_EANX , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 1234567+12345 " , " " , 0 , " ean8_5addon.png " , " " } ,
/* 28*/ { BARCODE_EANX_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 9876543+65 " , " [91]1234567 " , 0 , " ean8_cc_2addon_cca_4x3.png " , " " } ,
/* 29*/ { BARCODE_EANX_CC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 9876543+74083 " , " [91]123456789012345678 " , 0 , " ean8_cc_5addon_ccb_8x3.png " , " " } ,
/* 30*/ { BARCODE_EANX , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345 " , " " , 0 , " ean5.png " , " " } ,
/* 31*/ { BARCODE_EANX , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12 " , " " , 0 , " ean2.png " , " " } ,
/* 32*/ { BARCODE_CODE39 , - 1 , - 1 , SMALL_TEXT , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 123 " , " " , 0 , " code39_small.png " , " " } ,
/* 33*/ { BARCODE_POSTNET , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 3.5 , { 0 , 0 , " " } , " " , " " , " 12345 " , " " , 0 , " postnet_zip.png " , " 300 dpi, using 1/43in X, 300 / 43 / 2 = ~3.5 scale " } ,
/* 34*/ { BARCODE_PDF417 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " CFCECDCC " , " 12345 " , " " , 0 , " pdf417_bgalpha.png " , " " } ,
/* 35*/ { BARCODE_PDF417 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " 30313233 " , " " , " 12345 " , " " , 0 , " pdf417_fgalpha.png " , " " } ,
/* 36*/ { BARCODE_PDF417 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " 20212244 " , " CFCECDCC " , " 12345 " , " " , 0 , " pdf417_bgfgalpha.png " , " " } ,
/* 37*/ { BARCODE_ULTRA , - 1 , - 1 , - 1 , 2 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " 0000007F " , " FF000033 " , " 12345 " , " " , 0 , " ultra_bgfgalpha.png " , " " } ,
/* 38*/ { BARCODE_ULTRA , - 1 , - 1 , - 1 , 2 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " FF000033 " , " 12345 " , " " , 0 , " ultra_bgalpha.png " , " " } ,
/* 39*/ { BARCODE_ULTRA , - 1 , - 1 , - 1 , 2 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " 0000007F " , " FF0000 " , " 12345 " , " " , 0 , " ultra_fgalpha.png " , " " } ,
/* 40*/ { BARCODE_ULTRA , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " 0000007F " , " " , " 12345 " , " " , 0 , " ultra_fgalpha_nobg.png " , " " } ,
/* 41*/ { BARCODE_ULTRA , - 1 , 1 , BARCODE_BOX , 1 , 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345 " , " " , 0 , " ultra_hvwsp1_box1.png " , " " } ,
/* 42*/ { BARCODE_ULTRA , - 1 , 1 , BARCODE_BOX , 1 , 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " 00FF007F " , " BABDB6 " , " 12345 " , " " , 0 , " ultra_fgalpha_hvwsp1_box1.png " , " " } ,
/* 43*/ { BARCODE_ULTRA , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0.5 , { 0 , 0 , " " } , " " , " " , " 1 " , " " , 0 , " ultra_odd.png " , " " } ,
/* 44*/ { BARCODE_MAXICODE , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0.5 , { 0 , 0 , " " } , " " , " " , " ABCDEFGHIJKLMNOPQRSTUVWXYZ " , " " , 0 , " maxicode_0.5.png " , " 6 dpmm, 150 dpi " } ,
/* 45*/ { BARCODE_MAXICODE , - 1 , 1 , BARCODE_BOX , 3 , - 1 , - 1 , - 1 , - 1 , 0 , 0.7 , { 0 , 0 , " " } , " " , " " , " ABCDEFGHIJKLMNOPQRSTUVWXYZ " , " " , 0 , " maxicode_0.7_wsp3_box1.png " , " 8 dpmm, 200 dpi " } ,
/* 46*/ { BARCODE_MAXICODE , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 1.4 , { 0 , 0 , " " } , " 1111117F " , " EEEEEEEE " , " ABCDEFGHIJKLMNOPQRSTUVWXYZ " , " " , 0 , " maxicode_1.4_bgfgalpha.png " , " 16 dpmm, 400 dpi " } ,
/* 47*/ { BARCODE_MAXICODE , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 2.1 , { 0 , 0 , " " } , " " , " " , " ABCDEFGHIJKLMNOPQRSTUVWXYZ " , " " , 0 , " maxicode_2.1.png " , " 24 dpmm, 600 dpi " } ,
/* 48*/ { BARCODE_MAXICODE , - 1 , 2 , BARCODE_BOX , 1 , 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " ABCDEFGHIJKLMNOPQRSTUVWXYZ " , " " , 0 , " maxicode_hvwsp1_box2.png " , " " } ,
/* 49*/ { BARCODE_MAXICODE , - 1 , 1 , BARCODE_BIND , - 1 , 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " ABCDEFGHIJKLMNOPQRSTUVWXYZ " , " " , 0 , " maxicode_vwsp1_bind1.png " , " " } ,
/* 50*/ { BARCODE_DATAMATRIX , - 1 , 1 , BARCODE_BIND | BARCODE_DOTTY_MODE , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 2.0f , { 0 , 0 , " " } , " " , " " , " 1234 " , " " , 0 , " datamatrix_2.0_bind1_dotty.png " , " " } ,
/* 51*/ { BARCODE_DATAMATRIX , - 1 , 1 , BARCODE_BIND | BARCODE_DOTTY_MODE , 1 , 1 , - 1 , - 1 , - 1 , 0 , 2.0f , { 0 , 0 , " " } , " " , " " , " 1234 " , " " , 0 , " datamatrix_2.0_hvwsp1_bind1_dotty.png " , " " } ,
/* 52*/ { BARCODE_DBAR_LTD , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 0 , 0 , " " } , " " , " " , " 12345678909 " , " " , 0 , " dbar_ltd.png " , " " } ,
/* 53*/ { BARCODE_PDF417 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 5.0 , 0 , { 0 , 0 , " " } , " " , " " , " Your Data Here! " , " " , ZINT_WARN_NONCOMPLIANT , " pdf417_height5.png " , " " } ,
/* 54*/ { BARCODE_USPS_IMAIL , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 7.75 , 0 , { 0 , 0 , " " } , " " , " " , " 12345678901234567890 " , " " , 0 , " imail_height7.75.png " , " " } ,
/* 55*/ { BARCODE_AZTEC , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 0 , 0 , { 4 , 7 , " Z1.txt " } , " " , " " , " 3456 " , " " , 0 , " aztec_z1_seq4of7.png " , " " } ,
2021-11-07 13:21:02 +13:00
/* 56*/ { BARCODE_PDF417 , - 1 , - 1 , BARCODE_NO_QUIET_ZONES , - 1 , - 1 , - 1 , 5 , 8 , 16 , 1.5 , { 0 , 0 , " " } , " " , " " , " AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB " , " " , ZINT_WARN_NONCOMPLIANT , " pdf417_#204.png " , " Ticket #204 Blank line in PDF417 " } ,
2020-04-04 07:40:59 +13:00
} ;
2020-05-06 09:28:25 +12:00
int data_size = ARRAY_SIZE ( data ) ;
2021-06-24 02:00:49 +12:00
int i , length , ret ;
struct zint_symbol * symbol ;
2020-04-04 07:40:59 +13:00
2021-06-14 11:48:29 +12:00
const char * data_dir = " /backend/tests/data/png " ;
const char * png = " out.png " ;
char expected_file [ 1024 ] ;
2020-04-04 07:40:59 +13:00
char escaped [ 1024 ] ;
int escaped_size = 1024 ;
2020-10-01 00:19:12 +13:00
char * text ;
2020-04-04 07:40:59 +13:00
2021-06-24 02:00:49 +12:00
int have_identify = testUtilHaveIdentify ( ) ;
testStart ( " test_print " ) ;
2020-05-06 09:28:25 +12:00
if ( generate ) {
2021-06-17 04:56:32 +12:00
char data_dir_path [ 1024 ] ;
assert_nonzero ( testUtilDataPath ( data_dir_path , sizeof ( data_dir_path ) , data_dir , NULL ) , " testUtilDataPath(%s) == 0 \n " , data_dir ) ;
2021-06-24 02:00:49 +12:00
if ( ! testUtilDirExists ( data_dir_path ) ) {
ret = testUtilMkDir ( data_dir_path ) ;
assert_zero ( ret , " testUtilMkDir(%s) ret %d != 0 (%d: %s) \n " , data_dir_path , ret , errno , strerror ( errno ) ) ;
2020-05-06 09:28:25 +12:00
}
2020-04-04 07:40:59 +13:00
}
2021-06-24 02:00:49 +12:00
for ( i = 0 ; i < data_size ; i + + ) {
int text_length ;
2020-04-04 07:40:59 +13:00
2020-05-06 09:28:25 +12:00
if ( index ! = - 1 & & i ! = index ) continue ;
2021-06-24 02:00:49 +12:00
symbol = ZBarcode_Create ( ) ;
2020-04-04 07:40:59 +13:00
assert_nonnull ( symbol , " Symbol not created \n " ) ;
2021-06-24 02:00:49 +12:00
length = testUtilSetSymbol ( symbol , data [ i ] . symbology , data [ i ] . input_mode , - 1 /*eci*/ , data [ i ] . option_1 , data [ i ] . option_2 , - 1 , data [ i ] . output_options , data [ i ] . data , - 1 , debug ) ;
2020-10-01 00:19:12 +13:00
if ( data [ i ] . show_hrt ! = - 1 ) {
symbol - > show_hrt = data [ i ] . show_hrt ;
2020-04-04 07:40:59 +13:00
}
2020-10-01 00:19:12 +13:00
if ( data [ i ] . height ) {
symbol - > height = data [ i ] . height ;
2020-04-04 07:40:59 +13:00
}
2020-10-01 00:19:12 +13:00
if ( data [ i ] . scale ) {
symbol - > scale = data [ i ] . scale ;
}
2021-03-19 13:12:13 +13:00
if ( data [ i ] . border_width ! = - 1 ) {
symbol - > border_width = data [ i ] . border_width ;
2020-10-01 00:19:12 +13:00
}
2020-11-02 07:32:55 +13:00
if ( data [ i ] . whitespace_width ! = - 1 ) {
symbol - > whitespace_width = data [ i ] . whitespace_width ;
}
2021-05-26 07:42:26 +12:00
if ( data [ i ] . whitespace_height ! = - 1 ) {
symbol - > whitespace_height = data [ i ] . whitespace_height ;
}
Add Structured Append support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
GRIDMATRIX, MAXICODE, MICROPDF417, PDF417, QRCODE, ULTRA
DOTCODE: use pre-calculated generator poly coeffs in Reed-Solomon for
performance improvement
PDF417/MICROPDF417: use common routine pdf417_initial()
GUI: code lines <= 118, shorthand widget_obj(),
shorten calling upcean_addon_gap(), upcean_guard_descent()
various backend: var name debug -> debug_print
2021-09-29 09:42:44 +13:00
if ( data [ i ] . structapp . count ) {
symbol - > structapp = data [ i ] . structapp ;
}
2020-11-02 07:32:55 +13:00
if ( * data [ i ] . fgcolour ) {
strcpy ( symbol - > fgcolour , data [ i ] . fgcolour ) ;
}
if ( * data [ i ] . bgcolour ) {
strcpy ( symbol - > bgcolour , data [ i ] . bgcolour ) ;
}
2020-10-01 00:19:12 +13:00
if ( strlen ( data [ i ] . composite ) ) {
text = data [ i ] . composite ;
strcpy ( symbol - > primary , data [ i ] . data ) ;
} else {
text = data [ i ] . data ;
}
2021-06-24 02:00:49 +12:00
text_length = ( int ) strlen ( text ) ;
2020-04-04 07:40:59 +13:00
2020-10-04 10:51:08 +13:00
ret = ZBarcode_Encode ( symbol , ( unsigned char * ) text , text_length ) ;
2021-06-20 00:11:23 +12:00
assert_equal ( ret , data [ i ] . ret , " i:%d %s ZBarcode_Encode ret %d != %d (%s) \n " , i , testUtilBarcodeName ( data [ i ] . symbology ) , ret , data [ i ] . ret , symbol - > errtxt ) ;
2020-04-04 07:40:59 +13:00
strcpy ( symbol - > outfile , png ) ;
ret = ZBarcode_Print ( symbol , 0 ) ;
2021-06-20 00:11:23 +12:00
assert_zero ( ret , " i:%d %s ZBarcode_Print %s ret %d != 0 (%s) \n " , i , testUtilBarcodeName ( data [ i ] . symbology ) , symbol - > outfile , ret , symbol - > errtxt ) ;
2020-04-04 07:40:59 +13:00
2021-06-14 11:48:29 +12:00
assert_nonzero ( testUtilDataPath ( expected_file , sizeof ( expected_file ) , data_dir , data [ i ] . expected_file ) , " i:%d testUtilDataPath == 0 \n " , i ) ;
2020-05-06 09:28:25 +12:00
if ( generate ) {
2021-10-31 10:00:31 +13:00
printf ( " /*%3d*/ { %s, %s, %d, %s, %d, %d, %d, %d, %d, %.5g, %.5g, \" %s \" , \" %s \" , \" %s \" , \" %s \" , %s, \" %s \" , \" %s \" }, \n " ,
2021-03-19 13:12:13 +13:00
i , testUtilBarcodeName ( data [ i ] . symbology ) , testUtilInputModeName ( data [ i ] . input_mode ) , data [ i ] . border_width , testUtilOutputOptionsName ( data [ i ] . output_options ) ,
2021-05-26 07:42:26 +12:00
data [ i ] . whitespace_width , data [ i ] . whitespace_height , data [ i ] . show_hrt , data [ i ] . option_1 , data [ i ] . option_2 , data [ i ] . height , data [ i ] . scale , data [ i ] . fgcolour , data [ i ] . bgcolour ,
2021-10-31 10:00:31 +13:00
testUtilEscape ( data [ i ] . data , length , escaped , escaped_size ) , data [ i ] . composite , testUtilErrorName ( data [ i ] . ret ) , data [ i ] . expected_file , data [ i ] . comment ) ;
2021-06-24 02:00:49 +12:00
ret = testUtilRename ( symbol - > outfile , expected_file ) ;
assert_zero ( ret , " i:%d testUtilRename(%s, %s) ret %d != 0 \n " , i , symbol - > outfile , expected_file , ret ) ;
2020-05-06 09:28:25 +12:00
if ( have_identify ) {
2021-06-14 11:48:29 +12:00
ret = testUtilVerifyIdentify ( expected_file , debug ) ;
assert_zero ( ret , " i:%d %s identify %s ret %d != 0 \n " , i , testUtilBarcodeName ( data [ i ] . symbology ) , expected_file , ret ) ;
2020-05-06 09:28:25 +12:00
}
} else {
assert_nonzero ( testUtilExists ( symbol - > outfile ) , " i:%d testUtilExists(%s) == 0 \n " , i , symbol - > outfile ) ;
2021-06-14 11:48:29 +12:00
assert_nonzero ( testUtilExists ( expected_file ) , " i:%d testUtilExists(%s) == 0 \n " , i , expected_file ) ;
2020-05-06 09:28:25 +12:00
2021-06-14 11:48:29 +12:00
ret = testUtilCmpPngs ( symbol - > outfile , expected_file ) ;
assert_zero ( ret , " i:%d %s testUtilCmpPngs(%s, %s) %d != 0 \n " , i , testUtilBarcodeName ( data [ i ] . symbology ) , symbol - > outfile , expected_file , ret ) ;
ret = testUtilCmpBins ( symbol - > outfile , expected_file ) ;
assert_zero ( ret , " i:%d %s testUtilCmpBins(%s, %s) %d != 0 \n " , i , testUtilBarcodeName ( data [ i ] . symbology ) , symbol - > outfile , expected_file , ret ) ;
2020-05-06 09:28:25 +12:00
assert_zero ( remove ( symbol - > outfile ) , " i:%d remove(%s) != 0 \n " , i , symbol - > outfile ) ;
}
2020-04-04 07:40:59 +13:00
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
2021-07-27 02:29:05 +12:00
static void test_outfile ( void ) {
int ret ;
struct zint_symbol symbol = { 0 } ;
unsigned char data [ ] = { " 1 " } ;
testStart ( " test_outfile " ) ;
symbol . symbology = BARCODE_CODE128 ;
symbol . bitmap = data ;
symbol . bitmap_width = symbol . bitmap_height = 1 ;
strcpy ( symbol . outfile , " nosuch_dir/out.png " ) ;
ret = png_pixel_plot ( & symbol , data ) ;
assert_equal ( ret , ZINT_ERROR_FILE_ACCESS , " png_pixel_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s) \n " , ret , ZINT_ERROR_FILE_ACCESS , symbol . errtxt ) ;
symbol . output_options | = BARCODE_STDOUT ;
ret = png_pixel_plot ( & symbol , data ) ;
printf ( " - ignore (PNG to stdout) \n " ) ; fflush ( stdout ) ;
assert_zero ( ret , " png_pixel_plot ret %d != 0 (%s) \n " , ret , symbol . errtxt ) ;
testFinish ( ) ;
}
# include <png.h>
# include <setjmp.h>
struct wpng_error_type {
struct zint_symbol * symbol ;
jmp_buf jmpbuf ;
} ;
STATIC_UNLESS_ZINT_TEST void wpng_error_handler ( png_structp png_ptr , png_const_charp msg ) ;
static void test_wpng_error_handler ( void ) {
int ret ;
char filename [ ] = " out.png " ;
FILE * fp ;
struct wpng_error_type wpng_error ;
struct zint_symbol symbol = { 0 } ;
png_structp png_ptr ;
png_infop info_ptr ;
testStart ( " test_wpng_error_handler " ) ;
wpng_error . symbol = & symbol ;
// Create empty file
( void ) remove ( filename ) ; // In case junk hanging around
fp = fopen ( filename , " w+ " ) ;
assert_nonnull ( fp , " fopen(%s) failed \n " , filename ) ;
ret = fclose ( fp ) ;
assert_zero ( ret , " fclose(%s) %d != 0 \n " , filename , ret ) ;
// Re-open for read, which will cause libpng to error
fp = fopen ( filename , " r " ) ;
assert_nonnull ( fp , " fopen(%s) for read failed \n " , filename ) ;
png_ptr = png_create_write_struct ( PNG_LIBPNG_VER_STRING , & wpng_error , wpng_error_handler , NULL ) ;
assert_nonnull ( png_ptr , " png_create_write_struct failed \n " ) ;
info_ptr = png_create_info_struct ( png_ptr ) ;
assert_nonnull ( info_ptr , " png_create_info_struct failed \n " ) ;
if ( setjmp ( wpng_error . jmpbuf ) ) {
png_destroy_write_struct ( & png_ptr , & info_ptr ) ;
ret = fclose ( fp ) ;
assert_zero ( ret , " fclose(%s) %d != 0 \n " , filename , ret ) ;
assert_nonnull ( strstr ( symbol . errtxt , " 635: libpng error: " ) , " strstr(%s) NULL \n " , symbol . errtxt ) ;
assert_zero ( remove ( filename ) , " remove(%s) != 0 (%d: %s) \n " , filename , errno , strerror ( errno ) ) ;
} else {
png_init_io ( png_ptr , fp ) ;
// This should fail and jmp to setjmp
png_write_info ( png_ptr , info_ptr ) ;
assert_zero ( 1 , " libpng error setjmp failed \n " ) ;
}
testFinish ( ) ;
}
2021-10-21 11:05:30 +13:00
// Check compliant height printable for max CODABLOCKF with 44 rows * ((62 cols) * 0.55 + 3)) = 1632.4
static void test_large_compliant_height ( void ) {
int ret ;
struct zint_symbol * symbol = NULL ;
const char pattern [ ] = { " 1 " } ;
const int codablockf_max = 2726 ;
char data_buf [ 2726 + 1 ] ;
testStart ( " test_large_compliant_height " ) ;
symbol = ZBarcode_Create ( ) ;
assert_nonnull ( symbol , " Symbol not created \n " ) ;
symbol - > symbology = BARCODE_CODABLOCKF ;
symbol - > output_options | = COMPLIANT_HEIGHT ;
testUtilStrCpyRepeat ( data_buf , pattern , codablockf_max ) ;
assert_equal ( codablockf_max , ( int ) strlen ( data_buf ) , " length %d != strlen(data_buf) %d \n " , codablockf_max , ( int ) strlen ( data_buf ) ) ;
ret = ZBarcode_Encode_and_Print ( symbol , ( const unsigned char * ) data_buf , codablockf_max , 0 ) ;
assert_zero ( ret , " ZBarcode_Encode_and_Print ret %d != 0 (%s) \n " , ret , symbol - > errtxt ) ;
assert_zero ( remove ( symbol - > outfile ) , " remove(%s) != 0 \n " , symbol - > outfile ) ;
ZBarcode_Delete ( symbol ) ;
testFinish ( ) ;
}
2020-05-06 09:28:25 +12:00
int main ( int argc , char * argv [ ] ) {
testFunction funcs [ ] = { /* name, func, has_index, has_generate, has_debug */
{ " test_pixel_plot " , test_pixel_plot , 1 , 0 , 1 } ,
{ " test_print " , test_print , 1 , 1 , 1 } ,
2021-07-27 02:29:05 +12:00
{ " test_outfile " , test_outfile , 0 , 0 , 0 } ,
{ " test_wpng_error_handler " , test_wpng_error_handler , 0 , 0 , 0 } ,
2021-10-21 11:05:30 +13:00
{ " test_large_compliant_height " , test_large_compliant_height , 0 , 0 , 0 } ,
2020-05-06 09:28:25 +12:00
} ;
testRun ( argc , argv , funcs , ARRAY_SIZE ( funcs ) ) ;
2020-04-04 07:40:59 +13:00
testReport ( ) ;
return 0 ;
}