sdl

FORK: Simple Directmedia Layer
git clone https://git.neptards.moe/neptards/sdl.git
Log | Files | Refs

screenshot.c (3863B)


      1 /* See COPYING.txt for the full license governing this code. */
      2 /**
      3  * \file screenshot.c 
      4  *
      5  * Source file for the screenshot API.
      6  */
      7 
      8 #include "SDL_visualtest_mischelper.h"
      9 #include <SDL_test.h>
     10 
     11 int
     12 SDLVisualTest_VerifyScreenshots(char* args, char* test_dir, char* verify_dir)
     13 {
     14     int i, verify_len, return_code, test_len;
     15     char hash[33];
     16     char* verify_path; /* path to the bmp file used for verification */
     17     char* test_path; /* path to the bmp file to be verified */
     18     SDL_RWops* rw;
     19     SDL_Surface* verifybmp;
     20 
     21     return_code = 1;
     22 
     23     if(!args)
     24     {
     25         SDLTest_LogError("args argument cannot be NULL");
     26         return_code = -1;
     27         goto verifyscreenshots_cleanup_generic;
     28     }
     29     if(!test_dir)
     30     {
     31         SDLTest_LogError("test_dir argument cannot be NULL");
     32         return_code = -1;
     33         goto verifyscreenshots_cleanup_generic;
     34     }
     35     if(!verify_dir)
     36     {
     37         SDLTest_LogError("verify_dir argument cannot be NULL");
     38         return_code = -1;
     39         goto verifyscreenshots_cleanup_generic;
     40     }
     41 
     42     /* generate the MD5 hash */
     43     SDLVisualTest_HashString(args, hash);
     44 
     45     /* find the verification image */
     46     /* path_len + hash_len + some number of extra characters */
     47     verify_len = SDL_strlen(verify_dir) + 32 + 10;
     48     verify_path = (char*)SDL_malloc(verify_len * sizeof(char));
     49     if(!verify_path)
     50     {
     51         SDLTest_LogError("malloc() failed");
     52         return_code = -1;
     53         goto verifyscreenshots_cleanup_generic;
     54     }
     55     SDL_snprintf(verify_path, verify_len - 1,
     56                  "%s/%s.bmp", verify_dir, hash);
     57     rw = SDL_RWFromFile(verify_path, "rb");
     58     if(!rw)
     59     {
     60         SDLTest_Log("Verification image does not exist."
     61                     " Please manually verify that the SUT is working correctly.");
     62         return_code = 2;
     63         goto verifyscreenshots_cleanup_verifypath;
     64     }
     65 
     66     /* load the verification image */
     67     verifybmp = SDL_LoadBMP_RW(rw, 1);
     68     if(!verifybmp)
     69     {
     70         SDLTest_LogError("SDL_LoadBMP_RW() failed");
     71         return_code = -1;
     72         goto verifyscreenshots_cleanup_verifypath;
     73     }
     74 
     75     /* load the test images and compare with the verification image */
     76     /* path_len + hash_len + some number of extra characters */
     77     test_len = SDL_strlen(test_dir) + 32 + 10;
     78     test_path = (char*)SDL_malloc(test_len * sizeof(char));
     79     if(!test_path)
     80     {
     81         SDLTest_LogError("malloc() failed");
     82         return_code = -1;
     83         goto verifyscreenshots_cleanup_verifybmp;
     84     }
     85 
     86     for(i = 1; ; i++)
     87     {
     88         SDL_RWops* testrw;
     89         SDL_Surface* testbmp;
     90 
     91         if(i == 1)
     92             SDL_snprintf(test_path, test_len - 1, "%s/%s.bmp", test_dir, hash);
     93         else
     94             SDL_snprintf(test_path, test_len - 1, "%s/%s_%d.bmp", test_dir, hash, i);
     95         testrw = SDL_RWFromFile(test_path, "rb");
     96         
     97         /* we keep going until we've iterated through the screenshots each
     98            SUT window */
     99         if(!testrw)
    100             break;
    101 
    102         /* load the test screenshot */
    103         testbmp = SDL_LoadBMP_RW(testrw, 1);
    104         if(!testbmp)
    105         {
    106             SDLTest_LogError("SDL_LoadBMP_RW() failed");
    107             return_code = -1;
    108             goto verifyscreenshots_cleanup_verifybmp;
    109         }
    110 
    111         /* compare with the verification image */
    112         if(SDLTest_CompareSurfaces(testbmp, verifybmp, 0) != 0)
    113         {
    114             return_code = 0;
    115             SDL_FreeSurface(testbmp);
    116             goto verifyscreenshots_cleanup_verifybmp;
    117         }
    118 
    119         SDL_FreeSurface(testbmp);
    120     }
    121 
    122     if(i == 1)
    123     {
    124         SDLTest_LogError("No verification images found");
    125         return_code = -1;
    126     }
    127 
    128 verifyscreenshots_cleanup_verifybmp:
    129     SDL_FreeSurface(verifybmp);
    130 
    131 verifyscreenshots_cleanup_verifypath:
    132     SDL_free(verify_path);
    133 
    134 verifyscreenshots_cleanup_generic:
    135     return return_code;
    136 }