Index: mojo/android/javatests/src/org/chromium/mojo/bindings/AutoCloseableRouterTest.java |
diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/AutoCloseableRouterTest.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/AutoCloseableRouterTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee83de3005d98dbcbfdca82119e97f85269f1e6b |
--- /dev/null |
+++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/AutoCloseableRouterTest.java |
@@ -0,0 +1,96 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.mojo.bindings; |
+ |
+import android.test.suitebuilder.annotation.SmallTest; |
+ |
+import org.chromium.mojo.MojoTestCase; |
+import org.chromium.mojo.system.Core; |
+import org.chromium.mojo.system.MessagePipeHandle; |
+import org.chromium.mojo.system.impl.CoreImpl; |
+ |
+import java.lang.ref.WeakReference; |
+ |
+/** |
+ * Testing the the AutoCloseableRouter. |
+ */ |
+public class AutoCloseableRouterTest extends MojoTestCase { |
+ |
+ private static final long RUN_LOOP_TIMEOUT_MS = 25; |
+ |
+ private static class CloseRecordingRouter implements Router { |
+ |
+ private Thread mThread = null; |
+ |
+ @Override |
+ public boolean acceptWithResponder(MessageWithHeader message, MessageReceiver responder) { |
+ return false; |
+ } |
+ |
+ @Override |
+ public boolean accept(MessageWithHeader message) { |
+ return false; |
+ } |
+ |
+ @Override |
+ public MessagePipeHandle passHandle() { |
+ return null; |
+ } |
+ |
+ @Override |
+ public void start() { |
+ } |
+ |
+ @Override |
+ public void setIncomingMessageReceiver( |
+ MessageReceiverWithResponder incomingMessageReceiver) { |
+ } |
+ |
+ @Override |
+ public void setErrorHandler(ConnectionErrorHandler errorHandler) { |
+ } |
+ |
+ /** |
+ * Record the thread it was last called on. |
+ */ |
+ @Override |
+ public void close() { |
+ mThread = Thread.currentThread(); |
+ } |
+ |
+ /** |
+ * Returns the thread this router was last called on. Returns |null| if it was never closed. |
+ */ |
+ public Thread getClosingThread() { |
+ return mThread; |
+ } |
+ } |
+ |
+ /** |
+ * Testing that an {@link AutoCloseableRouter} close its delegate when getting deallocated. |
rmcilroy
2014/07/14 14:44:57
Test that an {@link AutoCloseableRouter} closes it
qsr
2014/07/15 12:03:16
Done.
|
+ */ |
+ @SmallTest |
+ public void testCloseOnDeallocation() { |
+ Core core = CoreImpl.getInstance(); |
+ CloseRecordingRouter closeRecordingRouter = new CloseRecordingRouter(); |
+ AutoCloseableRouter autoCloseableRouter = new AutoCloseableRouter(core, |
+ closeRecordingRouter); |
+ WeakReference<AutoCloseableRouter> weakRef = new WeakReference<AutoCloseableRouter>( |
+ autoCloseableRouter); |
+ |
+ assertNotNull(weakRef.get()); |
+ assertNull(closeRecordingRouter.getClosingThread()); |
+ |
+ autoCloseableRouter = null; |
+ System.gc(); |
+ System.runFinalization(); |
rmcilroy
2014/07/14 14:44:57
Hmm, both System.gc and System.runFinalization are
qsr
2014/07/15 12:03:15
Would you prefer I just remove the test? As you sa
rmcilroy
2014/07/15 18:11:57
Yes
qsr
2014/07/16 08:53:31
Done.
|
+ |
+ assertNull(weakRef.get()); |
+ |
+ nativeRunLoop(RUN_LOOP_TIMEOUT_MS); |
+ |
+ assertEquals(Thread.currentThread(), closeRecordingRouter.getClosingThread()); |
+ } |
+} |