visualtest/src/screenshot.c
author Ryan C. Gordon
Mon, 23 Jan 2017 12:06:10 -0500
changeset 10837 c2f241c2f6ad
parent 7924 fcb86d323770
permissions -rw-r--r--
audio: Fix same bug as last commit, but for _mm_bslli_si128 vs _mm_slli_si128.
     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 }