diff --git a/sdk/src/androidTest/java/com/bugsnag/android/JsonStreamTest.java b/sdk/src/androidTest/java/com/bugsnag/android/JsonStreamTest.java index f0053644d6..ba68cb5d8e 100644 --- a/sdk/src/androidTest/java/com/bugsnag/android/JsonStreamTest.java +++ b/sdk/src/androidTest/java/com/bugsnag/android/JsonStreamTest.java @@ -1,17 +1,22 @@ package com.bugsnag.android; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; @@ -21,11 +26,20 @@ public class JsonStreamTest { private StringWriter writer; private JsonStream stream; + private File file; + /** + * Deletes a file in the cache directory if it already exists from previous test cases + * + * @throws Exception if setup failed + */ @Before public void setUp() throws Exception { writer = new StringWriter(); stream = new JsonStream(writer); + File cacheDir = InstrumentationRegistry.getContext().getCacheDir(); + file = new File(cacheDir, "whoops"); + file.delete(); } @Test @@ -61,4 +75,36 @@ public void testSaneValues() throws JSONException, IOException { assertEquals(123, json.getInt("int")); assertEquals(123L, json.getLong("long")); } + + @Test + public void testEmptyFileValue() throws Throwable { + file.createNewFile(); + stream.beginArray(); + stream.value(file); + stream.value(file); + stream.endArray(); + assertEquals("[]", writer.toString()); + } + + @Test + public void testNullFileValue() throws Throwable { + File file = null; + stream.beginArray(); + stream.value(file); + stream.value(file); + stream.endArray(); + assertEquals("[]", writer.toString()); + } + + @Test + public void testDeletedFile() throws Throwable { + file.createNewFile(); + file.delete(); + stream.beginArray(); + stream.value(file); + stream.value(file); + stream.endArray(); + assertEquals("[]", writer.toString()); + } + } diff --git a/sdk/src/main/java/com/bugsnag/android/JsonStream.java b/sdk/src/main/java/com/bugsnag/android/JsonStream.java index d440f939c1..21147a9c1d 100644 --- a/sdk/src/main/java/com/bugsnag/android/JsonStream.java +++ b/sdk/src/main/java/com/bugsnag/android/JsonStream.java @@ -49,6 +49,10 @@ public void value(@Nullable Streamable streamable) throws IOException { * Writes a File (its content) into the stream */ public void value(@NonNull File file) throws IOException { + if (file == null || file.length() <= 0) { + return; + } + super.flush(); beforeValue(false); // add comma if in array