| package com.xtremelabs.robolectric.shadows; |
| |
| import android.content.Context; |
| import android.util.AttributeSet; |
| import android.webkit.WebChromeClient; |
| import android.webkit.WebSettings; |
| import android.webkit.TestWebSettings; |
| import android.webkit.WebView; |
| import android.webkit.WebViewClient; |
| import com.xtremelabs.robolectric.Robolectric; |
| import com.xtremelabs.robolectric.internal.Implementation; |
| import com.xtremelabs.robolectric.internal.Implements; |
| |
| import java.util.HashMap; |
| |
| @SuppressWarnings({"UnusedDeclaration"}) |
| @Implements(WebView.class) |
| public class ShadowWebView extends ShadowAbsoluteLayout { |
| |
| private String lastUrl; |
| private HashMap<String, Object> javascriptInterfaces = new HashMap<String, Object>(); |
| private WebSettings webSettings = new TestWebSettings(); |
| private WebViewClient webViewClient = null; |
| private boolean runFlag = false; |
| private boolean clearCacheCalled = false; |
| private boolean clearCacheIncludeDiskFiles = false; |
| private boolean clearFormDataCalled = false; |
| private boolean clearHistoryCalled = false; |
| private boolean clearViewCalled = false; |
| private boolean destroyCalled = false; |
| private WebChromeClient webChromeClient; |
| private boolean canGoBack; |
| private int goBackInvocations = 0; |
| private ShadowWebView.LoadData lastLoadData; |
| private LoadDataWithBaseURL lastLoadDataWithBaseURL; |
| private WebView.PictureListener pictureListener; |
| |
| @Override |
| public void __constructor__(Context context, AttributeSet attributeSet) { |
| super.__constructor__(context, attributeSet); |
| } |
| |
| @Implementation |
| public void loadUrl(String url) { |
| lastUrl = url; |
| } |
| |
| @Implementation |
| public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) { |
| lastLoadDataWithBaseURL = new LoadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl); |
| } |
| |
| @Implementation |
| public void loadData(String data, String mimeType, String encoding) { |
| lastLoadData = new LoadData(data, mimeType, encoding); |
| } |
| |
| /** |
| * Non-Android accessor. |
| * |
| * @return the last loaded url |
| */ |
| public String getLastLoadedUrl() { |
| return lastUrl; |
| } |
| |
| public void clearLastLoadedUrl() { |
| lastUrl = null; |
| } |
| |
| @Implementation |
| public WebSettings getSettings() { |
| return webSettings; |
| } |
| |
| @Implementation |
| public void setWebViewClient(WebViewClient client) { |
| webViewClient = client; |
| } |
| |
| @Implementation |
| public void setWebChromeClient(WebChromeClient client) { |
| webChromeClient = client; |
| } |
| |
| public WebViewClient getWebViewClient() { |
| return webViewClient; |
| } |
| |
| @Implementation |
| public void setPictureListener(WebView.PictureListener listener) { |
| pictureListener = listener; |
| } |
| |
| public WebView.PictureListener getPictureListener() { |
| return pictureListener; |
| } |
| |
| @Implementation |
| public void addJavascriptInterface(Object obj, String interfaceName) { |
| javascriptInterfaces.put(interfaceName, obj); |
| } |
| |
| public Object getJavascriptInterface(String interfaceName) { |
| return javascriptInterfaces.get(interfaceName); |
| } |
| |
| @Implementation |
| public void clearCache(boolean includeDiskFiles) { |
| clearCacheCalled = true; |
| clearCacheIncludeDiskFiles = includeDiskFiles; |
| } |
| |
| public boolean wasClearCacheCalled() { |
| return clearCacheCalled; |
| } |
| |
| public boolean didClearCacheIncludeDiskFiles() { |
| return clearCacheIncludeDiskFiles; |
| } |
| |
| @Implementation |
| public void clearFormData() { |
| clearFormDataCalled = true; |
| } |
| |
| public boolean wasClearFormDataCalled() { |
| return clearFormDataCalled; |
| } |
| |
| @Implementation |
| public void clearHistory() { |
| clearHistoryCalled = true; |
| } |
| |
| public boolean wasClearHistoryCalled() { |
| return clearHistoryCalled; |
| } |
| |
| @Implementation |
| public void clearView() { |
| clearViewCalled = true; |
| } |
| |
| public boolean wasClearViewCalled() { |
| return clearViewCalled; |
| } |
| |
| @Implementation |
| public void destroy() { |
| destroyCalled = true; |
| } |
| |
| public boolean wasDestroyCalled() { |
| return destroyCalled; |
| } |
| |
| @Implementation |
| public void post(Runnable action) { |
| action.run(); |
| runFlag = true; |
| } |
| |
| public boolean getRunFlag() { |
| return runFlag; |
| } |
| |
| |
| /** |
| * Non-Android accessor. |
| * |
| * @return webChromeClient |
| */ |
| public WebChromeClient getWebChromeClient() { |
| return webChromeClient; |
| } |
| |
| @Implementation |
| public boolean canGoBack() { |
| return canGoBack; |
| } |
| |
| @Implementation |
| public void goBack() { |
| goBackInvocations++; |
| } |
| |
| |
| /** |
| * Non-Android accessor. |
| * |
| * @return goBackInvocations the number of times {@code android.webkit.WebView#goBack()} |
| * was invoked |
| */ |
| public int getGoBackInvocations() { |
| return goBackInvocations; |
| } |
| |
| /** |
| * Non-Android setter. |
| * |
| * Sets the value to return from {@code android.webkit.WebView#canGoBack()} |
| * |
| * @param canGoBack |
| */ |
| public void setCanGoBack(boolean canGoBack) { |
| this.canGoBack = canGoBack; |
| } |
| |
| public LoadData getLastLoadData() { |
| return lastLoadData; |
| } |
| |
| public LoadDataWithBaseURL getLastLoadDataWithBaseURL() { |
| return lastLoadDataWithBaseURL; |
| } |
| |
| public class LoadDataWithBaseURL { |
| public final String baseUrl; |
| public final String data; |
| public final String mimeType; |
| public final String encoding; |
| public final String historyUrl; |
| |
| public LoadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) { |
| this.baseUrl = baseUrl; |
| this.data = data; |
| this.mimeType = mimeType; |
| this.encoding = encoding; |
| this.historyUrl = historyUrl; |
| } |
| } |
| |
| public class LoadData { |
| public final String data; |
| public final String mimeType; |
| public final String encoding; |
| |
| public LoadData(String data, String mimeType, String encoding) { |
| this.data = data; |
| this.mimeType = mimeType; |
| this.encoding = encoding; |
| } |
| } |
| } |