// Copyright 2013 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.test.util;
import android.content.ContentResolver;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.SharedPreferences;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContext;
import java.util.HashMap;
import java.util.Map;
/**
* ContextWrapper that adds functionality for SharedPreferences and a way to set and retrieve flags.
*/
public class AdvancedMockContext extends ContextWrapper {
private final MockContentResolver mMockContentResolver = new MockContentResolver();
private final Map<String, SharedPreferences> mSharedPreferences =
new HashMap<String, SharedPreferences>();
private final Map<String, Boolean> mFlags = new HashMap<String, Boolean>();
public AdvancedMockContext(Context base) {
super(base);
}
public AdvancedMockContext() {
super(new MockContext());
}
@Override
public String getPackageName() {
return getBaseContext().getPackageName();
}
@Override
public Context getApplicationContext() {
return this;
}
@Override
public ContentResolver getContentResolver() {
return mMockContentResolver;
}
public MockContentResolver getMockContentResolver() {
return mMockContentResolver;
}
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
synchronized (mSharedPreferences) {
if (!mSharedPreferences.containsKey(name)) {
// Auto-create shared preferences to mimic Android Context behavior
mSharedPreferences.put(name, new InMemorySharedPreferences());
}
return mSharedPreferences.get(name);
}
}
public void addSharedPreferences(String name, Map<String, Object> data) {
synchronized (mSharedPreferences) {
mSharedPreferences.put(name, new InMemorySharedPreferences(data));
}
}
public void setFlag(String key) {
mFlags.put(key, true);
}
public void clearFlag(String key) {
mFlags.remove(key);
}
public boolean isFlagSet(String key) {
return mFlags.containsKey(key) && mFlags.get(key);
}
public static class MapBuilder {
private final Map<String, Object> mData = new HashMap<String, Object>();
public static MapBuilder create() {
return new MapBuilder();
}
public MapBuilder add(String key, Object value) {
mData.put(key, value);
return this;
}
public Map<String, Object> build() {
return mData;
}
}
}