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/PDFOpaqueSrcModeToSrcOverTest.cpp | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/PDFOpaqueSrcModeToSrcOverTest.cpp (limited to 'tests/PDFOpaqueSrcModeToSrcOverTest.cpp') diff --git a/tests/PDFOpaqueSrcModeToSrcOverTest.cpp b/tests/PDFOpaqueSrcModeToSrcOverTest.cpp new file mode 100644 index 0000000000..156856c0da --- /dev/null +++ b/tests/PDFOpaqueSrcModeToSrcOverTest.cpp @@ -0,0 +1,47 @@ +/* + * 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 "SkCanvas.h" +#include "SkDocument.h" +#include "SkStream.h" +#include "Test.h" + +static void run_test(SkWStream* out, SkXfermode::Mode mode, U8CPU alpha) { + SkAutoTUnref pdfDoc(SkDocument::CreatePDF(out)); + SkCanvas* c = pdfDoc->beginPage(612.0f, 792.0f); + SkPaint black; + SkPaint background; + background.setColor(SK_ColorWHITE); + background.setAlpha(alpha); + background.setXfermodeMode(mode); + c->drawRect(SkRect::MakeWH(612.0f, 792.0f), background); + c->drawRect(SkRect::MakeXYWH(36.0f, 36.0f, 9.0f, 9.0f), black); + c->drawRect(SkRect::MakeXYWH(72.0f, 72.0f, 468.0f, 648.0f), background); + c->drawRect(SkRect::MakeXYWH(108.0f, 108.0f, 9.0f, 9.0f), black); + pdfDoc->close(); +} + +// http://crbug.com/473572 +DEF_TEST(SkPDF_OpaqueSrcModeToSrcOver, r) { + REQUIRE_PDF_DOCUMENT(SkPDF_OpaqueSrcModeToSrcOver, r); + SkDynamicMemoryWStream srcMode; + SkDynamicMemoryWStream srcOverMode; + + U8CPU alpha = SK_AlphaOPAQUE; + run_test(&srcMode, SkXfermode::kSrc_Mode, alpha); + run_test(&srcOverMode, SkXfermode::kSrcOver_Mode, alpha); + REPORTER_ASSERT(r, srcMode.getOffset() == srcOverMode.getOffset()); + // The two PDFs should be equal because they have an opaque alpha. + + srcMode.reset(); + srcOverMode.reset(); + + alpha = 0x80; + run_test(&srcMode, SkXfermode::kSrc_Mode, alpha); + run_test(&srcOverMode, SkXfermode::kSrcOver_Mode, alpha); + REPORTER_ASSERT(r, srcMode.getOffset() > srcOverMode.getOffset()); + // The two PDFs should not be equal because they have a non-opaque alpha. +} -- cgit v1.2.3