summaryrefslogtreecommitdiffstats
path: root/base/android
diff options
context:
space:
mode:
authornyquist@chromium.org <nyquist@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-18 07:12:52 +0000
committernyquist@chromium.org <nyquist@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-18 07:12:52 +0000
commitdb1ff46b8bc4aab32471fd26252220824aa9c94e (patch)
tree2de55f5f9d54b1ffe0370c326d72879d0b95f3e6 /base/android
parent8a14e2a355e47b8259262dc916c85a5661396b6b (diff)
downloadchromium_src-db1ff46b8bc4aab32471fd26252220824aa9c94e.zip
chromium_src-db1ff46b8bc4aab32471fd26252220824aa9c94e.tar.gz
chromium_src-db1ff46b8bc4aab32471fd26252220824aa9c94e.tar.bz2
Fix StackOverFlow in AdvancedMockContext.
The AdvancedMockContext previously did not override registerComponentCallbacks and unregisterComponentCallbacks. The implementation of these methods in Context calls getApplicationContext before delegating the call to it, and since AdvancedMockContext returns |this| in getApplicationContext, this leads to a loop. This CL adds overrides for these two methods that make the calls to the base context instead, which will typically either be a MockContext or the target context being instrumented. BUG=394464 Review URL: https://codereview.chromium.org/404553005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284023 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/android')
-rw-r--r--base/android/javatests/src/org/chromium/base/AdvancedMockContextTest.java68
1 files changed, 68 insertions, 0 deletions
diff --git a/base/android/javatests/src/org/chromium/base/AdvancedMockContextTest.java b/base/android/javatests/src/org/chromium/base/AdvancedMockContextTest.java
new file mode 100644
index 0000000..d7c103b
--- /dev/null
+++ b/base/android/javatests/src/org/chromium/base/AdvancedMockContextTest.java
@@ -0,0 +1,68 @@
+// 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.base;
+
+import android.app.Application;
+import android.content.ComponentCallbacks;
+import android.content.ComponentCallbacks2;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.test.InstrumentationTestCase;
+
+import org.chromium.base.test.util.AdvancedMockContext;
+
+/**
+ * Tests for {@link org.chromium.base.test.util.AdvancedMockContext}.
+ */
+public class AdvancedMockContextTest extends InstrumentationTestCase {
+ private static class Callback1 implements ComponentCallbacks {
+ protected Configuration mConfiguration;
+ protected boolean mOnLowMemoryCalled;
+
+ @Override
+ public void onConfigurationChanged(Configuration configuration) {
+ mConfiguration = configuration;
+ }
+
+ @Override
+ public void onLowMemory() {
+ mOnLowMemoryCalled = true;
+ }
+ }
+
+ private static class Callback2 extends Callback1 implements ComponentCallbacks2 {
+ private int mLevel;
+
+ @Override
+ public void onTrimMemory(int level) {
+ mLevel = level;
+ }
+ }
+
+ public void testComponentCallbacksForTargetContext() {
+ Context targetContext = getInstrumentation().getTargetContext();
+ Application targetApplication = (Application) targetContext.getApplicationContext();
+ AdvancedMockContext context = new AdvancedMockContext(targetContext);
+ Callback1 callback1 = new Callback1();
+ Callback2 callback2 = new Callback2();
+ context.registerComponentCallbacks(callback1);
+ context.registerComponentCallbacks(callback2);
+
+ targetApplication.onLowMemory();
+ assertTrue("onLowMemory should have been called.", callback1.mOnLowMemoryCalled);
+ assertTrue("onLowMemory should have been called.", callback2.mOnLowMemoryCalled);
+
+ Configuration configuration = new Configuration();
+ targetApplication.onConfigurationChanged(configuration);
+ assertEquals("onConfigurationChanged should have been called.", configuration,
+ callback1.mConfiguration);
+ assertEquals("onConfigurationChanged should have been called.", configuration,
+ callback2.mConfiguration);
+
+ targetApplication.onTrimMemory(ComponentCallbacks2.TRIM_MEMORY_MODERATE);
+ assertEquals("onTrimMemory should have been called.", ComponentCallbacks2
+ .TRIM_MEMORY_MODERATE, callback2.mLevel);
+ }
+}