aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tests/PDFDocumentTest.cpp18
-rw-r--r--tests/StreamBufferTest.cpp18
-rw-r--r--tests/StreamTest.cpp21
-rw-r--r--tests/Test.cpp22
4 files changed, 64 insertions, 15 deletions
diff --git a/tests/PDFDocumentTest.cpp b/tests/PDFDocumentTest.cpp
index 9a79ec8c01..82dafa3f15 100644
--- a/tests/PDFDocumentTest.cpp
+++ b/tests/PDFDocumentTest.cpp
@@ -44,12 +44,15 @@ static void test_abortWithFile(skiatest::Reporter* reporter) {
SkString tmpDir = skiatest::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.
+ ERRORF(reporter, "missing tmpDir.");
+ return;
}
SkString path = SkOSPath::Join(tmpDir.c_str(), "aborted.pdf");
+ if (!SkFILEWStream(path.c_str()).isValid()) {
+ ERRORF(reporter, "unable to write to: %s", path.c_str());
+ return;
+ }
// Make sure doc's destructor is called to flush.
{
@@ -72,12 +75,15 @@ static void test_abortWithFile(skiatest::Reporter* reporter) {
static void test_file(skiatest::Reporter* reporter) {
SkString tmpDir = skiatest::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.
+ ERRORF(reporter, "missing tmpDir.");
+ return;
}
SkString path = SkOSPath::Join(tmpDir.c_str(), "file.pdf");
+ if (!SkFILEWStream(path.c_str()).isValid()) {
+ ERRORF(reporter, "unable to write to: %s", path.c_str());
+ return;
+ }
sk_sp<SkDocument> doc(SkDocument::MakePDF(path.c_str()));
diff --git a/tests/StreamBufferTest.cpp b/tests/StreamBufferTest.cpp
index 35bebad274..5435bf9365 100644
--- a/tests/StreamBufferTest.cpp
+++ b/tests/StreamBufferTest.cpp
@@ -28,6 +28,9 @@ static void test_get_data_at_position(skiatest::Reporter* r, SkStreamBuffer* buf
// Test buffering from the beginning, by different amounts.
static void test_buffer_from_beginning(skiatest::Reporter* r, std::unique_ptr<SkStream> stream,
size_t length) {
+ if (!stream) {
+ return;
+ }
SkStreamBuffer buffer(std::move(stream));
// Buffer an arbitrary amount:
@@ -46,6 +49,9 @@ static void test_buffer_from_beginning(skiatest::Reporter* r, std::unique_ptr<Sk
// Test flushing the stream as we read.
static void test_flushing(skiatest::Reporter* r, std::unique_ptr<SkStream> stream, size_t length,
bool getDataAtPosition) {
+ if (!stream) {
+ return;
+ }
SkStreamBuffer buffer(std::move(stream));
const size_t step = 5;
for (size_t position = 0; position + step <= length; position += step) {
@@ -78,6 +84,10 @@ DEF_TEST(StreamBuffer, r) {
if (!tmpDir.isEmpty()) {
path = SkOSPath::Join(tmpDir.c_str(), subdir);
SkFILEWStream writer(path.c_str());
+ if (!writer.isValid()) {
+ ERRORF(r, "unable to write to '%s'\n", path.c_str());
+ return;
+ }
writer.write(gText, size);
}
@@ -85,9 +95,11 @@ DEF_TEST(StreamBuffer, r) {
std::function<std::unique_ptr<SkStream>()> createStream;
bool skipIfNoTmpDir;
} factories[] = {
- { [&data]() { return skstd::make_unique<SkMemoryStream>(data); }, false },
- { [&data]() { return skstd::make_unique<NotAssetMemStream>(data); }, false },
- { [&path]() { return skstd::make_unique<SkFILEStream>(path.c_str()); }, true },
+ { [&data]() { return skstd::make_unique<SkMemoryStream>(data); }, false },
+ { [&data]() { return skstd::make_unique<NotAssetMemStream>(data); }, false },
+ { [&path]() { return path.isEmpty()
+ ? nullptr
+ : skstd::make_unique<SkFILEStream>(path.c_str()); }, true },
};
for (auto f : factories) {
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp
index 24e74c64b7..01967b70b0 100644
--- a/tests/StreamTest.cpp
+++ b/tests/StreamTest.cpp
@@ -287,12 +287,25 @@ DEF_TEST(StreamPeek, reporter) {
test_fully_peekable_stream(reporter, &memStream, memStream.getLength());
// Test an arbitrary file stream. file streams do not support peeking.
- constexpr char filename[] = "images/baby_tux.webp";
- SkString path = GetResourcePath(filename);
- if (!sk_exists(path.c_str())) {
- ERRORF(reporter, "file missing: %s\n", filename);
+ auto tmpdir = skiatest::GetTmpDir();
+ if (tmpdir.isEmpty()) {
+ ERRORF(reporter, "no tmp dir!");
return;
}
+ auto path = SkOSPath::Join(tmpdir.c_str(), "file");
+ {
+ SkFILEWStream wStream(path.c_str());
+ constexpr char filename[] = "images/baby_tux.webp";
+ auto data = GetResourceAsData(filename);
+ if (!data || data->size() == 0) {
+ ERRORF(reporter, "resource missing: %s\n", filename);
+ return;
+ }
+ if (!wStream.isValid() || !wStream.write(data->data(), data->size())) {
+ ERRORF(reporter, "error wrtiting to file %s", path.c_str());
+ return;
+ }
+ }
SkFILEStream fileStream(path.c_str());
REPORTER_ASSERT(reporter, fileStream.isValid());
if (!fileStream.isValid()) {
diff --git a/tests/Test.cpp b/tests/Test.cpp
index 37515ddf42..96bbbad9b9 100644
--- a/tests/Test.cpp
+++ b/tests/Test.cpp
@@ -7,6 +7,8 @@
#include "Test.h"
+#include <stdlib.h>
+
#include "SkCommandLineFlags.h"
#include "SkString.h"
#include "SkTime.h"
@@ -32,8 +34,24 @@ SkString skiatest::Failure::toString() const {
}
SkString skiatest::GetTmpDir() {
- const char* tmpDir = FLAGS_tmpDir.isEmpty() ? nullptr : FLAGS_tmpDir[0];
- return SkString(tmpDir);
+ if (!FLAGS_tmpDir.isEmpty()) {
+ return SkString(FLAGS_tmpDir[0]);
+ }
+#ifdef SK_BUILD_FOR_ANDROID
+ const char* environmentVariable = "TMPDIR";
+ const char* defaultValue = "/data/local/tmp";
+#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX)
+ const char* environmentVariable = "TMPDIR";
+ const char* defaultValue = "/tmp";
+#elif defined(SK_BUILD_FOR_WIN32)
+ const char* environmentVariable = "TEMP";
+ const char* defaultValue = nullptr;
+#else
+ const char* environmentVariable = nullptr;
+ const char* defaultValue = nullptr;
+#endif
+ const char* tmpdir = environmentVariable ? getenv(environmentVariable) : nullptr;
+ return SkString(tmpdir ? tmpdir : defaultValue);
}
skiatest::Timer::Timer() : fStartNanos(SkTime::GetNSecs()) {}