From 2ccdb636e8618db77be8e05cdacd82c249c6898c Mon Sep 17 00:00:00 2001 From: halcanary Date: Tue, 11 Aug 2015 13:35:12 -0700 Subject: SkPDF: clean up overuse of SK_SUPPORT_PDF When possible use run-time checks (via SkDocument::CreatePDF) When PDF is disabled, do not compile tests/PDF*.cpp Review URL: https://codereview.chromium.org/1278403006 --- tests/PDFDeflateWStreamTest.cpp | 72 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tests/PDFDeflateWStreamTest.cpp (limited to 'tests/PDFDeflateWStreamTest.cpp') diff --git a/tests/PDFDeflateWStreamTest.cpp b/tests/PDFDeflateWStreamTest.cpp new file mode 100644 index 0000000000..b22574671b --- /dev/null +++ b/tests/PDFDeflateWStreamTest.cpp @@ -0,0 +1,72 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkFlate.h" +#include "SkRandom.h" +#include "Test.h" + +DEF_TEST(SkDeflateWStream, r) { + SkRandom random(123456); + for (int i = 0; i < 50; ++i) { + uint32_t size = random.nextULessThan(10000); + SkAutoTMalloc buffer(size); + for (uint32_t j = 0; j < size; ++j) { + buffer[j] = random.nextU() & 0xff; + } + + SkDynamicMemoryWStream dynamicMemoryWStream; + { + SkDeflateWStream deflateWStream(&dynamicMemoryWStream); + uint32_t j = 0; + while (j < size) { + uint32_t writeSize = + SkTMin(size - j, random.nextRangeU(1, 400)); + if (!deflateWStream.write(&buffer[j], writeSize)) { + ERRORF(r, "something went wrong."); + return; + } + j += writeSize; + } + } + SkAutoTDelete compressed( + dynamicMemoryWStream.detachAsStream()); + + SkDynamicMemoryWStream decompressedDynamicMemoryWStream; + SkAssertResult(SkFlate::Inflate(compressed, + &decompressedDynamicMemoryWStream)); + + SkAutoTDelete decompressed( + decompressedDynamicMemoryWStream.detachAsStream()); + + if (decompressed->getLength() != size) { + ERRORF(r, "Decompression failed to get right size [%d]." + " %u != %u", i, (unsigned)(decompressed->getLength()), + (unsigned)size); + SkString s = SkStringPrintf("/tmp/deftst_compressed_%d", i); + SkFILEWStream o(s.c_str()); + o.writeStream(compressed.get(), compressed->getLength()); + compressed->rewind(); + + s = SkStringPrintf("/tmp/deftst_input_%d", i); + SkFILEWStream o2(s.c_str()); + o2.write(&buffer[0], size); + + continue; + } + uint32_t minLength = SkTMin(size, + (uint32_t)(decompressed->getLength())); + for (uint32_t i = 0; i < minLength; ++i) { + uint8_t c; + SkDEBUGCODE(size_t rb =)decompressed->read(&c, sizeof(uint8_t)); + SkASSERT(sizeof(uint8_t) == rb); + if (buffer[i] != c) { + ERRORF(r, "Decompression failed at byte %u.", (unsigned)i); + break; + } + } + } +} -- cgit v1.2.3