2020-05-06 12:33:56 +12:00
/*
libzint - the open source barcode library
2021-06-24 02:00:49 +12:00
Copyright ( C ) 2020 - 2021 Robin Stuart < rstuart114 @ gmail . com >
2020-05-06 12:33:56 +12: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"
2020-12-23 23:57:24 +13:00
INTERNAL int gif_pixel_plot ( struct zint_symbol * symbol , unsigned char * pixelbuf ) ;
2020-05-06 12:33:56 +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 12:33:56 +12:00
int repeat ;
} ;
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<"))
struct item data [ ] = {
/* 0*/ { 1 , 1 , " 1 " , 0 } ,
/* 1*/ { 2 , 1 , " 11 " , 0 } ,
/* 2*/ { 3 , 1 , " 101 " , 0 } ,
/* 3*/ { 4 , 1 , " 1010 " , 0 } ,
/* 4*/ { 5 , 1 , " 10101 " , 0 } ,
/* 5*/ { 3 , 2 , " 101010 " , 0 } ,
/* 6*/ { 3 , 3 , " 101010101 " , 0 } ,
/* 7*/ { 8 , 2 , " CBMWKRYGGYRKWMBC " , 0 } ,
/* 8*/ { 20 , 30 , " WWCWBWMWRWYWGWKCCWCMCRCYCGCKBWBCBBMBRBYBGBKMWMCMBMMRMYMGMKRWRCRBRMRRYRGRKYWYCYBYMYRYYGYKGWGCGBGMGRGYGGKKWKCKBKMKRKYKGKK " , 1 } , // Single LZW block, size 255
/* 9*/ { 19 , 32 , " WWCWBWMWRWYWGWKCCWCMCRCYCGCKBWBCBBMBRBYBGBKMWMCMBMMRMYMGMKRWRCRBRMRRYRGRKYWYCYBYMYRYYGYKGWGCGBGMGRGYGGKKWK " , 1 } , // Two LZW blocks, last size 1
} ;
int data_size = ARRAY_SIZE ( data ) ;
2021-06-24 02:00:49 +12:00
int i , ret ;
struct zint_symbol * symbol ;
2020-05-06 12:33:56 +12:00
char * gif = " out.gif " ;
char data_buf [ 19 * 32 + 1 ] ; // 19 * 32 == 608
2021-06-24 02:00:49 +12:00
testStart ( " test_pixel_plot " ) ;
if ( ! testUtilHaveIdentify ( ) ) {
testSkip ( " ImageMagick identify not available " ) ;
return ;
}
for ( i = 0 ; i < data_size ; i + + ) {
int size ;
2020-05-06 12:33:56 +12:00
if ( index ! = - 1 & & i ! = index ) continue ;
2021-06-24 02:00:49 +12:00
symbol = ZBarcode_Create ( ) ;
2020-05-06 12:33:56 +12:00
assert_nonnull ( symbol , " Symbol not created \n " ) ;
strcpy ( symbol - > outfile , gif ) ;
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 12:33:56 +12:00
2021-06-24 02:00:49 +12:00
size = data [ i ] . width * data [ i ] . height ;
2020-05-06 12:33:56 +12:00
assert_nonzero ( size < ( int ) sizeof ( data_buf ) , " i:%d gif_pixel_plot size %d < sizeof(data_buf) %d \n " , i , size , ( int ) sizeof ( data_buf ) ) ;
if ( data [ i ] . repeat ) {
testUtilStrCpyRepeat ( data_buf , data [ i ] . pattern , size ) ;
} else {
strcpy ( data_buf , data [ i ] . pattern ) ;
}
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 ) ) ;
2020-10-04 10:51:08 +13:00
symbol - > bitmap = ( unsigned char * ) data_buf ;
2020-05-06 12:33:56 +12:00
2020-11-02 07:32:55 +13:00
ret = gif_pixel_plot ( symbol , ( unsigned char * ) data_buf ) ;
2020-05-06 12:33:56 +12:00
assert_zero ( ret , " i:%d gif_pixel_plot ret %d != 0 (%s) \n " , i , ret , symbol - > errtxt ) ;
ret = testUtilVerifyIdentify ( symbol - > outfile , debug ) ;
assert_zero ( ret , " i:%d identify %s ret %d != 0 \n " , i , symbol - > outfile , ret ) ;
assert_zero ( remove ( symbol - > outfile ) , " i:%d remove(%s) != 0 \n " , i , symbol - > outfile ) ;
symbol - > bitmap = NULL ;
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
2021-06-24 02:00:49 +12:00
static void test_print ( int index , int generate , int debug ) {
struct item {
int symbology ;
int whitespace_width ;
int whitespace_height ;
int option_1 ;
int option_2 ;
float scale ;
float dot_size ;
char * fgcolour ;
char * bgcolour ;
char * data ;
char * expected_file ;
} ;
struct item data [ ] = {
/* 0*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 0 , 0 , " " , " " , " 12 " , " dotcode_1.0.gif " } ,
/* 1*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 0 , 0.1 , " " , " " , " 12 " , " dotcode_1.0_ds0.1.gif " } ,
/* 2*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 0 , 1.1 , " " , " " , " 12 " , " dotcode_1.0_ds1.1.gif " } ,
/* 3*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 1.5 , 0 , " " , " " , " 12 " , " dotcode_1.5.gif " } ,
/* 4*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 1.5 , 0.4 , " " , " " , " 12 " , " dotcode_1.5_ds0.4.gif " } ,
/* 5*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 1.5 , 1.1 , " " , " " , " 12 " , " dotcode_1.5_ds1.1.gif " } ,
/* 6*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 1.5 , 2.1 , " " , " " , " 12 " , " dotcode_1.5_ds2.1.gif " } ,
/* 7*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 2 , 0 , " " , " " , " 12 " , " dotcode_2.0.gif " } ,
/* 8*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 2 , 0.9 , " " , " " , " 12 " , " dotcode_2.0_ds0.9.gif " } ,
/* 9*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 2 , 1.1 , " " , " " , " 12 " , " dotcode_2.0_ds1.1.gif " } ,
/* 10*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 3 , 0 , " " , " " , " 12 " , " dotcode_3.0.gif " } ,
/* 11*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 3 , 0.4 , " " , " " , " 12 " , " dotcode_3.0_ds0.4.gif " } ,
/* 12*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 3 , 1.1 , " " , " " , " 12 " , " dotcode_3.0_ds1.1.gif " } ,
/* 13*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 3.5 , 0 , " " , " " , " 12 " , " dotcode_3.5.gif " } ,
/* 14*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 3.5 , 0.4 , " " , " " , " 12 " , " dotcode_3.5_ds0.4.gif " } ,
/* 15*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 3.5 , 1.1 , " " , " " , " 12 " , " dotcode_3.5_ds1.1.gif " } ,
/* 16*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 5 , 0 , " " , " " , " 12 " , " dotcode_5.0.gif " } ,
/* 17*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 5 , 0.2 , " " , " " , " 12 " , " dotcode_5.0_ds0.2.gif " } ,
/* 18*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 5 , 1.1 , " " , " " , " 12 " , " dotcode_5.0_ds1.1.gif " } ,
/* 19*/ { BARCODE_DOTCODE , - 1 , - 1 , - 1 , - 1 , 5 , 1.7 , " " , " " , " 12 " , " dotcode_5.0_ds1.7.gif " } ,
} ;
int data_size = ARRAY_SIZE ( data ) ;
int i , length , ret ;
struct zint_symbol * symbol ;
const char * data_dir = " /backend/tests/data/gif " ;
const char * gif = " out.gif " ;
char expected_file [ 4096 ] ;
char escaped [ 1024 ] ;
int escaped_size = 1024 ;
int have_identify = testUtilHaveIdentify ( ) ;
testStart ( " test_print " ) ;
if ( generate ) {
char data_dir_path [ 1024 ] ;
assert_nonzero ( testUtilDataPath ( data_dir_path , sizeof ( data_dir_path ) , data_dir , NULL ) , " testUtilDataPath(%s) == 0 \n " , data_dir ) ;
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 ) ) ;
}
}
for ( i = 0 ; i < data_size ; i + + ) {
if ( index ! = - 1 & & i ! = index ) continue ;
symbol = ZBarcode_Create ( ) ;
assert_nonnull ( symbol , " Symbol not created \n " ) ;
length = testUtilSetSymbol ( symbol , data [ i ] . symbology , - 1 /*input_mode*/ , - 1 /*eci*/ , data [ i ] . option_1 , data [ i ] . option_2 , - 1 , - 1 /*output_options*/ , data [ i ] . data , - 1 , debug ) ;
if ( data [ i ] . whitespace_width ! = - 1 ) {
symbol - > whitespace_width = data [ i ] . whitespace_width ;
}
if ( data [ i ] . whitespace_height ! = - 1 ) {
symbol - > whitespace_height = data [ i ] . whitespace_height ;
}
if ( data [ i ] . scale ) {
symbol - > scale = data [ i ] . scale ;
}
if ( data [ i ] . dot_size ) {
symbol - > dot_size = data [ i ] . dot_size ;
}
if ( * data [ i ] . fgcolour ) {
strcpy ( symbol - > fgcolour , data [ i ] . fgcolour ) ;
}
if ( * data [ i ] . bgcolour ) {
strcpy ( symbol - > bgcolour , data [ i ] . bgcolour ) ;
}
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 , gif ) ;
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 ) ;
assert_nonzero ( testUtilDataPath ( expected_file , sizeof ( expected_file ) , data_dir , data [ i ] . expected_file ) , " i:%d testUtilDataPath == 0 \n " , i ) ;
if ( generate ) {
printf ( " /*%3d*/ { %s, %d, %d, %d, %d, %.5g, %.5g, \" %s \" , \" %s \" , \" %s \" , \" %s \" }, \n " ,
i , testUtilBarcodeName ( data [ i ] . symbology ) , data [ i ] . whitespace_width , data [ i ] . whitespace_height ,
data [ i ] . option_1 , data [ i ] . option_2 , data [ i ] . scale , data [ i ] . dot_size , data [ i ] . fgcolour , data [ i ] . bgcolour ,
testUtilEscape ( data [ i ] . data , length , escaped , escaped_size ) , data [ i ] . expected_file ) ;
ret = testUtilRename ( symbol - > outfile , expected_file ) ;
assert_zero ( ret , " i:%d testUtilRename(%s, %s) ret %d != 0 \n " , i , symbol - > outfile , expected_file , ret ) ;
if ( have_identify ) {
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 ) ;
}
} else {
assert_nonzero ( testUtilExists ( symbol - > outfile ) , " i:%d testUtilExists(%s) == 0 \n " , i , symbol - > outfile ) ;
assert_nonzero ( testUtilExists ( expected_file ) , " i:%d testUtilExists(%s) == 0 \n " , i , expected_file ) ;
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 ) ;
assert_zero ( remove ( symbol - > outfile ) , " i:%d remove(%s) != 0 \n " , i , symbol - > outfile ) ;
}
ZBarcode_Delete ( symbol ) ;
}
testFinish ( ) ;
}
2020-05-06 12:33:56 +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 } ,
2021-06-24 02:00:49 +12:00
{ " test_print " , test_print , 1 , 1 , 1 } ,
2020-05-06 12:33:56 +12:00
} ;
testRun ( argc , argv , funcs , ARRAY_SIZE ( funcs ) ) ;
testReport ( ) ;
return 0 ;
}