| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package com.taobao.weex.http; |
| |
| import android.os.Looper; |
| import android.telecom.Call; |
| |
| import com.taobao.weex.WXSDKInstanceTest; |
| import com.taobao.weex.adapter.DefaultWXHttpAdapter; |
| import com.taobao.weex.adapter.IWXHttpAdapter; |
| import com.taobao.weex.bridge.JSCallback; |
| import com.taobao.weex.bridge.WXBridgeManager; |
| import com.taobao.weex.common.WXRequest; |
| import com.taobao.weex.common.WXResponse; |
| import com.taobao.weex.common.WXThread; |
| import junit.framework.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.mockito.ArgumentCaptor; |
| import org.mockito.invocation.InvocationOnMock; |
| import org.mockito.stubbing.Answer; |
| import org.powermock.core.classloader.annotations.PrepareForTest; |
| import org.robolectric.RobolectricTestRunner; |
| import org.robolectric.annotation.Config; |
| |
| import java.util.*; |
| import java.util.logging.Level; |
| import java.util.logging.Logger; |
| |
| import static org.mockito.Mockito.*; |
| import static junit.framework.Assert.*; |
| |
| |
| /** |
| * Created by sospartan on 5/24/16. |
| */ |
| @RunWith(RobolectricTestRunner.class) |
| @PrepareForTest({WXStreamModule.class, IWXHttpAdapter.class}) |
| @Config(manifest= Config.NONE) |
| public class WXStreamModuleTest { |
| |
| @Before |
| public void setup() throws Exception{ |
| |
| } |
| |
| private WXResponse successResponse(){ |
| WXResponse resp = new WXResponse(); |
| resp.data = "data"; |
| resp.statusCode = "200"; |
| return resp; |
| } |
| |
| static class Callback implements JSCallback{ |
| Map<String, Object> mData; |
| |
| @Override |
| public void invoke(Object data) { |
| mData = (Map<String,Object>)data; |
| } |
| |
| @Override |
| public void invokeAndKeepAlive(Object data) { |
| mData = (Map<String,Object>)data; |
| } |
| } |
| |
| |
| @Test |
| public void testFetchInvaildOptions() throws Exception{ |
| IWXHttpAdapter adapter = new IWXHttpAdapter() { |
| @Override |
| public void sendRequest(WXRequest request, OnHttpListener listener) { |
| listener.onHttpFinish(successResponse()); |
| } |
| }; |
| |
| WXStreamModule streamModule = new WXStreamModule(adapter); |
| Callback cb = new Callback(); |
| streamModule.fetch("",cb,null); |
| |
| assert !(boolean)cb.mData.get("ok"); |
| } |
| |
| private WXStreamModule createModule(IWXHttpAdapter adapter){ |
| WXStreamModule m = new WXStreamModule(adapter); |
| m.mWXSDKInstance = WXSDKInstanceTest.createInstance(); |
| return m; |
| } |
| |
| @Test |
| public void testFetchSuccessFinish() throws Exception{ |
| IWXHttpAdapter adapter = new IWXHttpAdapter() { |
| @Override |
| public void sendRequest(WXRequest request, OnHttpListener listener) { |
| listener.onHttpFinish(successResponse()); |
| } |
| }; |
| |
| WXStreamModule streamModule = createModule(adapter); |
| Callback cb = new Callback(); |
| streamModule.fetch("{'url':'http://www.taobao.com'}",cb,null); |
| |
| assert (boolean)cb.mData.get("ok"); |
| } |
| |
| |
| @Test |
| public void testFetchHeaderReceived() throws Exception{ |
| IWXHttpAdapter adapter = new IWXHttpAdapter() { |
| @Override |
| public void sendRequest(WXRequest request, OnHttpListener listener) { |
| Map<String,List<String>> headers = new HashMap<>(); |
| headers.put("key", Arrays.asList("someval")); |
| listener.onHeadersReceived(200,headers); |
| } |
| }; |
| |
| WXStreamModule streamModule = createModule(adapter); |
| Callback cb = new Callback(); |
| streamModule.fetch("{'url':'http://www.taobao.com'}",null,cb); |
| |
| assert ((Map<String,String>)cb.mData.get("headers")).get("key").equals("someval"); |
| } |
| |
| @Test |
| public void testFetchRequestHttpbinCallback() throws Exception{ |
| WXStreamModule streamModule = createModule(new DefaultWXHttpAdapter()); |
| JSCallback progress = mock(JSCallback.class); |
| JSCallback finish = mock(JSCallback.class); |
| System.out.print("request start "+System.currentTimeMillis()); |
| streamModule.fetch("{method: 'POST',url: 'http://httpbin.org/post',type:'json'}",finish,progress); |
| verify(progress,timeout(10*1000).atLeastOnce()).invokeAndKeepAlive(anyMapOf(String.class, Object.class)); |
| verify(finish,timeout(10*1000).times(1)).invoke(anyMapOf(String.class, Object.class)); |
| System.out.print("\nrequest finish"+System.currentTimeMillis()); |
| } |
| |
| |
| @Test |
| public void testFetchStatus() throws Exception{ |
| WXStreamModule streamModule = createModule(new IWXHttpAdapter() { |
| @Override |
| public void sendRequest(WXRequest request, OnHttpListener listener) { |
| WXResponse response = new WXResponse(); |
| response.statusCode = "-1"; |
| listener.onHttpFinish(response); |
| } |
| }); |
| Callback finish = new Callback(); |
| |
| streamModule.fetch("",finish,null); |
| assertEquals(finish.mData.get(WXStreamModule.STATUS_TEXT),Status.ERR_INVALID_REQUEST); |
| |
| streamModule.fetch("{method: 'POST',url: 'http://httpbin.org/post',type:'json'}",finish,null); |
| assertEquals(finish.mData.get(WXStreamModule.STATUS_TEXT),Status.ERR_CONNECT_FAILED); |
| |
| streamModule = createModule(new IWXHttpAdapter() { |
| @Override |
| public void sendRequest(WXRequest request, OnHttpListener listener) { |
| WXResponse response = new WXResponse(); |
| response.statusCode = "302"; |
| listener.onHttpFinish(response); |
| } |
| }); |
| streamModule.fetch("{method: 'POST',url: 'http://httpbin.org/post',type:'json'}",finish,null); |
| assertEquals(finish.mData.get(WXStreamModule.STATUS),302); |
| assertEquals(finish.mData.get(WXStreamModule.STATUS).getClass(),Integer.class); |
| assertEquals(finish.mData.get(WXStreamModule.STATUS_TEXT),Status.getStatusText("302")); |
| } |
| |
| } |