From 18b9ba407d3f33e84d613a695ccd6d0e7360a21e Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Fri, 19 Aug 2022 19:25:20 +0200 Subject: [PATCH] Improve GsonTest.testGetAdapter_Concurrency (#2177) Makes the test implementation more reliable to prevent flaws in the test setup causing spurious test success. --- .../test/java/com/google/gson/GsonTest.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/gson/src/test/java/com/google/gson/GsonTest.java b/gson/src/test/java/com/google/gson/GsonTest.java index 3cc24722..742f372d 100644 --- a/gson/src/test/java/com/google/gson/GsonTest.java +++ b/gson/src/test/java/com/google/gson/GsonTest.java @@ -30,6 +30,7 @@ import java.text.DateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import junit.framework.TestCase; @@ -102,6 +103,17 @@ public final class GsonTest extends TestCase { } public void testGetAdapter_Concurrency() { + class DummyAdapter extends TypeAdapter { + @Override public void write(JsonWriter out, T value) throws IOException { + throw new AssertionError("not needed for test"); + } + + @Override public T read(JsonReader in) throws IOException { + throw new AssertionError("not needed for test"); + } + } + + final AtomicInteger adapterInstancesCreated = new AtomicInteger(0); final AtomicReference> threadAdapter = new AtomicReference<>(); final Class requestedType = Number.class; @@ -130,24 +142,15 @@ public final class GsonTest extends TestCase { } // Create a new dummy adapter instance - - @SuppressWarnings("unchecked") - TypeAdapter r = (TypeAdapter) new TypeAdapter() { - @Override public void write(JsonWriter out, Number value) throws IOException { - throw new AssertionError("not needed for test"); - } - - @Override public Number read(JsonReader in) throws IOException { - throw new AssertionError("not needed for test"); - } - }; - return r; + adapterInstancesCreated.incrementAndGet(); + return new DummyAdapter<>(); } }) .create(); TypeAdapter adapter = gson.getAdapter(requestedType); - assertNotNull(adapter); + assertTrue(adapter instanceof DummyAdapter); + assertEquals(2, adapterInstancesCreated.get()); // Should be the same adapter instance the concurrent thread received assertSame(threadAdapter.get(), adapter); }