Home | History | Annotate | Download | only in viewer
      1 /*
      2  * GMActualResultsLoader:
      3  * Reads an actual-results.json file, and imports its data into $scope.
      4  */
      5 var GMActualResultsLoader = angular.module(
      6     'GMActualResultsLoader',
      7     [],
      8     function($httpProvider) {
      9       /* Override transformResponse so that the numeric checksums are interpreted as
     10        * strings instead, since Javascript cannot handle 64-bit integers. */
     11       $httpProvider.defaults.transformResponse = function(data, headersGetter) {
     12         return JSON.parse(data.replace(/\s(\d+)\s/g, " \"$1\" "));
     13       }
     14     }
     15 );
     16 GMActualResultsLoader.controller(
     17     'GMActualResultsLoader.Controller',
     18     function($scope, $http) {
     19       /* When the changePlatformPath function is called, download actual-results.json
     20        * from the desired platform directory.
     21        *
     22        * When the JSON is received, predigest it (combining actual and expected results for each
     23        * test) and return it to the frontend as $scope.gmActualResults like so:
     24        *
     25        * [
     26        *   {"resultType": "failed",
     27        *    "resultsOfThisType": [
     28        *      {"test":"bigmatrix", "config":"gpu",
     29        *       "actualHashType": "bitmap-64bitMD5", "actualHashValue": "1234",
     30        *       "expectedHashType": "bitmap-64bitMD5", "actualHashValue": "6789"},
     31        *      {"test":"bigmatrix", "config":"8888",
     32        *       "actualHashType": "bitmap-64bitMD5", "actualHashValue": "5678",
     33        *       "expectedHashType": "bitmap-64bitMD5", "actualHashValue": "6789"},
     34        *      more tests...
     35        *    ]},
     36        *   {"resultType": "no-comparison",
     37        *    "resultsOfThisType": [
     38        *      {"test":"aaclip", "config":"gpu",
     39        *       "actualHashType": "bitmap-64bitMD5", "actualHashValue": "8765"},
     40        *      {"test":"aaclip", "config":"8888",
     41        *       "actualHashType": "bitmap-64bitMD5", "actualHashValue": "4321"},
     42        *      more tests...
     43        *    ]},
     44        *   more result types...
     45        * ]
     46        */
     47       $scope.changePlatformPath = function() {
     48         $http.get($scope.platformPath + "/actual-results.json").success(
     49             function(response) {
     50               var jsonResults = [];
     51               var imageNameRegex = /^(.+)_([^_]+).png/;
     52               angular.forEach(response['actual-results'], function(resultsOfThisType, resultType) {
     53                 var resultCollection = [];
     54                 angular.forEach(resultsOfThisType, function(hashTypeAndValue, imageName) {
     55                   var matched = imageNameRegex.exec(imageName);
     56                   var thisResult = {
     57                     test: matched[1], config: matched[2],
     58                     actualHashType: hashTypeAndValue[0], actualHashValue: hashTypeAndValue[1] };
     59                   var expectations = response['expected-results'][imageName]['allowed-digests'];
     60                   if (expectations != null) {
     61                     thisResult.expectedHashType = expectations[0][0];
     62                     thisResult.expectedHashValue = expectations[0][1];
     63                   }
     64                   resultCollection.push(thisResult);
     65                 });
     66                 var resultTypeAndCollection = { resultType: resultType,
     67                                                 resultsOfThisType: resultCollection };
     68                 jsonResults.push(resultTypeAndCollection);
     69               });
     70               $scope.gmActualResults = jsonResults;
     71             }
     72          );
     73       };
     74     }
     75 );
     76