aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar epoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-06-21 18:16:47 +0000
committerGravatar epoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-06-21 18:16:47 +0000
commit5f99545de67ee729b4b17f1aae56f8c9dcf460f9 (patch)
tree718a165d019ce65b913f2e508109c4740a9ed8b2
parentda2b21fa9ba43df374f21b0e05d9816ab1dfb876 (diff)
GM: add --missingExpectationsPath option, similar to --mismatchPath
This will allow us to make the buildbots record all images EXCEPT those which match expectations to Google Storage. R=borenet@google.com Review URL: https://codereview.chromium.org/17552012 git-svn-id: http://skia.googlecode.com/svn/trunk@9725 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--gm/gmmain.cpp30
-rw-r--r--gm/tests/outputs/checksum-based-filenames/output-expected/command_line2
-rw-r--r--gm/tests/outputs/checksum-based-filenames/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/checksum-based-filenames/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/checksum-based-filenames/output-expected/stdout1
-rw-r--r--gm/tests/outputs/checksum-based-filenames/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/selftest1.png1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/selftest1.png1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/command_line2
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/stdout1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/compared-against-nonexistent-dir/output-expected/command_line2
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/command_line2
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/stdout1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/command_line2
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/stdout1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/no-hierarchy/output-expected/command_line2
-rw-r--r--gm/tests/outputs/no-hierarchy/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/no-hierarchy/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/no-hierarchy/output-expected/stdout1
-rw-r--r--gm/tests/outputs/no-hierarchy/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/command_line2
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/stdout1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/no-readpath/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/command_line2
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/selftest1.png1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/selftest1.png1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/nonverbose/output-expected/writePath/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/command_line2
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/mismatchPath/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/565/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/stdout1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/writePath/565/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/writePath/8888/bogusfile1
-rw-r--r--gm/tests/outputs/pipe-playback-failure/output-expected/writePath/bogusfile1
-rwxr-xr-xgm/tests/run.sh12
124 files changed, 157 insertions, 22 deletions
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 42b7bdaefa..ad7d55f088 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -193,7 +193,8 @@ class GMMain {
public:
GMMain() : fUseFileHierarchy(false), fWriteChecksumBasedFilenames(false),
fIgnorableErrorTypes(kDefaultIgnorableErrorTypes),
- fMismatchPath(NULL), fTestsRun(0), fRenderModesEncountered(1) {}
+ fMismatchPath(NULL), fMissingExpectationsPath(NULL), fTestsRun(0),
+ fRenderModesEncountered(1) {}
/**
* Assemble shortNamePlusConfig from (surprise!) shortName and configName.
@@ -767,6 +768,7 @@ public:
*
* If fMismatchPath has been set, and there are pixel diffs, then the
* actual bitmap will be written out to a file within fMismatchPath.
+ * And similarly for fMissingExpectationsPath...
*
* @param expectations what expectations to compare actualBitmap against
* @param actualBitmapAndDigest the SkBitmap we actually generated, and its GmResultDigest
@@ -795,6 +797,16 @@ public:
if (expectations.empty()) {
errors.add(kMissingExpectations_ErrorType);
+
+ // Write out the "actuals" for any tests without expectations, if we have
+ // been directed to do so.
+ if (fMissingExpectationsPath) {
+ SkString path = make_bitmap_filename(fMissingExpectationsPath, shortName,
+ configName, renderModeDescriptor,
+ actualBitmapAndDigest.fDigest);
+ write_bitmap(path, actualBitmapAndDigest.fBitmap);
+ }
+
} else if (!expectations.match(actualBitmapAndDigest.fDigest)) {
addToJsonSummary = true;
// The error mode we record depends on whether this was running
@@ -1178,6 +1190,7 @@ public:
ErrorCombination fIgnorableErrorTypes;
const char* fMismatchPath;
+ const char* fMissingExpectationsPath;
// collection of tests that have failed with each ErrorType
SkTArray<SkString> fFailedTests[kLast_ErrorType+1];
@@ -1317,6 +1330,8 @@ DEFINE_string(match, "", "[~][^]substring[$] [...] of test name to run.\n"
"^ and $ requires an exact match\n"
"If a test does not match any list entry,\n"
"it is skipped unless some list entry starts with ~");
+DEFINE_string(missingExpectationsPath, "", "Write images for tests without expectations "
+ "into this directory.");
DEFINE_string(mismatchPath, "", "Write images for tests that failed due to "
"pixel mismatches into this directory.");
DEFINE_string(modulo, "", "[--modulo <remainder> <divisor>]: only run tests for which "
@@ -1799,6 +1814,9 @@ int tool_main(int argc, char** argv) {
if (FLAGS_mismatchPath.count() == 1) {
gmmain.fMismatchPath = FLAGS_mismatchPath[0];
}
+ if (FLAGS_missingExpectationsPath.count() == 1) {
+ gmmain.fMissingExpectationsPath = FLAGS_missingExpectationsPath[0];
+ }
for (int i = 0; i < FLAGS_config.count(); i++) {
const char* config = FLAGS_config[i];
@@ -1987,6 +2005,10 @@ int tool_main(int argc, char** argv) {
if (NULL != gmmain.fMismatchPath) {
gm_fprintf(stdout, "writing mismatches to %s\n", gmmain.fMismatchPath);
}
+ if (NULL != gmmain.fMissingExpectationsPath) {
+ gm_fprintf(stdout, "writing images without expectations to %s\n",
+ gmmain.fMissingExpectationsPath);
+ }
if (FLAGS_writePicturePath.count() == 1) {
gm_fprintf(stdout, "writing pictures to %s\n", FLAGS_writePicturePath[0]);
}
@@ -2017,6 +2039,12 @@ int tool_main(int argc, char** argv) {
return -1;
}
}
+ if (NULL != gmmain.fMissingExpectationsPath) {
+ if (!prepare_subdirectories(gmmain.fMissingExpectationsPath, gmmain.fUseFileHierarchy,
+ configs)) {
+ return -1;
+ }
+ }
if (FLAGS_pdfJpegQuality < -1 || FLAGS_pdfJpegQuality > 100) {
gm_fprintf(stderr, "%s\n", "pdfJpegQuality must be in [-1 .. 100] range.");
diff --git a/gm/tests/outputs/checksum-based-filenames/output-expected/command_line b/gm/tests/outputs/checksum-based-filenames/output-expected/command_line
index 3e4ddb944f..fbc8af7d1b 100644
--- a/gm/tests/outputs/checksum-based-filenames/output-expected/command_line
+++ b/gm/tests/outputs/checksum-based-filenames/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --writeChecksumBasedFilenames --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels-no-hierarchy.json --writeJsonSummaryPath gm/tests/outputs/checksum-based-filenames/output-actual/json-summary.txt --writePath gm/tests/outputs/checksum-based-filenames/output-actual/writePath --mismatchPath gm/tests/outputs/checksum-based-filenames/output-actual/mismatchPath
+out/Debug/gm --verbose --writeChecksumBasedFilenames --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels-no-hierarchy.json --writeJsonSummaryPath gm/tests/outputs/checksum-based-filenames/output-actual/json-summary.txt --writePath gm/tests/outputs/checksum-based-filenames/output-actual/writePath --mismatchPath gm/tests/outputs/checksum-based-filenames/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/checksum-based-filenames/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/checksum-based-filenames/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/checksum-based-filenames/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/checksum-based-filenames/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/checksum-based-filenames/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/checksum-based-filenames/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/checksum-based-filenames/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/checksum-based-filenames/output-expected/stdout b/gm/tests/outputs/checksum-based-filenames/output-expected/stdout
index 656d6958b1..05d4a599d8 100644
--- a/gm/tests/outputs/checksum-based-filenames/output-expected/stdout
+++ b/gm/tests/outputs/checksum-based-filenames/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/different-pixels-no-hierarchy.json
GM: writing to gm/tests/outputs/checksum-based-filenames/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/checksum-based-filenames/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/checksum-based-filenames/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/checksum-based-filenames/output-expected/writePath/bogusfile b/gm/tests/outputs/checksum-based-filenames/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/checksum-based-filenames/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/command_line b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/command_line
index 397c6b33a3..90fb36caec 100644
--- a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/different-pixels --writeJsonSummaryPath gm/tests/outputs/compared-against-different-pixels-images/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-different-pixels-images/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-different-pixels-images/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/different-pixels --writeJsonSummaryPath gm/tests/outputs/compared-against-different-pixels-images/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-different-pixels-images/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-different-pixels-images/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-different-pixels-images/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout
index c80ad625af..3513a424ac 100644
--- a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading from gm/tests/inputs/images/different-pixels
GM: writing to gm/tests/outputs/compared-against-different-pixels-images/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-different-pixels-images/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-different-pixels-images/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-images/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/command_line b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/command_line
index a455456d3c..0175596882 100644
--- a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels.json --writeJsonSummaryPath gm/tests/outputs/compared-against-different-pixels-json/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-different-pixels-json/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-different-pixels-json/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels.json --writeJsonSummaryPath gm/tests/outputs/compared-against-different-pixels-json/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-different-pixels-json/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-different-pixels-json/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-different-pixels-json/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/stdout b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/stdout
index f17bde6c85..db69c300af 100644
--- a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/different-pixels.json
GM: writing to gm/tests/outputs/compared-against-different-pixels-json/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-different-pixels-json/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-different-pixels-json/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-different-pixels-json/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/command_line b/gm/tests/outputs/compared-against-empty-dir/output-expected/command_line
index 48d12f897e..23ad119fda 100644
--- a/gm/tests/outputs/compared-against-empty-dir/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/empty-dir --writeJsonSummaryPath gm/tests/outputs/compared-against-empty-dir/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-empty-dir/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-empty-dir/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/empty-dir --writeJsonSummaryPath gm/tests/outputs/compared-against-empty-dir/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-empty-dir/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-empty-dir/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-empty-dir/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/selftest1.png b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/selftest1.png
new file mode 100644
index 0000000000..57f48edbcd
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/565/selftest1.png
@@ -0,0 +1 @@
+[contents of gm/tests/outputs/compared-against-empty-dir/output-actual/missingExpectationsPath/565/selftest1.png]
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/selftest1.png b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/selftest1.png
new file mode 100644
index 0000000000..9abe3e8913
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/8888/selftest1.png
@@ -0,0 +1 @@
+[contents of gm/tests/outputs/compared-against-empty-dir/output-actual/missingExpectationsPath/8888/selftest1.png]
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/stdout b/gm/tests/outputs/compared-against-empty-dir/output-expected/stdout
index 232baf9ab9..de58e0ea33 100644
--- a/gm/tests/outputs/compared-against-empty-dir/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading from gm/tests/inputs/images/empty-dir
GM: writing to gm/tests/outputs/compared-against-empty-dir/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-empty-dir/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-empty-dir/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-empty-dir/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/command_line b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/command_line
index 51e4582b69..0de4a7e341 100644
--- a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/identical-bytes --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/identical-bytes --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-identical-bytes-images/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/stdout b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/stdout
index e844583603..30ea8b1eb4 100644
--- a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading from gm/tests/inputs/images/identical-bytes
GM: writing to gm/tests/outputs/compared-against-identical-bytes-images/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-identical-bytes-images/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-identical-bytes-images/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-images/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/command_line b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/command_line
index 3a29e12807..f5da935e01 100644
--- a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/identical-bytes.json --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/identical-bytes.json --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-identical-bytes-json/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/stdout b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/stdout
index 9ed95b5b22..19f8a77ea3 100644
--- a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/identical-bytes.json
GM: writing to gm/tests/outputs/compared-against-identical-bytes-json/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-identical-bytes-json/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-identical-bytes-json/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-bytes-json/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/command_line b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/command_line
index b967776ff8..16b328f584 100644
--- a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/identical-pixels --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/identical-pixels --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-identical-pixels-images/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/stdout b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/stdout
index e61e9f3ce4..a9b3653292 100644
--- a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading from gm/tests/inputs/images/identical-pixels
GM: writing to gm/tests/outputs/compared-against-identical-pixels-images/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-identical-pixels-images/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-identical-pixels-images/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-images/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/command_line b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/command_line
index 71a9ac7318..30faa0fd95 100644
--- a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/identical-pixels.json --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/identical-pixels.json --writeJsonSummaryPath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-identical-pixels-json/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/stdout b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/stdout
index 562ccdcccd..7a028098f7 100644
--- a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/stdout
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/identical-pixels.json
GM: writing to gm/tests/outputs/compared-against-identical-pixels-json/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/compared-against-identical-pixels-json/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/compared-against-identical-pixels-json/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/565/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/bogusfile b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/compared-against-identical-pixels-json/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/compared-against-nonexistent-dir/output-expected/command_line b/gm/tests/outputs/compared-against-nonexistent-dir/output-expected/command_line
index 1753a9f63e..5c6c403b77 100644
--- a/gm/tests/outputs/compared-against-nonexistent-dir/output-expected/command_line
+++ b/gm/tests/outputs/compared-against-nonexistent-dir/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r ../path/to/nowhere --writeJsonSummaryPath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 -r ../path/to/nowhere --writeJsonSummaryPath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/json-summary.txt --writePath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/writePath --mismatchPath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/compared-against-nonexistent-dir/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/command_line b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/command_line
index c9a4ed0cac..48bb35f629 100644
--- a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/command_line
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --ignoreErrorTypes ExpectationsMismatch NoGpuContext --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels.json --writeJsonSummaryPath gm/tests/outputs/ignore-expectations-mismatch/output-actual/json-summary.txt --writePath gm/tests/outputs/ignore-expectations-mismatch/output-actual/writePath --mismatchPath gm/tests/outputs/ignore-expectations-mismatch/output-actual/mismatchPath
+out/Debug/gm --ignoreErrorTypes ExpectationsMismatch NoGpuContext --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels.json --writeJsonSummaryPath gm/tests/outputs/ignore-expectations-mismatch/output-actual/json-summary.txt --writePath gm/tests/outputs/ignore-expectations-mismatch/output-actual/writePath --mismatchPath gm/tests/outputs/ignore-expectations-mismatch/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/ignore-expectations-mismatch/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/stdout b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/stdout
index 635f9af81e..646c05127d 100644
--- a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/stdout
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/different-pixels.json
GM: writing to gm/tests/outputs/ignore-expectations-mismatch/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/ignore-expectations-mismatch/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/ignore-expectations-mismatch/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/565/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/bogusfile b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/ignore-expectations-mismatch/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/command_line b/gm/tests/outputs/intentionally-skipped-tests/output-expected/command_line
index 29ff44d1ab..5061bb3bbc 100644
--- a/gm/tests/outputs/intentionally-skipped-tests/output-expected/command_line
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 selftest2 --config 8888 565 --writeJsonSummaryPath gm/tests/outputs/intentionally-skipped-tests/output-actual/json-summary.txt --writePath gm/tests/outputs/intentionally-skipped-tests/output-actual/writePath --mismatchPath gm/tests/outputs/intentionally-skipped-tests/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 selftest2 --config 8888 565 --writeJsonSummaryPath gm/tests/outputs/intentionally-skipped-tests/output-actual/json-summary.txt --writePath gm/tests/outputs/intentionally-skipped-tests/output-actual/writePath --mismatchPath gm/tests/outputs/intentionally-skipped-tests/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/intentionally-skipped-tests/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/stdout b/gm/tests/outputs/intentionally-skipped-tests/output-expected/stdout
index b94f24c97c..31ae218899 100644
--- a/gm/tests/outputs/intentionally-skipped-tests/output-expected/stdout
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/stdout
@@ -1,6 +1,7 @@
GM: These configs will be run: 8888 565
GM: writing to gm/tests/outputs/intentionally-skipped-tests/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/intentionally-skipped-tests/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/intentionally-skipped-tests/output-actual/missingExpectationsPath
GM: drawing... selftest2 [300 200]
GM: drawing... selftest1 [300 200]
GM: Ran 2 GMs
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/565/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/bogusfile b/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/intentionally-skipped-tests/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-hierarchy/output-expected/command_line b/gm/tests/outputs/no-hierarchy/output-expected/command_line
index 7f8fa53903..1b5f8aa705 100644
--- a/gm/tests/outputs/no-hierarchy/output-expected/command_line
+++ b/gm/tests/outputs/no-hierarchy/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels-no-hierarchy.json --writeJsonSummaryPath gm/tests/outputs/no-hierarchy/output-actual/json-summary.txt --writePath gm/tests/outputs/no-hierarchy/output-actual/writePath --mismatchPath gm/tests/outputs/no-hierarchy/output-actual/mismatchPath
+out/Debug/gm --verbose --match selftest1 --config 8888 565 -r gm/tests/inputs/json/different-pixels-no-hierarchy.json --writeJsonSummaryPath gm/tests/outputs/no-hierarchy/output-actual/json-summary.txt --writePath gm/tests/outputs/no-hierarchy/output-actual/writePath --mismatchPath gm/tests/outputs/no-hierarchy/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/no-hierarchy/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/no-hierarchy/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/no-hierarchy/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-hierarchy/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-hierarchy/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/no-hierarchy/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-hierarchy/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-hierarchy/output-expected/stdout b/gm/tests/outputs/no-hierarchy/output-expected/stdout
index c53e24408f..dffd3c8cc6 100644
--- a/gm/tests/outputs/no-hierarchy/output-expected/stdout
+++ b/gm/tests/outputs/no-hierarchy/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/different-pixels-no-hierarchy.json
GM: writing to gm/tests/outputs/no-hierarchy/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/no-hierarchy/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/no-hierarchy/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/no-hierarchy/output-expected/writePath/bogusfile b/gm/tests/outputs/no-hierarchy/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-hierarchy/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/command_line b/gm/tests/outputs/no-readpath/output-expected/command_line
index bb3679c732..96898019a6 100644
--- a/gm/tests/outputs/no-readpath/output-expected/command_line
+++ b/gm/tests/outputs/no-readpath/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 --writeJsonSummaryPath gm/tests/outputs/no-readpath/output-actual/json-summary.txt --writePath gm/tests/outputs/no-readpath/output-actual/writePath --mismatchPath gm/tests/outputs/no-readpath/output-actual/mismatchPath
+out/Debug/gm --verbose --hierarchy --match selftest1 --config 8888 565 --writeJsonSummaryPath gm/tests/outputs/no-readpath/output-actual/json-summary.txt --writePath gm/tests/outputs/no-readpath/output-actual/writePath --mismatchPath gm/tests/outputs/no-readpath/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/no-readpath/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/no-readpath/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/no-readpath/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/stdout b/gm/tests/outputs/no-readpath/output-expected/stdout
index 43f4ca35df..688e5b9759 100644
--- a/gm/tests/outputs/no-readpath/output-expected/stdout
+++ b/gm/tests/outputs/no-readpath/output-expected/stdout
@@ -1,6 +1,7 @@
GM: These configs will be run: 8888 565
GM: writing to gm/tests/outputs/no-readpath/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/no-readpath/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/no-readpath/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/no-readpath/output-expected/writePath/565/bogusfile b/gm/tests/outputs/no-readpath/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/no-readpath/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/no-readpath/output-expected/writePath/bogusfile b/gm/tests/outputs/no-readpath/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/no-readpath/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/command_line b/gm/tests/outputs/nonverbose/output-expected/command_line
index 911455f8f0..c9964ec952 100644
--- a/gm/tests/outputs/nonverbose/output-expected/command_line
+++ b/gm/tests/outputs/nonverbose/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/empty-dir --writeJsonSummaryPath gm/tests/outputs/nonverbose/output-actual/json-summary.txt --writePath gm/tests/outputs/nonverbose/output-actual/writePath --mismatchPath gm/tests/outputs/nonverbose/output-actual/mismatchPath
+out/Debug/gm --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/images/empty-dir --writeJsonSummaryPath gm/tests/outputs/nonverbose/output-actual/json-summary.txt --writePath gm/tests/outputs/nonverbose/output-actual/writePath --mismatchPath gm/tests/outputs/nonverbose/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/nonverbose/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/nonverbose/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/nonverbose/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/selftest1.png b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/selftest1.png
new file mode 100644
index 0000000000..a8ef872350
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/565/selftest1.png
@@ -0,0 +1 @@
+[contents of gm/tests/outputs/nonverbose/output-actual/missingExpectationsPath/565/selftest1.png]
diff --git a/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/selftest1.png b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/selftest1.png
new file mode 100644
index 0000000000..9132f60667
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/8888/selftest1.png
@@ -0,0 +1 @@
+[contents of gm/tests/outputs/nonverbose/output-actual/missingExpectationsPath/8888/selftest1.png]
diff --git a/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/writePath/565/bogusfile b/gm/tests/outputs/nonverbose/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/nonverbose/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/nonverbose/output-expected/writePath/bogusfile b/gm/tests/outputs/nonverbose/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/nonverbose/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/command_line b/gm/tests/outputs/pipe-playback-failure/output-expected/command_line
index ffcf72d95c..60f36dd015 100644
--- a/gm/tests/outputs/pipe-playback-failure/output-expected/command_line
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/command_line
@@ -1 +1 @@
-out/Debug/gm --simulatePipePlaybackFailure --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/identical-pixels.json --writeJsonSummaryPath gm/tests/outputs/pipe-playback-failure/output-actual/json-summary.txt --writePath gm/tests/outputs/pipe-playback-failure/output-actual/writePath --mismatchPath gm/tests/outputs/pipe-playback-failure/output-actual/mismatchPath
+out/Debug/gm --simulatePipePlaybackFailure --verbose --hierarchy --match selftest1 --config 8888 565 -r gm/tests/inputs/json/identical-pixels.json --writeJsonSummaryPath gm/tests/outputs/pipe-playback-failure/output-actual/json-summary.txt --writePath gm/tests/outputs/pipe-playback-failure/output-actual/writePath --mismatchPath gm/tests/outputs/pipe-playback-failure/output-actual/mismatchPath --missingExpectationsPath gm/tests/outputs/pipe-playback-failure/output-actual/missingExpectationsPath
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/mismatchPath/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/mismatchPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/mismatchPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/565/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/8888/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/missingExpectationsPath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/stdout b/gm/tests/outputs/pipe-playback-failure/output-expected/stdout
index e15af88291..818b0e84e8 100644
--- a/gm/tests/outputs/pipe-playback-failure/output-expected/stdout
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/stdout
@@ -2,6 +2,7 @@ GM: These configs will be run: 8888 565
GM: reading expectations from JSON summary file gm/tests/inputs/json/identical-pixels.json
GM: writing to gm/tests/outputs/pipe-playback-failure/output-actual/writePath
GM: writing mismatches to gm/tests/outputs/pipe-playback-failure/output-actual/mismatchPath
+GM: writing images without expectations to gm/tests/outputs/pipe-playback-failure/output-actual/missingExpectationsPath
GM: drawing... selftest1 [300 200]
GM: Ran 1 GMs
GM: ... over 2 configs ["8888", "565"]
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/565/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/565/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/565/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/8888/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/8888/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/8888/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/bogusfile b/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/bogusfile
new file mode 100644
index 0000000000..d86cd5bdd8
--- /dev/null
+++ b/gm/tests/outputs/pipe-playback-failure/output-expected/writePath/bogusfile
@@ -0,0 +1 @@
+Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories.
diff --git a/gm/tests/run.sh b/gm/tests/run.sh
index ab930a1c1b..ef366801f5 100755
--- a/gm/tests/run.sh
+++ b/gm/tests/run.sh
@@ -85,7 +85,7 @@ function gm_test {
rm -rf $ACTUAL_OUTPUT_DIR
mkdir -p $ACTUAL_OUTPUT_DIR
- COMMAND="$GM_BINARY $GM_ARGS --writeJsonSummaryPath $JSON_SUMMARY_FILE --writePath $ACTUAL_OUTPUT_DIR/writePath --mismatchPath $ACTUAL_OUTPUT_DIR/mismatchPath"
+ COMMAND="$GM_BINARY $GM_ARGS --writeJsonSummaryPath $JSON_SUMMARY_FILE --writePath $ACTUAL_OUTPUT_DIR/writePath --mismatchPath $ACTUAL_OUTPUT_DIR/mismatchPath --missingExpectationsPath $ACTUAL_OUTPUT_DIR/missingExpectationsPath"
echo "$COMMAND" >$ACTUAL_OUTPUT_DIR/command_line
$COMMAND >$ACTUAL_OUTPUT_DIR/stdout 2>$ACTUAL_OUTPUT_DIR/stderr
@@ -108,11 +108,11 @@ function gm_test {
for IMAGEFILE in $(find $ACTUAL_OUTPUT_DIR -name *.png); do
echo "[contents of $IMAGEFILE]" >$IMAGEFILE
done
- if [ -d $ACTUAL_OUTPUT_DIR/mismatchPath ]; then
- for MISMATCHDIR in $(find $ACTUAL_OUTPUT_DIR/mismatchPath -mindepth 1 -type d); do
- echo "Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories." >$MISMATCHDIR/bogusfile
- done
- fi
+
+ # Add a file to any empty subdirectories.
+ for DIR in $(find $ACTUAL_OUTPUT_DIR -mindepth 1 -type d); do
+ echo "Created additional file to make sure directory isn't empty, because self-test cannot handle empty directories." >$DIR/bogusfile
+ done
compare_directories $EXPECTED_OUTPUT_DIR $ACTUAL_OUTPUT_DIR
}