skia2/tests/DocumentTest.cpp
commit-bot@chromium.org e2eac8b2fd Move macros from TestClassDef.h to Test.h
Motivation: those macros don't make any sense without the definitions
in Test.h.

BUG=
R=mtklein@google.com

Author: halcanary@google.com

Review URL: https://codereview.chromium.org/138563004

git-svn-id: http://skia.googlecode.com/svn/trunk@13074 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-01-14 21:04:37 +00:00

106 lines
3.0 KiB
C++

#include "Test.h"
#include "SkCanvas.h"
#include "SkDocument.h"
#include "SkOSFile.h"
#include "SkStream.h"
static void test_empty(skiatest::Reporter* reporter) {
SkDynamicMemoryWStream stream;
SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
doc->close();
REPORTER_ASSERT(reporter, stream.bytesWritten() == 0);
}
static void test_abort(skiatest::Reporter* reporter) {
SkDynamicMemoryWStream stream;
SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
SkCanvas* canvas = doc->beginPage(100, 100);
canvas->drawColor(SK_ColorRED);
doc->endPage();
doc->abort();
REPORTER_ASSERT(reporter, stream.bytesWritten() == 0);
}
static void test_abortWithFile(skiatest::Reporter* reporter) {
SkString tmpDir = skiatest::Test::GetTmpDir();
if (tmpDir.isEmpty()) {
return; // TODO(edisonn): unfortunatelly this pattern is used in other
// tests, but if GetTmpDir() starts returning and empty dir
// allways, then all these tests will be disabled.
}
SkString path = SkOSPath::SkPathJoin(tmpDir.c_str(), "aborted.pdf");
// Make sure doc's destructor is called to flush.
{
SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path.c_str()));
SkCanvas* canvas = doc->beginPage(100, 100);
canvas->drawColor(SK_ColorRED);
doc->endPage();
doc->abort();
}
FILE* file = fopen(path.c_str(), "r");
// The created file should be empty.
char buffer[100];
REPORTER_ASSERT(reporter, fread(buffer, 1, 1, file) == 0);
fclose(file);
}
static void test_file(skiatest::Reporter* reporter) {
SkString tmpDir = skiatest::Test::GetTmpDir();
if (tmpDir.isEmpty()) {
return; // TODO(edisonn): unfortunatelly this pattern is used in other
// tests, but if GetTmpDir() starts returning and empty dir
// allways, then all these tests will be disabled.
}
SkString path = SkOSPath::SkPathJoin(tmpDir.c_str(), "file.pdf");
SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path.c_str()));
SkCanvas* canvas = doc->beginPage(100, 100);
canvas->drawColor(SK_ColorRED);
doc->endPage();
doc->close();
FILE* file = fopen(path.c_str(), "r");
REPORTER_ASSERT(reporter, file != NULL);
char header[100];
REPORTER_ASSERT(reporter, fread(header, 4, 1, file) != 0);
REPORTER_ASSERT(reporter, strncmp(header, "%PDF", 4) == 0);
fclose(file);
}
static void test_close(skiatest::Reporter* reporter) {
SkDynamicMemoryWStream stream;
SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
SkCanvas* canvas = doc->beginPage(100, 100);
canvas->drawColor(SK_ColorRED);
doc->endPage();
doc->close();
REPORTER_ASSERT(reporter, stream.bytesWritten() != 0);
}
DEF_TEST(document_tests, reporter) {
test_empty(reporter);
test_abort(reporter);
test_abortWithFile(reporter);
test_file(reporter);
test_close(reporter);
}