| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkBitmapHasher.h" | 9 #include "SkBitmapHasher.h" |
| 10 #include "SkData.h" | 10 #include "SkData.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 return fImageDigestRef.get(); | 88 return fImageDigestRef.get(); |
| 89 } | 89 } |
| 90 | 90 |
| 91 const SkBitmap *BitmapAndDigest::getBitmapPtr() const { | 91 const SkBitmap *BitmapAndDigest::getBitmapPtr() const { |
| 92 return &fBitmap; | 92 return &fBitmap; |
| 93 } | 93 } |
| 94 | 94 |
| 95 // ImageResultsAndExpectations class... | 95 // ImageResultsAndExpectations class... |
| 96 | 96 |
| 97 bool ImageResultsAndExpectations::readExpectationsFile(const char *jsonPath)
{ | 97 bool ImageResultsAndExpectations::readExpectationsFile(const char *jsonPath)
{ |
| 98 if (Parse(jsonPath, &fExpectedJsonRoot)) { | 98 if (NULL == jsonPath) { |
| 99 fExpectedResults = fExpectedJsonRoot[kJsonKey_ExpectedResults]; | 99 SkDebugf("JSON expectations filename not specified\n"); |
| 100 return true; | |
| 101 } else { | |
| 102 return false; | 100 return false; |
| 103 } | 101 } |
| 102 SkFILE* filePtr = sk_fopen(jsonPath, kRead_SkFILE_Flag); |
| 103 if (NULL == filePtr) { |
| 104 SkDebugf("JSON expectations file '%s' does not exist\n", jsonPath); |
| 105 return false; |
| 106 } |
| 107 size_t size = sk_fgetsize(filePtr); |
| 108 if (0 == size) { |
| 109 SkDebugf("JSON expectations file '%s' is empty, so no expectations\n
", jsonPath); |
| 110 sk_fclose(filePtr); |
| 111 fExpectedResults.clear(); |
| 112 return true; |
| 113 } |
| 114 bool parsedJson = Parse(filePtr, &fExpectedJsonRoot); |
| 115 sk_fclose(filePtr); |
| 116 if (!parsedJson) { |
| 117 SkDebugf("Failed to parse JSON expectations file '%s'\n", jsonPath); |
| 118 return false; |
| 119 } |
| 120 Json::Value header = fExpectedJsonRoot[kJsonKey_Header]; |
| 121 Json::Value headerType = header[kJsonKey_Header_Type]; |
| 122 Json::Value headerRevision = header[kJsonKey_Header_Revision]; |
| 123 if (strcmp(headerType.asCString(), kJsonValue_Header_Type)) { |
| 124 SkDebugf("JSON expectations file '%s': expected headerType '%s', fou
nd '%s'\n", |
| 125 jsonPath, kJsonValue_Header_Type, headerType.asCString()); |
| 126 return false; |
| 127 } |
| 128 if (headerRevision.asInt() != kJsonValue_Header_Revision) { |
| 129 SkDebugf("JSON expectations file '%s': expected headerRevision %d, f
ound %d\n", |
| 130 jsonPath, kJsonValue_Header_Revision, headerRevision.asInt(
)); |
| 131 return false; |
| 132 } |
| 133 fExpectedResults = fExpectedJsonRoot[kJsonKey_ExpectedResults]; |
| 134 return true; |
| 104 } | 135 } |
| 105 | 136 |
| 106 void ImageResultsAndExpectations::add(const char *sourceName, const char *fi
leName, | 137 void ImageResultsAndExpectations::add(const char *sourceName, const char *fi
leName, |
| 107 const ImageDigest &digest, const int *
tileNumber) { | 138 const ImageDigest &digest, const int *
tileNumber) { |
| 108 // Get expectation, if any. | 139 // Get expectation, if any. |
| 109 Json::Value expectedImage; | 140 Json::Value expectedImage; |
| 110 if (!fExpectedResults.isNull()) { | 141 if (!fExpectedResults.isNull()) { |
| 111 if (NULL == tileNumber) { | 142 if (NULL == tileNumber) { |
| 112 expectedImage = fExpectedResults[sourceName][kJsonKey_Source_Who
leImage]; | 143 expectedImage = fExpectedResults[sourceName][kJsonKey_Source_Who
leImage]; |
| 113 } else { | 144 } else { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 header[kJsonKey_Header_Type] = kJsonValue_Header_Type; | 205 header[kJsonKey_Header_Type] = kJsonValue_Header_Type; |
| 175 header[kJsonKey_Header_Revision] = kJsonValue_Header_Revision; | 206 header[kJsonKey_Header_Revision] = kJsonValue_Header_Revision; |
| 176 Json::Value root; | 207 Json::Value root; |
| 177 root[kJsonKey_Header] = header; | 208 root[kJsonKey_Header] = header; |
| 178 root[kJsonKey_ActualResults] = fActualResults; | 209 root[kJsonKey_ActualResults] = fActualResults; |
| 179 std::string jsonStdString = root.toStyledString(); | 210 std::string jsonStdString = root.toStyledString(); |
| 180 SkFILEWStream stream(filename); | 211 SkFILEWStream stream(filename); |
| 181 stream.write(jsonStdString.c_str(), jsonStdString.length()); | 212 stream.write(jsonStdString.c_str(), jsonStdString.length()); |
| 182 } | 213 } |
| 183 | 214 |
| 184 /*static*/ bool ImageResultsAndExpectations::Parse(const char *jsonPath, | 215 /*static*/ bool ImageResultsAndExpectations::Parse(SkFILE *filePtr, |
| 185 Json::Value *jsonRoot) { | 216 Json::Value *jsonRoot) { |
| 186 SkAutoDataUnref dataRef(SkData::NewFromFileName(jsonPath)); | 217 SkAutoDataUnref dataRef(SkData::NewFromFILE(filePtr)); |
| 187 if (NULL == dataRef.get()) { | 218 if (NULL == dataRef.get()) { |
| 188 SkDebugf("error reading JSON file %s\n", jsonPath); | |
| 189 return false; | 219 return false; |
| 190 } | 220 } |
| 191 | 221 |
| 192 const char *bytes = reinterpret_cast<const char *>(dataRef.get()->data()
); | 222 const char *bytes = reinterpret_cast<const char *>(dataRef.get()->data()
); |
| 193 size_t size = dataRef.get()->size(); | 223 size_t size = dataRef.get()->size(); |
| 194 Json::Reader reader; | 224 Json::Reader reader; |
| 195 if (!reader.parse(bytes, bytes+size, *jsonRoot)) { | 225 if (!reader.parse(bytes, bytes+size, *jsonRoot)) { |
| 196 SkDebugf("error parsing JSON file %s\n", jsonPath); | |
| 197 return false; | 226 return false; |
| 198 } | 227 } |
| 199 | 228 |
| 200 return true; | 229 return true; |
| 201 } | 230 } |
| 202 | 231 |
| 203 } // namespace sk_tools | 232 } // namespace sk_tools |
| OLD | NEW |