Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: tests/PDFPrimitivesTest.cpp

Issue 2146103004: SkPDF: re-work SkPDFUtils::FloatToDecimal (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-07-25 (Monday) 15:22:36 EDT Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pdf/SkPDFUtils.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 The Android Open Source Project 2 * Copyright 2010 The Android Open Source Project
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 "Resources.h" 8 #include "Resources.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
11 #include "SkData.h" 11 #include "SkData.h"
12 #include "SkDocument.h" 12 #include "SkDocument.h"
13 #include "SkDeflate.h" 13 #include "SkDeflate.h"
14 #include "SkImageEncoder.h" 14 #include "SkImageEncoder.h"
15 #include "SkMatrix.h" 15 #include "SkMatrix.h"
16 #include "SkPDFCanon.h" 16 #include "SkPDFCanon.h"
17 #include "SkPDFDevice.h" 17 #include "SkPDFDevice.h"
18 #include "SkPDFFont.h" 18 #include "SkPDFFont.h"
19 #include "SkPDFStream.h" 19 #include "SkPDFStream.h"
20 #include "SkPDFTypes.h" 20 #include "SkPDFTypes.h"
21 #include "SkPDFUtils.h" 21 #include "SkPDFUtils.h"
22 #include "SkReadBuffer.h" 22 #include "SkReadBuffer.h"
23 #include "SkScalar.h" 23 #include "SkScalar.h"
24 #include "SkSpecialImage.h" 24 #include "SkSpecialImage.h"
25 #include "SkStream.h" 25 #include "SkStream.h"
26 #include "SkTypes.h" 26 #include "SkTypes.h"
27 #include "Test.h" 27 #include "Test.h"
28 #include "sk_tool_utils.h" 28 #include "sk_tool_utils.h"
29 29
30 #include <cstdlib>
31 #include <cmath>
32
30 #define DUMMY_TEXT "DCT compessed stream." 33 #define DUMMY_TEXT "DCT compessed stream."
31 34
32 namespace { 35 namespace {
33 struct Catalog { 36 struct Catalog {
34 SkPDFSubstituteMap substitutes; 37 SkPDFSubstituteMap substitutes;
35 SkPDFObjNumMap numbers; 38 SkPDFObjNumMap numbers;
36 }; 39 };
37 } // namespace 40 } // namespace
38 41
39 template <typename T> 42 template <typename T>
40 static SkString emit_to_string(T& obj, Catalog* catPtr = nullptr) { 43 static SkString emit_to_string(T& obj, Catalog* catPtr = nullptr) {
41 Catalog catalog; 44 Catalog catalog;
42 SkDynamicMemoryWStream buffer; 45 SkDynamicMemoryWStream buffer;
43 if (!catPtr) { 46 if (!catPtr) {
44 catPtr = &catalog; 47 catPtr = &catalog;
45 } 48 }
46 obj.emitObject(&buffer, catPtr->numbers, catPtr->substitutes); 49 obj.emitObject(&buffer, catPtr->numbers, catPtr->substitutes);
47 SkAutoTDelete<SkStreamAsset> asset(buffer.detachAsStream()); 50 SkString tmp(buffer.bytesWritten());
48 SkString tmp(asset->getLength()); 51 buffer.copyTo(tmp.writable_str());
49 asset->read(tmp.writable_str(), asset->getLength());
50 return tmp; 52 return tmp;
51 } 53 }
52 54
53 static bool eq(const SkString& str, const char* strPtr, size_t len) { 55 static bool eq(const SkString& str, const char* strPtr, size_t len) {
54 return len == str.size() && 0 == memcmp(str.c_str(), strPtr, len); 56 return len == str.size() && 0 == memcmp(str.c_str(), strPtr, len);
55 } 57 }
56 58
57 #define ASSERT_EQL(REPORTER, SKSTRING, STRING, LEN) \ 59 static void assert_eql(skiatest::Reporter* reporter,
58 do { \ 60 const SkString& skString,
59 const char* strptr = STRING; \ 61 const char* str,
60 const SkString& sks = SKSTRING; \ 62 size_t len) {
61 if (!eq(sks, strptr, LEN)) { \ 63 if (!eq(skString, str, len)) {
62 REPORT_FAILURE( \ 64 REPORT_FAILURE(reporter, "", SkStringPrintf(
63 REPORTER, \ 65 "'%*s' != '%s'", len, str, skString.c_str()));
64 "", \ 66 }
65 SkStringPrintf("'%s' != '%s'", strptr, sks.c_str())); \ 67 }
66 } \
67 } while (false)
68 68
69 #define ASSERT_EQ(REPORTER, SKSTRING, STRING) \ 69 static void assert_eq(skiatest::Reporter* reporter,
70 do { \ 70 const SkString& skString,
71 const char* str = STRING; \ 71 const char* str) {
72 ASSERT_EQL(REPORTER, SKSTRING, str, strlen(str)); \ 72 assert_eql(reporter, skString, str, strlen(str));
73 } while (false) 73 }
74
75 #define ASSERT_EMIT_EQ(REPORTER, OBJECT, STRING) \
76 do { \
77 SkString result = emit_to_string(OBJECT); \
78 ASSERT_EQ(REPORTER, result, STRING); \
79 } while (false)
80 74
81 75
76 template <typename T>
77 static void assert_emit_eq(skiatest::Reporter* reporter,
78 T& object,
79 const char* string) {
80 SkString result = emit_to_string(object);
81 assert_eq(reporter, result, string);
82 }
82 83
83 static void TestPDFStream(skiatest::Reporter* reporter) { 84 static void TestPDFStream(skiatest::Reporter* reporter) {
84 char streamBytes[] = "Test\nFoo\tBar"; 85 char streamBytes[] = "Test\nFoo\tBar";
85 SkAutoTDelete<SkMemoryStream> streamData(new SkMemoryStream( 86 SkAutoTDelete<SkMemoryStream> streamData(new SkMemoryStream(
86 streamBytes, strlen(streamBytes), true)); 87 streamBytes, strlen(streamBytes), true));
87 sk_sp<SkPDFStream> stream(new SkPDFStream(streamData.get())); 88 sk_sp<SkPDFStream> stream(new SkPDFStream(streamData.get()));
88 ASSERT_EMIT_EQ(reporter, 89 assert_emit_eq(reporter,
89 *stream, 90 *stream,
90 "<</Length 12>> stream\nTest\nFoo\tBar\nendstream"); 91 "<</Length 12>> stream\nTest\nFoo\tBar\nendstream");
91 stream->insertInt("Attribute", 42); 92 stream->insertInt("Attribute", 42);
92 ASSERT_EMIT_EQ(reporter, 93 assert_emit_eq(reporter,
93 *stream, 94 *stream,
94 "<</Length 12\n/Attribute 42>> stream\n" 95 "<</Length 12\n/Attribute 42>> stream\n"
95 "Test\nFoo\tBar\nendstream"); 96 "Test\nFoo\tBar\nendstream");
96 97
97 { 98 {
98 char streamBytes2[] = "This is a longer string, so that compression " 99 char streamBytes2[] = "This is a longer string, so that compression "
99 "can do something with it. With shorter strings, " 100 "can do something with it. With shorter strings, "
100 "the short circuit logic cuts in and we end up " 101 "the short circuit logic cuts in and we end up "
101 "with an uncompressed string."; 102 "with an uncompressed string.";
102 SkAutoDataUnref streamData2(SkData::NewWithCopy(streamBytes2, 103 SkAutoDataUnref streamData2(SkData::NewWithCopy(streamBytes2,
103 strlen(streamBytes2))); 104 strlen(streamBytes2)));
104 sk_sp<SkPDFStream> stream(new SkPDFStream(streamData2.get())); 105 sk_sp<SkPDFStream> stream(new SkPDFStream(streamData2.get()));
105 106
106 SkDynamicMemoryWStream compressedByteStream; 107 SkDynamicMemoryWStream compressedByteStream;
107 SkDeflateWStream deflateWStream(&compressedByteStream); 108 SkDeflateWStream deflateWStream(&compressedByteStream);
108 deflateWStream.write(streamBytes2, strlen(streamBytes2)); 109 deflateWStream.write(streamBytes2, strlen(streamBytes2));
109 deflateWStream.finalize(); 110 deflateWStream.finalize();
110 111
111 SkDynamicMemoryWStream expected; 112 SkDynamicMemoryWStream expected;
112 expected.writeText("<</Filter /FlateDecode\n/Length 116>> stream\n"); 113 expected.writeText("<</Filter /FlateDecode\n/Length 116>> stream\n");
113 compressedByteStream.writeToStream(&expected); 114 compressedByteStream.writeToStream(&expected);
114 compressedByteStream.reset(); 115 compressedByteStream.reset();
115 expected.writeText("\nendstream"); 116 expected.writeText("\nendstream");
116 SkAutoDataUnref expectedResultData2(expected.copyToData()); 117 SkAutoDataUnref expectedResultData2(expected.copyToData());
117 SkString result = emit_to_string(*stream); 118 SkString result = emit_to_string(*stream);
118 ASSERT_EQL(reporter, 119 assert_eql(reporter,
119 result, 120 result,
120 (const char*)expectedResultData2->data(), 121 (const char*)expectedResultData2->data(),
121 expectedResultData2->size()); 122 expectedResultData2->size());
122 } 123 }
123 } 124 }
124 125
125 static void TestObjectNumberMap(skiatest::Reporter* reporter) { 126 static void TestObjectNumberMap(skiatest::Reporter* reporter) {
126 SkPDFObjNumMap objNumMap; 127 SkPDFObjNumMap objNumMap;
127 sk_sp<SkPDFArray> a1(new SkPDFArray); 128 sk_sp<SkPDFArray> a1(new SkPDFArray);
128 sk_sp<SkPDFArray> a2(new SkPDFArray); 129 sk_sp<SkPDFArray> a2(new SkPDFArray);
(...skipping 18 matching lines...) Expand all
147 sk_sp<SkPDFArray> a2(new SkPDFArray); 148 sk_sp<SkPDFArray> a2(new SkPDFArray);
148 a2->appendObjRef(a1); 149 a2->appendObjRef(a1);
149 150
150 Catalog catalog; 151 Catalog catalog;
151 catalog.numbers.addObject(a1.get()); 152 catalog.numbers.addObject(a1.get());
152 REPORTER_ASSERT(reporter, catalog.numbers.getObjectNumber(a1.get()) == 1); 153 REPORTER_ASSERT(reporter, catalog.numbers.getObjectNumber(a1.get()) == 1);
153 154
154 SkString result = emit_to_string(*a2, &catalog); 155 SkString result = emit_to_string(*a2, &catalog);
155 // If appendObjRef misbehaves, then the result would 156 // If appendObjRef misbehaves, then the result would
156 // be [[]], not [1 0 R]. 157 // be [[]], not [1 0 R].
157 ASSERT_EQ(reporter, result, "[1 0 R]"); 158 assert_eq(reporter, result, "[1 0 R]");
158 } 159 }
159 160
160 static void TestSubstitute(skiatest::Reporter* reporter) { 161 static void TestSubstitute(skiatest::Reporter* reporter) {
161 sk_sp<SkPDFDict> proxy(new SkPDFDict()); 162 sk_sp<SkPDFDict> proxy(new SkPDFDict());
162 sk_sp<SkPDFDict> stub(new SkPDFDict()); 163 sk_sp<SkPDFDict> stub(new SkPDFDict());
163 164
164 proxy->insertInt("Value", 33); 165 proxy->insertInt("Value", 33);
165 stub->insertInt("Value", 44); 166 stub->insertInt("Value", 44);
166 167
167 SkPDFSubstituteMap substituteMap; 168 SkPDFSubstituteMap substituteMap;
(...skipping 15 matching lines...) Expand all
183 SkCanvas* canvas = doc->beginPage(100.0f, 100.0f); 184 SkCanvas* canvas = doc->beginPage(100.0f, 100.0f);
184 SkPaint paint; 185 SkPaint paint;
185 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); 186 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
186 187
187 uint16_t glyphID = 65000; 188 uint16_t glyphID = 65000;
188 canvas->drawText(&glyphID, 2, 0, 0, paint); 189 canvas->drawText(&glyphID, 2, 0, 0, paint);
189 190
190 doc->close(); 191 doc->close();
191 } 192 }
192 193
194 static void assert_emit_eq_number(skiatest::Reporter* reporter, float number) {
195 SkPDFUnion pdfUnion = SkPDFUnion::Scalar(number);
196 SkString result = emit_to_string(pdfUnion);
197 float value = static_cast<float>(std::atof(result.c_str()));
198 if (value != number) {
199 ERRORF(reporter, "%.9g != %s", number, result.c_str());
200 }
201 }
202
203
193 static void TestPDFUnion(skiatest::Reporter* reporter) { 204 static void TestPDFUnion(skiatest::Reporter* reporter) {
194 SkPDFUnion boolTrue = SkPDFUnion::Bool(true); 205 SkPDFUnion boolTrue = SkPDFUnion::Bool(true);
195 ASSERT_EMIT_EQ(reporter, boolTrue, "true"); 206 assert_emit_eq(reporter, boolTrue, "true");
196 207
197 SkPDFUnion boolFalse = SkPDFUnion::Bool(false); 208 SkPDFUnion boolFalse = SkPDFUnion::Bool(false);
198 ASSERT_EMIT_EQ(reporter, boolFalse, "false"); 209 assert_emit_eq(reporter, boolFalse, "false");
199 210
200 SkPDFUnion int42 = SkPDFUnion::Int(42); 211 SkPDFUnion int42 = SkPDFUnion::Int(42);
201 ASSERT_EMIT_EQ(reporter, int42, "42"); 212 assert_emit_eq(reporter, int42, "42");
202 213
203 SkPDFUnion realHalf = SkPDFUnion::Scalar(SK_ScalarHalf); 214 assert_emit_eq_number(reporter, SK_ScalarHalf);
204 ASSERT_EMIT_EQ(reporter, realHalf, ".5"); 215 assert_emit_eq_number(reporter, 110999.75f); // bigScalar
205 216 assert_emit_eq_number(reporter, 50000000.1f); // biggerScalar
206 SkPDFUnion bigScalar = SkPDFUnion::Scalar(110999.75f); 217 assert_emit_eq_number(reporter, 1.0f / 65536); // smallScalar
207 ASSERT_EMIT_EQ(reporter, bigScalar, "110999.75");
208
209 SkPDFUnion biggerScalar = SkPDFUnion::Scalar(50000000.1f);
210 ASSERT_EMIT_EQ(reporter, biggerScalar, "50000000");
211
212 SkPDFUnion smallestScalar = SkPDFUnion::Scalar(1.0f / 65536);
213 ASSERT_EMIT_EQ(reporter, smallestScalar, ".0000152587890");
214 218
215 SkPDFUnion stringSimple = SkPDFUnion::String("test ) string ( foo"); 219 SkPDFUnion stringSimple = SkPDFUnion::String("test ) string ( foo");
216 ASSERT_EMIT_EQ(reporter, stringSimple, "(test \\) string \\( foo)"); 220 assert_emit_eq(reporter, stringSimple, "(test \\) string \\( foo)");
217 221
218 SkString stringComplexInput("\ttest ) string ( foo"); 222 SkString stringComplexInput("\ttest ) string ( foo");
219 SkPDFUnion stringComplex = SkPDFUnion::String(stringComplexInput); 223 SkPDFUnion stringComplex = SkPDFUnion::String(stringComplexInput);
220 ASSERT_EMIT_EQ(reporter, stringComplex, "(\\011test \\) string \\( foo)"); 224 assert_emit_eq(reporter, stringComplex, "(\\011test \\) string \\( foo)");
221 225
222 SkString binaryStringInput("\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20"); 226 SkString binaryStringInput("\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20");
223 SkPDFUnion binaryString = SkPDFUnion::String(binaryStringInput); 227 SkPDFUnion binaryString = SkPDFUnion::String(binaryStringInput);
224 ASSERT_EMIT_EQ(reporter, binaryString, "<0102030405060708090A0B0C0D0E0F10>") ; 228 assert_emit_eq(reporter, binaryString, "<0102030405060708090A0B0C0D0E0F10>") ;
225 229
226 SkString nameInput("Test name\twith#tab"); 230 SkString nameInput("Test name\twith#tab");
227 SkPDFUnion name = SkPDFUnion::Name(nameInput); 231 SkPDFUnion name = SkPDFUnion::Name(nameInput);
228 ASSERT_EMIT_EQ(reporter, name, "/Test#20name#09with#23tab"); 232 assert_emit_eq(reporter, name, "/Test#20name#09with#23tab");
229 233
230 SkString nameInput2("A#/%()<>[]{}B"); 234 SkString nameInput2("A#/%()<>[]{}B");
231 SkPDFUnion name2 = SkPDFUnion::Name(nameInput2); 235 SkPDFUnion name2 = SkPDFUnion::Name(nameInput2);
232 ASSERT_EMIT_EQ(reporter, name2, "/A#23#2F#25#28#29#3C#3E#5B#5D#7B#7DB"); 236 assert_emit_eq(reporter, name2, "/A#23#2F#25#28#29#3C#3E#5B#5D#7B#7DB");
233 237
234 SkPDFUnion name3 = SkPDFUnion::Name("SimpleNameWithOnlyPrintableASCII"); 238 SkPDFUnion name3 = SkPDFUnion::Name("SimpleNameWithOnlyPrintableASCII");
235 ASSERT_EMIT_EQ(reporter, name3, "/SimpleNameWithOnlyPrintableASCII"); 239 assert_emit_eq(reporter, name3, "/SimpleNameWithOnlyPrintableASCII");
236 240
237 // Test that we correctly handle characters with the high-bit set. 241 // Test that we correctly handle characters with the high-bit set.
238 SkString highBitString("\xDE\xAD" "be\xEF"); 242 SkString highBitString("\xDE\xAD" "be\xEF");
239 SkPDFUnion highBitName = SkPDFUnion::Name(highBitString); 243 SkPDFUnion highBitName = SkPDFUnion::Name(highBitString);
240 ASSERT_EMIT_EQ(reporter, highBitName, "/#DE#ADbe#EF"); 244 assert_emit_eq(reporter, highBitName, "/#DE#ADbe#EF");
241 } 245 }
242 246
243 static void TestPDFArray(skiatest::Reporter* reporter) { 247 static void TestPDFArray(skiatest::Reporter* reporter) {
244 sk_sp<SkPDFArray> array(new SkPDFArray); 248 sk_sp<SkPDFArray> array(new SkPDFArray);
245 ASSERT_EMIT_EQ(reporter, *array, "[]"); 249 assert_emit_eq(reporter, *array, "[]");
246 250
247 array->appendInt(42); 251 array->appendInt(42);
248 ASSERT_EMIT_EQ(reporter, *array, "[42]"); 252 assert_emit_eq(reporter, *array, "[42]");
249 253
250 array->appendScalar(SK_ScalarHalf); 254 array->appendScalar(SK_ScalarHalf);
251 ASSERT_EMIT_EQ(reporter, *array, "[42 .5]"); 255 assert_emit_eq(reporter, *array, "[42 .5]");
252 256
253 array->appendInt(0); 257 array->appendInt(0);
254 ASSERT_EMIT_EQ(reporter, *array, "[42 .5 0]"); 258 assert_emit_eq(reporter, *array, "[42 .5 0]");
255 259
256 array->appendBool(true); 260 array->appendBool(true);
257 ASSERT_EMIT_EQ(reporter, *array, "[42 .5 0 true]"); 261 assert_emit_eq(reporter, *array, "[42 .5 0 true]");
258 262
259 array->appendName("ThisName"); 263 array->appendName("ThisName");
260 ASSERT_EMIT_EQ(reporter, *array, "[42 .5 0 true /ThisName]"); 264 assert_emit_eq(reporter, *array, "[42 .5 0 true /ThisName]");
261 265
262 array->appendName(SkString("AnotherName")); 266 array->appendName(SkString("AnotherName"));
263 ASSERT_EMIT_EQ(reporter, *array, "[42 .5 0 true /ThisName /AnotherName]"); 267 assert_emit_eq(reporter, *array, "[42 .5 0 true /ThisName /AnotherName]");
264 268
265 array->appendString("This String"); 269 array->appendString("This String");
266 ASSERT_EMIT_EQ(reporter, *array, 270 assert_emit_eq(reporter, *array,
267 "[42 .5 0 true /ThisName /AnotherName (This String)]"); 271 "[42 .5 0 true /ThisName /AnotherName (This String)]");
268 272
269 array->appendString(SkString("Another String")); 273 array->appendString(SkString("Another String"));
270 ASSERT_EMIT_EQ(reporter, *array, 274 assert_emit_eq(reporter, *array,
271 "[42 .5 0 true /ThisName /AnotherName (This String) " 275 "[42 .5 0 true /ThisName /AnotherName (This String) "
272 "(Another String)]"); 276 "(Another String)]");
273 277
274 sk_sp<SkPDFArray> innerArray(new SkPDFArray); 278 sk_sp<SkPDFArray> innerArray(new SkPDFArray);
275 innerArray->appendInt(-1); 279 innerArray->appendInt(-1);
276 array->appendObject(std::move(innerArray)); 280 array->appendObject(std::move(innerArray));
277 ASSERT_EMIT_EQ(reporter, *array, 281 assert_emit_eq(reporter, *array,
278 "[42 .5 0 true /ThisName /AnotherName (This String) " 282 "[42 .5 0 true /ThisName /AnotherName (This String) "
279 "(Another String) [-1]]"); 283 "(Another String) [-1]]");
280 284
281 sk_sp<SkPDFArray> referencedArray(new SkPDFArray); 285 sk_sp<SkPDFArray> referencedArray(new SkPDFArray);
282 Catalog catalog; 286 Catalog catalog;
283 catalog.numbers.addObject(referencedArray.get()); 287 catalog.numbers.addObject(referencedArray.get());
284 REPORTER_ASSERT(reporter, catalog.numbers.getObjectNumber( 288 REPORTER_ASSERT(reporter, catalog.numbers.getObjectNumber(
285 referencedArray.get()) == 1); 289 referencedArray.get()) == 1);
286 array->appendObjRef(std::move(referencedArray)); 290 array->appendObjRef(std::move(referencedArray));
287 291
288 SkString result = emit_to_string(*array, &catalog); 292 SkString result = emit_to_string(*array, &catalog);
289 ASSERT_EQ(reporter, result, 293 assert_eq(reporter, result,
290 "[42 .5 0 true /ThisName /AnotherName (This String) " 294 "[42 .5 0 true /ThisName /AnotherName (This String) "
291 "(Another String) [-1] 1 0 R]"); 295 "(Another String) [-1] 1 0 R]");
292 } 296 }
293 297
294 static void TestPDFDict(skiatest::Reporter* reporter) { 298 static void TestPDFDict(skiatest::Reporter* reporter) {
295 sk_sp<SkPDFDict> dict(new SkPDFDict); 299 sk_sp<SkPDFDict> dict(new SkPDFDict);
296 ASSERT_EMIT_EQ(reporter, *dict, "<<>>"); 300 assert_emit_eq(reporter, *dict, "<<>>");
297 301
298 dict->insertInt("n1", SkToSizeT(42)); 302 dict->insertInt("n1", SkToSizeT(42));
299 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 42>>"); 303 assert_emit_eq(reporter, *dict, "<</n1 42>>");
300 304
301 dict.reset(new SkPDFDict); 305 dict.reset(new SkPDFDict);
302 ASSERT_EMIT_EQ(reporter, *dict, "<<>>"); 306 assert_emit_eq(reporter, *dict, "<<>>");
303 307
304 dict->insertInt("n1", 42); 308 dict->insertInt("n1", 42);
305 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 42>>"); 309 assert_emit_eq(reporter, *dict, "<</n1 42>>");
306 310
307 dict->insertScalar("n2", SK_ScalarHalf); 311 dict->insertScalar("n2", SK_ScalarHalf);
308 312
309 SkString n3("n3"); 313 SkString n3("n3");
310 sk_sp<SkPDFArray> innerArray(new SkPDFArray); 314 sk_sp<SkPDFArray> innerArray(new SkPDFArray);
311 innerArray->appendInt(-100); 315 innerArray->appendInt(-100);
312 dict->insertObject(n3, std::move(innerArray)); 316 dict->insertObject(n3, std::move(innerArray));
313 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 42\n/n2 .5\n/n3 [-100]>>"); 317 assert_emit_eq(reporter, *dict, "<</n1 42\n/n2 .5\n/n3 [-100]>>");
314 318
315 dict.reset(new SkPDFDict); 319 dict.reset(new SkPDFDict);
316 ASSERT_EMIT_EQ(reporter, *dict, "<<>>"); 320 assert_emit_eq(reporter, *dict, "<<>>");
317 321
318 dict->insertInt("n1", 24); 322 dict->insertInt("n1", 24);
319 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24>>"); 323 assert_emit_eq(reporter, *dict, "<</n1 24>>");
320 324
321 dict->insertInt("n2", SkToSizeT(99)); 325 dict->insertInt("n2", SkToSizeT(99));
322 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24\n/n2 99>>"); 326 assert_emit_eq(reporter, *dict, "<</n1 24\n/n2 99>>");
323 327
324 dict->insertScalar("n3", SK_ScalarHalf); 328 dict->insertScalar("n3", SK_ScalarHalf);
325 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5>>"); 329 assert_emit_eq(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5>>");
326 330
327 dict->insertName("n4", "AName"); 331 dict->insertName("n4", "AName");
328 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName>>"); 332 assert_emit_eq(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName>>");
329 333
330 dict->insertName("n5", SkString("AnotherName")); 334 dict->insertName("n5", SkString("AnotherName"));
331 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName\n" 335 assert_emit_eq(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName\n"
332 "/n5 /AnotherName>>"); 336 "/n5 /AnotherName>>");
333 337
334 dict->insertString("n6", "A String"); 338 dict->insertString("n6", "A String");
335 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName\n" 339 assert_emit_eq(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName\n"
336 "/n5 /AnotherName\n/n6 (A String)>>"); 340 "/n5 /AnotherName\n/n6 (A String)>>");
337 341
338 dict->insertString("n7", SkString("Another String")); 342 dict->insertString("n7", SkString("Another String"));
339 ASSERT_EMIT_EQ(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName\n" 343 assert_emit_eq(reporter, *dict, "<</n1 24\n/n2 99\n/n3 .5\n/n4 /AName\n"
340 "/n5 /AnotherName\n/n6 (A String)\n/n7 (Another String)>>"); 344 "/n5 /AnotherName\n/n6 (A String)\n/n7 (Another String)>>");
341 345
342 dict.reset(new SkPDFDict("DType")); 346 dict.reset(new SkPDFDict("DType"));
343 ASSERT_EMIT_EQ(reporter, *dict, "<</Type /DType>>"); 347 assert_emit_eq(reporter, *dict, "<</Type /DType>>");
344 348
345 sk_sp<SkPDFArray> referencedArray(new SkPDFArray); 349 sk_sp<SkPDFArray> referencedArray(new SkPDFArray);
346 Catalog catalog; 350 Catalog catalog;
347 catalog.numbers.addObject(referencedArray.get()); 351 catalog.numbers.addObject(referencedArray.get());
348 REPORTER_ASSERT(reporter, catalog.numbers.getObjectNumber( 352 REPORTER_ASSERT(reporter, catalog.numbers.getObjectNumber(
349 referencedArray.get()) == 1); 353 referencedArray.get()) == 1);
350 dict->insertObjRef("n1", std::move(referencedArray)); 354 dict->insertObjRef("n1", std::move(referencedArray));
351 SkString result = emit_to_string(*dict, &catalog); 355 SkString result = emit_to_string(*dict, &catalog);
352 ASSERT_EQ(reporter, result, "<</Type /DType\n/n1 1 0 R>>"); 356 assert_eq(reporter, result, "<</Type /DType\n/n1 1 0 R>>");
353 } 357 }
354 358
355 DEF_TEST(PDFPrimitives, reporter) { 359 DEF_TEST(PDFPrimitives, reporter) {
356 TestPDFUnion(reporter); 360 TestPDFUnion(reporter);
357 TestPDFArray(reporter); 361 TestPDFArray(reporter);
358 TestPDFDict(reporter); 362 TestPDFDict(reporter);
359 TestPDFStream(reporter); 363 TestPDFStream(reporter);
360 TestObjectNumberMap(reporter); 364 TestObjectNumberMap(reporter);
361 TestObjectRef(reporter); 365 TestObjectRef(reporter);
362 TestSubstitute(reporter); 366 TestSubstitute(reporter);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 return; // The terminator is needed for sscanf(). 462 return; // The terminator is needed for sscanf().
459 } 463 }
460 if (reporter->verbose()) { 464 if (reporter->verbose()) {
461 SkDebugf("%15.9g = \"%s\"\n", inputFloat, floatString); 465 SkDebugf("%15.9g = \"%s\"\n", inputFloat, floatString);
462 } 466 }
463 float roundTripFloat; 467 float roundTripFloat;
464 if (1 != sscanf(floatString, "%f", &roundTripFloat)) { 468 if (1 != sscanf(floatString, "%f", &roundTripFloat)) {
465 ERRORF(reporter, "unscannable result: %s", floatString); 469 ERRORF(reporter, "unscannable result: %s", floatString);
466 return; 470 return;
467 } 471 }
468 if (isfinite(inputFloat) && roundTripFloat != inputFloat) { 472 if (std::isfinite(inputFloat) && roundTripFloat != inputFloat) {
469 ERRORF(reporter, "roundTripFloat (%.9g) != inputFloat (%.9g)", 473 ERRORF(reporter, "roundTripFloat (%.9g) != inputFloat (%.9g)",
470 roundTripFloat, inputFloat); 474 roundTripFloat, inputFloat);
471 } 475 }
472 } 476 }
473 477
474 // Test SkPDFUtils::AppendScalar for accuracy. 478 // Test SkPDFUtils::AppendScalar for accuracy.
475 DEF_TEST(PDFPrimitives_Scalar, reporter) { 479 DEF_TEST(PDFPrimitives_Scalar, reporter) {
476 SkRandom random(0x5EED); 480 SkRandom random(0x5EED);
477 int iterationCount = 512; 481 int iterationCount = 512;
478 while (iterationCount-- > 0) { 482 while (iterationCount-- > 0) {
(...skipping 18 matching lines...) Expand all
497 char buffer[5]; 501 char buffer[5];
498 for (int i = 0; i < 256; ++i) { 502 for (int i = 0; i < 256; ++i) {
499 size_t len = SkPDFUtils::ColorToDecimal(i, buffer); 503 size_t len = SkPDFUtils::ColorToDecimal(i, buffer);
500 REPORTER_ASSERT(reporter, len == strlen(buffer)); 504 REPORTER_ASSERT(reporter, len == strlen(buffer));
501 float f; 505 float f;
502 REPORTER_ASSERT(reporter, 1 == sscanf(buffer, "%f", &f)); 506 REPORTER_ASSERT(reporter, 1 == sscanf(buffer, "%f", &f));
503 int roundTrip = (int)(0.5 + f * 255); 507 int roundTrip = (int)(0.5 + f * 255);
504 REPORTER_ASSERT(reporter, roundTrip == i); 508 REPORTER_ASSERT(reporter, roundTrip == i);
505 } 509 }
506 } 510 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFUtils.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698