@ -57,6 +57,145 @@ _printf(int verbose, const char *fmt, ...)
va_end ( ap ) ;
}
static Exactness_Image *
_image_load ( const char * filename )
{
int w , h ;
Evas_Load_Error err ;
Ecore_Evas * ee = ecore_evas_new ( NULL , 0 , 0 , 100 , 100 , NULL ) ;
Eo * e = ecore_evas_get ( ee ) ;
Eo * img = evas_object_image_add ( e ) ;
evas_object_image_file_set ( img , filename , NULL ) ;
err = evas_object_image_load_error_get ( img ) ;
if ( err ! = EVAS_LOAD_ERROR_NONE )
{
fprintf ( stderr , " could not load image '%s'. error string is \" %s \" \n " ,
filename , evas_load_error_str ( err ) ) ;
return NULL ;
}
Exactness_Image * ex_img = malloc ( sizeof ( * ex_img ) ) ;
int len ;
evas_object_image_size_get ( img , & w , & h ) ;
ex_img - > w = w ;
ex_img - > h = h ;
len = w * h * 4 ;
ex_img - > pixels = malloc ( len ) ;
memcpy ( ex_img - > pixels , evas_object_image_data_get ( img , EINA_FALSE ) , len ) ;
ecore_evas_free ( ee ) ;
return ex_img ;
}
static void
_image_save ( Exactness_Image * ex_img , const char * output )
{
Ecore_Evas * ee ;
Eo * e , * img ;
ee = ecore_evas_new ( NULL , 0 , 0 , 100 , 100 , NULL ) ;
e = ecore_evas_get ( ee ) ;
img = evas_object_image_add ( e ) ;
evas_object_image_size_set ( img , ex_img - > w , ex_img - > h ) ;
evas_object_image_data_set ( img , ex_img - > pixels ) ;
evas_object_image_save ( img , output , NULL , NULL ) ;
ecore_evas_free ( ee ) ;
}
static void
_file_compare ( const char * orig_dir , const char * ent_name )
{
char filename1 [ EXACTNESS_PATH_MAX ] , filename2 [ EXACTNESS_PATH_MAX ] ;
Exactness_Image * img1 , * img2 , * imgO = NULL ;
snprintf ( filename1 , EXACTNESS_PATH_MAX , " %s/%s " , orig_dir , ent_name ) ;
snprintf ( filename2 , EXACTNESS_PATH_MAX , " %s/%s/%s " , _dest_dir , CURRENT_SUBDIR , ent_name ) ;
img1 = _image_load ( filename1 ) ;
img2 = _image_load ( filename2 ) ;
if ( exactness_image_compare ( img1 , img2 , & imgO ) )
{
char buf [ EXACTNESS_PATH_MAX ] ;
snprintf ( buf , EXACTNESS_PATH_MAX , " %s/%s/comp_%s " , _dest_dir , CURRENT_SUBDIR , ent_name ) ;
_image_save ( imgO , buf ) ;
_compare_errors = eina_list_append ( _compare_errors , strdup ( ent_name ) ) ;
}
exactness_image_free ( img1 ) ;
exactness_image_free ( img2 ) ;
exactness_image_free ( imgO ) ;
}
static void
_exu_imgs_unpack ( const char * exu_path , const char * dir , const char * ent_name )
{
Exactness_Unit * unit = exactness_unit_file_read ( exu_path ) ;
Exactness_Image * img ;
Eina_List * itr ;
Ecore_Evas * ee = ecore_evas_new ( NULL , 0 , 0 , 100 , 100 , NULL ) ;
Eo * e = ecore_evas_get ( ee ) ;
int n = 1 ;
if ( ! unit ) return ;
EINA_LIST_FOREACH ( unit - > imgs , itr , img )
{
char filename [ EXACTNESS_PATH_MAX ] ;
Eo * o = evas_object_image_add ( e ) ;
snprintf ( filename , EXACTNESS_PATH_MAX , " %s/%s%c%.3d.png " ,
dir , ent_name , SHOT_DELIMITER , n + + ) ;
evas_object_image_size_set ( o , img - > w , img - > h ) ;
evas_object_image_data_set ( o , img - > pixels ) ;
if ( ! evas_object_image_save ( o , filename , NULL , NULL ) )
{
printf ( " Cannot save widget to <%s> \n " , filename ) ;
}
efl_del ( o ) ;
}
efl_del ( e ) ;
ecore_evas_free ( ee ) ;
}
static void
_run_test_compare ( const List_Entry * ent )
{
char path [ 2 * EXACTNESS_PATH_MAX ] ;
char origdir [ EXACTNESS_PATH_MAX ] ;
const char * base_dir ;
Eina_List * itr ;
int n = 1 ;
EINA_LIST_FOREACH ( _base_dirs , itr , base_dir )
{
sprintf ( path , " %s/%s.exu " , base_dir , ent - > name ) ;
if ( ecore_file_exists ( path ) )
{
char currentdir [ EXACTNESS_PATH_MAX ] ;
snprintf ( currentdir , EXACTNESS_PATH_MAX , " %s/%s " , _dest_dir , CURRENT_SUBDIR ) ;
_exu_imgs_unpack ( path , currentdir , ent - > name ) ;
snprintf ( origdir , EXACTNESS_PATH_MAX , " %s/%s/%s " , _dest_dir , CURRENT_SUBDIR , ORIG_SUBDIR ) ;
mkdir ( origdir , 0744 ) ;
_exu_imgs_unpack ( path , origdir , ent - > name ) ;
goto found ;
}
else
{
sprintf ( path , " %s/%s.rec " , base_dir , ent - > name ) ;
if ( ! ecore_file_exists ( path ) ) return ;
snprintf ( origdir , EXACTNESS_PATH_MAX , " %s/%s " , _dest_dir , ORIG_SUBDIR ) ;
goto found ;
}
}
found :
do
{
sprintf ( path , " %s/%s%c%.3d.png " , origdir , ent - > name , SHOT_DELIMITER , n ) ;
if ( ecore_file_exists ( path ) )
{
sprintf ( path , " %s%c%.3d.png " , ent - > name , SHOT_DELIMITER , n ) ;
_file_compare ( origdir , path ) ;
}
else break ;
n + + ;
} while ( EINA_TRUE ) ;
}
# define CONFIG "ELM_SCALE=1 ELM_FINGER_SIZE=10"
static Eina_Bool
_run_command_prepare ( const List_Entry * ent , char * buf )
@ -140,27 +279,33 @@ _run_test_prefix_rm(const char *dir, const char *prefix)
eina_file_dir_list ( dir , 0 , _prefix_rm_cb , ( void * ) prefix ) ;
}
static void
_job_compare ( void * data )
{
_run_test_compare ( data ) ;
/* If all jobs are done. */
if ( ! _running_jobs ) ecore_main_loop_quit ( ) ;
}
static Eina_Bool
_job_deleted_cb ( void * data EINA_UNUSED , int type EINA_UNUSED , void * event )
{
Ecore_Exe_Event_Del * msg = ( Ecore_Exe_Event_Del * ) event ;
List_Entry * ent = ecore_exe_data_get ( msg - > exe ) ;
if ( ( msg - > exit_code ! = 0 ) | | ( msg - > exit_signal ! = 0 ) )
{
List_Entry * ent = ecore_exe_data_get ( msg - > exe ) ;
_errors = eina_list_append ( _errors , ent ) ;
}
ecore_job_add ( _job_compare , ent ) ;
_running_jobs - - ;
_job_consume ( ) ;
/* If all jobs are done. */
if ( ! _running_jobs )
{
ecore_main_loop_quit ( ) ;
return ECORE_CALLBACK_DONE ;
}
if ( ! _running_jobs ) return ECORE_CALLBACK_DONE ;
return ECORE_CALLBACK_RENEW ;
}
@ -220,145 +365,6 @@ _scheduler_run()
while ( _job_consume ( ) ) ;
}
static Exactness_Image *
_image_load ( const char * filename )
{
int w , h ;
Evas_Load_Error err ;
Ecore_Evas * ee = ecore_evas_new ( NULL , 0 , 0 , 100 , 100 , NULL ) ;
Eo * e = ecore_evas_get ( ee ) ;
Eo * img = evas_object_image_add ( e ) ;
evas_object_image_file_set ( img , filename , NULL ) ;
err = evas_object_image_load_error_get ( img ) ;
if ( err ! = EVAS_LOAD_ERROR_NONE )
{
fprintf ( stderr , " could not load image '%s'. error string is \" %s \" \n " ,
filename , evas_load_error_str ( err ) ) ;
return NULL ;
}
Exactness_Image * ex_img = malloc ( sizeof ( * ex_img ) ) ;
int len ;
evas_object_image_size_get ( img , & w , & h ) ;
ex_img - > w = w ;
ex_img - > h = h ;
len = w * h * 4 ;
ex_img - > pixels = malloc ( len ) ;
memcpy ( ex_img - > pixels , evas_object_image_data_get ( img , EINA_FALSE ) , len ) ;
ecore_evas_free ( ee ) ;
return ex_img ;
}
static void
_image_save ( Exactness_Image * ex_img , const char * output )
{
Ecore_Evas * ee ;
Eo * e , * img ;
ee = ecore_evas_new ( NULL , 0 , 0 , 100 , 100 , NULL ) ;
e = ecore_evas_get ( ee ) ;
img = evas_object_image_add ( e ) ;
evas_object_image_size_set ( img , ex_img - > w , ex_img - > h ) ;
evas_object_image_data_set ( img , ex_img - > pixels ) ;
evas_object_image_save ( img , output , NULL , NULL ) ;
ecore_evas_free ( ee ) ;
}
static void
_file_compare ( const char * orig_dir , const char * ent_name )
{
char filename1 [ EXACTNESS_PATH_MAX ] , filename2 [ EXACTNESS_PATH_MAX ] ;
Exactness_Image * img1 , * img2 , * imgO = NULL ;
snprintf ( filename1 , EXACTNESS_PATH_MAX , " %s/%s " , orig_dir , ent_name ) ;
snprintf ( filename2 , EXACTNESS_PATH_MAX , " %s/%s/%s " , _dest_dir , CURRENT_SUBDIR , ent_name ) ;
img1 = _image_load ( filename1 ) ;
img2 = _image_load ( filename2 ) ;
if ( exactness_image_compare ( img1 , img2 , & imgO ) )
{
char buf [ EXACTNESS_PATH_MAX ] ;
snprintf ( buf , EXACTNESS_PATH_MAX , " %s/%s/comp_%s " , _dest_dir , CURRENT_SUBDIR , ent_name ) ;
_image_save ( imgO , buf ) ;
_compare_errors = eina_list_append ( _compare_errors , strdup ( ent_name ) ) ;
}
exactness_image_free ( img1 ) ;
exactness_image_free ( img2 ) ;
exactness_image_free ( imgO ) ;
}
static void
_exu_imgs_unpack ( const char * exu_path , const char * dir , const char * ent_name )
{
Exactness_Unit * unit = exactness_unit_file_read ( exu_path ) ;
Exactness_Image * img ;
Eina_List * itr ;
Ecore_Evas * ee = ecore_evas_new ( NULL , 0 , 0 , 100 , 100 , NULL ) ;
Eo * e = ecore_evas_get ( ee ) ;
int n = 1 ;
if ( ! unit ) return ;
EINA_LIST_FOREACH ( unit - > imgs , itr , img )
{
char filename [ EXACTNESS_PATH_MAX ] ;
Eo * o = evas_object_image_add ( e ) ;
snprintf ( filename , EXACTNESS_PATH_MAX , " %s/%s%c%.3d.png " ,
dir , ent_name , SHOT_DELIMITER , n + + ) ;
evas_object_image_size_set ( o , img - > w , img - > h ) ;
evas_object_image_data_set ( o , img - > pixels ) ;
if ( ! evas_object_image_save ( o , filename , NULL , NULL ) )
{
printf ( " Cannot save widget to <%s> \n " , filename ) ;
}
efl_del ( o ) ;
}
efl_del ( e ) ;
ecore_evas_free ( ee ) ;
}
static void
_run_test_compare ( const List_Entry * ent )
{
char path [ 2 * EXACTNESS_PATH_MAX ] ;
char origdir [ EXACTNESS_PATH_MAX ] ;
const char * base_dir ;
Eina_List * itr ;
int n = 1 ;
EINA_LIST_FOREACH ( _base_dirs , itr , base_dir )
{
sprintf ( path , " %s/%s.exu " , base_dir , ent - > name ) ;
if ( ecore_file_exists ( path ) )
{
char currentdir [ EXACTNESS_PATH_MAX ] ;
snprintf ( currentdir , EXACTNESS_PATH_MAX , " %s/%s " , _dest_dir , CURRENT_SUBDIR ) ;
_exu_imgs_unpack ( path , currentdir , ent - > name ) ;
snprintf ( origdir , EXACTNESS_PATH_MAX , " %s/%s/%s " , _dest_dir , CURRENT_SUBDIR , ORIG_SUBDIR ) ;
mkdir ( origdir , 0744 ) ;
_exu_imgs_unpack ( path , origdir , ent - > name ) ;
goto found ;
}
else
{
sprintf ( path , " %s/%s.rec " , base_dir , ent - > name ) ;
if ( ! ecore_file_exists ( path ) ) return ;
snprintf ( origdir , EXACTNESS_PATH_MAX , " %s/%s " , _dest_dir , ORIG_SUBDIR ) ;
goto found ;
}
}
found :
do
{
sprintf ( path , " %s/%s%c%.3d.png " , origdir , ent - > name , SHOT_DELIMITER , n ) ;
if ( ecore_file_exists ( path ) )
{
sprintf ( path , " %s%c%.3d.png " , ent - > name , SHOT_DELIMITER , n ) ;
_file_compare ( origdir , path ) ;
}
else break ;
n + + ;
} while ( EINA_TRUE ) ;
}
static List_Entry *
_list_file_load ( const char * filename )
{
@ -582,7 +588,7 @@ main(int argc, char *argv[])
/* Results */
printf ( " ******************************************************* \n " ) ;
if ( mode_play )
if ( mode_play & & EINA_FALSE )
{
List_Entry * list_itr ;