diff options
author | nyquist@chromium.org <nyquist@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-18 07:12:52 +0000 |
---|---|---|
committer | nyquist@chromium.org <nyquist@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-18 07:12:52 +0000 |
commit | db1ff46b8bc4aab32471fd26252220824aa9c94e (patch) | |
tree | 2de55f5f9d54b1ffe0370c326d72879d0b95f3e6 /base/android | |
parent | 8a14e2a355e47b8259262dc916c85a5661396b6b (diff) | |
download | chromium_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.java | 68 |
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); + } +} |