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 |