Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.content.Context;
      4 import android.util.AttributeSet;
      5 import android.webkit.WebChromeClient;
      6 import android.webkit.WebSettings;
      7 import android.webkit.TestWebSettings;
      8 import android.webkit.WebView;
      9 import android.webkit.WebViewClient;
     10 import com.xtremelabs.robolectric.Robolectric;
     11 import com.xtremelabs.robolectric.internal.Implementation;
     12 import com.xtremelabs.robolectric.internal.Implements;
     13 
     14 import java.util.HashMap;
     15 
     16 @SuppressWarnings({"UnusedDeclaration"})
     17 @Implements(WebView.class)
     18 public class ShadowWebView extends ShadowAbsoluteLayout {
     19 
     20     private String lastUrl;
     21     private HashMap<String, Object> javascriptInterfaces = new HashMap<String, Object>();
     22     private WebSettings webSettings = new TestWebSettings();
     23     private WebViewClient webViewClient = null;
     24     private boolean runFlag = false;
     25     private boolean clearCacheCalled = false;
     26     private boolean clearCacheIncludeDiskFiles = false;
     27     private boolean clearFormDataCalled = false;
     28     private boolean clearHistoryCalled = false;
     29     private boolean clearViewCalled = false;
     30     private boolean destroyCalled = false;
     31     private WebChromeClient webChromeClient;
     32     private boolean canGoBack;
     33     private int goBackInvocations = 0;
     34     private ShadowWebView.LoadData lastLoadData;
     35     private LoadDataWithBaseURL lastLoadDataWithBaseURL;
     36     private WebView.PictureListener pictureListener;
     37 
     38     @Override
     39     public void __constructor__(Context context, AttributeSet attributeSet) {
     40         super.__constructor__(context, attributeSet);
     41     }
     42 
     43     @Implementation
     44     public void loadUrl(String url) {
     45         lastUrl = url;
     46     }
     47 
     48     @Implementation
     49     public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) {
     50         lastLoadDataWithBaseURL = new LoadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
     51     }
     52 
     53     @Implementation
     54     public void loadData(String data, String mimeType, String encoding) {
     55         lastLoadData = new LoadData(data, mimeType, encoding);
     56     }
     57 
     58     /**
     59      * Non-Android accessor.
     60      *
     61      * @return the last loaded url
     62      */
     63     public String getLastLoadedUrl() {
     64         return lastUrl;
     65     }
     66 
     67     public void clearLastLoadedUrl() {
     68         lastUrl = null;
     69     }
     70 
     71     @Implementation
     72     public WebSettings getSettings() {
     73         return webSettings;
     74     }
     75 
     76     @Implementation
     77     public void setWebViewClient(WebViewClient client) {
     78         webViewClient = client;
     79     }
     80 
     81     @Implementation
     82     public void setWebChromeClient(WebChromeClient client) {
     83         webChromeClient = client;
     84     }
     85 
     86     public WebViewClient getWebViewClient() {
     87         return webViewClient;
     88     }
     89 
     90     @Implementation
     91     public void setPictureListener(WebView.PictureListener listener) {
     92     	pictureListener = listener;
     93     }
     94 
     95     public WebView.PictureListener getPictureListener() {
     96     	return pictureListener;
     97     }
     98 
     99     @Implementation
    100     public void addJavascriptInterface(Object obj, String interfaceName) {
    101         javascriptInterfaces.put(interfaceName, obj);
    102     }
    103 
    104     public Object getJavascriptInterface(String interfaceName) {
    105         return javascriptInterfaces.get(interfaceName);
    106     }
    107 
    108     @Implementation
    109     public void clearCache(boolean includeDiskFiles) {
    110         clearCacheCalled = true;
    111         clearCacheIncludeDiskFiles = includeDiskFiles;
    112     }
    113 
    114     public boolean wasClearCacheCalled() {
    115         return clearCacheCalled;
    116     }
    117 
    118     public boolean didClearCacheIncludeDiskFiles() {
    119         return clearCacheIncludeDiskFiles;
    120     }
    121 
    122     @Implementation
    123     public void clearFormData() {
    124         clearFormDataCalled = true;
    125     }
    126 
    127     public boolean wasClearFormDataCalled() {
    128         return clearFormDataCalled;
    129     }
    130 
    131     @Implementation
    132     public void clearHistory() {
    133         clearHistoryCalled = true;
    134     }
    135 
    136     public boolean wasClearHistoryCalled() {
    137         return clearHistoryCalled;
    138     }
    139 
    140     @Implementation
    141     public void clearView() {
    142         clearViewCalled = true;
    143     }
    144 
    145     public boolean wasClearViewCalled() {
    146         return clearViewCalled;
    147     }
    148 
    149     @Implementation
    150     public void destroy() {
    151         destroyCalled = true;
    152     }
    153 
    154     public boolean wasDestroyCalled() {
    155         return destroyCalled;
    156     }
    157 
    158     @Implementation
    159     public void post(Runnable action) {
    160         action.run();
    161         runFlag = true;
    162     }
    163 
    164     public boolean getRunFlag() {
    165         return runFlag;
    166     }
    167 
    168 
    169     /**
    170      * Non-Android accessor.
    171      *
    172      * @return webChromeClient
    173      */
    174     public WebChromeClient getWebChromeClient() {
    175         return webChromeClient;
    176     }
    177 
    178     @Implementation
    179     public boolean canGoBack() {
    180         return canGoBack;
    181     }
    182 
    183     @Implementation
    184     public void goBack() {
    185         goBackInvocations++;
    186     }
    187 
    188 
    189     /**
    190      * Non-Android accessor.
    191      *
    192      * @return goBackInvocations the number of times {@code android.webkit.WebView#goBack()}
    193      * was invoked
    194      */
    195     public int getGoBackInvocations() {
    196         return goBackInvocations;
    197     }
    198 
    199     /**
    200      * Non-Android setter.
    201      *
    202      * Sets the value to return from {@code android.webkit.WebView#canGoBack()}
    203      *
    204      * @param canGoBack
    205      */
    206     public void setCanGoBack(boolean canGoBack) {
    207         this.canGoBack = canGoBack;
    208     }
    209 
    210     public LoadData getLastLoadData() {
    211         return lastLoadData;
    212     }
    213 
    214     public LoadDataWithBaseURL getLastLoadDataWithBaseURL() {
    215         return lastLoadDataWithBaseURL;
    216     }
    217 
    218     public class LoadDataWithBaseURL {
    219         public final String baseUrl;
    220         public final String data;
    221         public final String mimeType;
    222         public final String encoding;
    223         public final String historyUrl;
    224 
    225         public LoadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) {
    226             this.baseUrl = baseUrl;
    227             this.data = data;
    228             this.mimeType = mimeType;
    229             this.encoding = encoding;
    230             this.historyUrl = historyUrl;
    231         }
    232     }
    233 
    234     public class LoadData {
    235         public final String data;
    236         public final String mimeType;
    237         public final String encoding;
    238 
    239         public LoadData(String data, String mimeType, String encoding) {
    240             this.data = data;
    241             this.mimeType = mimeType;
    242             this.encoding = encoding;
    243         }
    244     }
    245 }
    246