diff --git a/README.md b/README.md
index 12a71f5..2b847cf 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,19 @@
-
+
-# Learning RxJava 2 for Android by example
+# RxJava 2 for Android
+### How to
+* Clone repo
+* Clone https://github.com/businesstek/Fast-Android-Networking
+* From RxJava2 Android Studio "File/New Module/Import Gradle Project"
+* Only select modules "android-networking" and "rx2-android-networking"
+* Add both modules to app module dependency
+* Note: original fork had network bug in gradle.properties
+* Note: ApiUser and UserDetail models are the same. Why?
+* Note: added toast for feedback for networking
+* Replace 6 calls in NetworkingActivity with your own node herokuapp to handle the REST calls. Sample index.js is included in assets folder
-[](https://mindorks.com/open-source-projects)
-[](https://mindorks.com/join-community)
-[](https://android-arsenal.com/details/3/4314)
-[](https://opensource.org/licenses/Apache-2.0)
-[](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/LICENSE)
-## How to use RxJava 2 in Android Application
-## How to migrate from RxJava 1.0 to RxJava 2.0
-
-### This project is for :
-* who is migrating to RxJava 2
-* or just started with RxJava.
-
-### Just Build the project and start learning RxJava by examples.
+### Built to learn RxJava2
RxJava 2.0 has been completely rewritten from scratch on top of the Reactive-Streams specification. The specification itself has evolved out of RxJava 1.x and provides a common baseline for reactive systems and libraries.
@@ -84,69 +82,23 @@ RxJava1 -> RxJava2
# Highlights of the examples :
-* [DisposableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java) - Using `CompositeDisposable`
-* [FlowableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java) - Using `Flowable` and `reduce` operator
-* [SingleObserverExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java) - Using `SingleObserver`
-* [CompletableObserverActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java) - Using `CompletableObserver`
-* [MapExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java) - Using `map` Operator
-* [ZipExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java) - Using `zip` Operator
-* [BufferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java) - Using `buffer` Operator
-* [TakeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java) - Using `take` Operator
-* [ReduceExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java) - Using `reduce` Operator
-* [FilterExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java) - Using `filter` Operator
-* [SkipExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java) - Using `skip` Operator
-* [ReplayExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java) - Using `replay` Operator
-* [ConcatExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java) - Using `concat` Operator
-* [MergeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java) - Using `merge` Operator
-* [DeferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java) - Using `defer` Observable
-* [IntervalExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java) - Using `Interval`
-* [RxBusActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java) - RxBus, RxJava2Bus, EventBus, RxEventBus
-* [PaginationActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView
-* [ComposeOperatorExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java) - Compose operator for reusable
-
-### TODO
-
-* Many examples are to be added
-
-### Find this project useful ? :heart:
-* Support it by clicking the :star: button on the upper right of this page. :v:
-
-### Check out an awesome MVP architecture based project which uses RxJava2, Dagger2.
-* [Android-MVP-Architecture](https://github.com/MindorksOpenSource/android-mvp-architecture)
-
-### Check out an awesome library for fast and simple networking in Android.
-* [Fast Android Networking Library](https://github.com/amitshekhariitbhu/Fast-Android-Networking)
-
-### Another awesome library for debugging databases and shared preferences.
-* [Android Debug Database](https://github.com/amitshekhariitbhu/Android-Debug-Database)
-
-### [Check out Mindorks awesome open source projects here](https://mindorks.com/open-source-projects)
-
-### Contact - Let's become friend
-- [Twitter](https://twitter.com/amitiitbhu)
-- [Github](https://github.com/amitshekhariitbhu)
-- [Medium](https://medium.com/@amitshekhar)
-- [Facebook](https://www.facebook.com/amit.shekhar.iitbhu)
-
-### License
-```
- Copyright (C) 2016 Amit Shekhar
- Copyright (C) 2011 Android Open Source Project
-
- Licensed 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.
-```
-
-### Contributing to RxJava 2 Android Samples
-Just make pull request. You are in!
+* [DisposableExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java) - Using `CompositeDisposable`
+* [FlowableExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java) - Using `Flowable` and `reduce` operator
+* [SingleObserverExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java) - Using `SingleObserver`
+* [CompletableObserverActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java) - Using `CompletableObserver`
+* [MapExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java) - Using `map` Operator
+* [ZipExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java) - Using `zip` Operator
+* [BufferExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java) - Using `buffer` Operator
+* [TakeExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java) - Using `take` Operator
+* [ReduceExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java) - Using `reduce` Operator
+* [FilterExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java) - Using `filter` Operator
+* [SkipExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java) - Using `skip` Operator
+* [ReplayExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java) - Using `replay` Operator
+* [ConcatExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java) - Using `concat` Operator
+* [MergeExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java) - Using `merge` Operator
+* [DeferExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java) - Using `defer` Observable
+* [IntervalExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java) - Using `Interval`
+* [RxBusActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java) - RxBus, RxJava2Bus, EventBus, RxEventBus
+* [PaginationActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView
+* [ComposeOperatorExampleActivity](https://github.com/owneriitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java) - Compose operator for reusable
-
diff --git a/android-networking/.gitignore b/android-networking/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/android-networking/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/android-networking/build.gradle b/android-networking/build.gradle
new file mode 100644
index 0000000..3b327c1
--- /dev/null
+++ b/android-networking/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 Amit Shekhar
+ * Copyright (C) 2011 Android Open Source Project
+ *
+ * Licensed 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.
+ */
+
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion '25.0.0'
+
+ defaultConfig {
+ minSdkVersion 9
+ targetSdkVersion 23
+ versionCode 1
+ versionName "1.0"
+ consumerProguardFiles 'proguard-rules.pro'
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ testCompile 'junit:junit:4.12'
+ androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.6.0'
+ compile 'com.squareup.okhttp3:okhttp:3.6.0'
+ compile 'com.google.code.gson:gson:2.8.0'
+}
+//apply from: 'upload.gradle'
\ No newline at end of file
diff --git a/android-networking/proguard-rules.pro b/android-networking/proguard-rules.pro
new file mode 100644
index 0000000..c88a38b
--- /dev/null
+++ b/android-networking/proguard-rules.pro
@@ -0,0 +1,20 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/owner/Library/Android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# For OkHttp
+-dontwarn okio.**
diff --git a/android-networking/src/androidTest/AndroidManifest.xml b/android-networking/src/androidTest/AndroidManifest.xml
new file mode 100755
index 0000000..944071c
--- /dev/null
+++ b/android-networking/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/GetJSONApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/GetJSONApiTest.java
new file mode 100644
index 0000000..cab349d
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/GetJSONApiTest.java
@@ -0,0 +1,469 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.JSONArrayRequestListener;
+import com.androidnetworking.interfaces.JSONObjectRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndJSONArrayRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndJSONObjectRequestListener;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Rule;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 03/04/17.
+ */
+
+public class GetJSONApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public GetJSONApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testJSONObjectGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsJSONObject(new JSONObjectRequestListener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testJSONObjectGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsJSONObject(new JSONObjectRequestListener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ public void testJSONArrayGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsJSONArray(new JSONArrayRequestListener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ try {
+ JSONObject jsonObject = response.getJSONObject(0);
+ firstNameRef.set(jsonObject.getString("firstName"));
+ lastNameRef.set(jsonObject.getString("lastName"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testJSONArrayGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsJSONArray(new JSONArrayRequestListener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONObjectGetRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForJSONObject();
+
+ assertEquals("Amit", response.getResult().getString("firstName"));
+
+ assertEquals("Shekhar", response.getResult().getString("lastName"));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONObjectGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForJSONObject();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONArrayGetRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForJSONArray();
+
+ JSONObject jsonObject = response.getResult().getJSONObject(0);
+
+ assertEquals("Amit", jsonObject.getString("firstName"));
+
+ assertEquals("Shekhar", jsonObject.getString("lastName"));
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONArrayGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForJSONArray();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ public void testResponseBodyAndJSONObjectGet() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndJSONObjectGet404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testResponseBodyAndJSONArrayGet() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONArray response) {
+ try {
+ JSONObject jsonObject = response.getJSONObject(0);
+ firstNameRef.set(jsonObject.getString("firstName"));
+ lastNameRef.set(jsonObject.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndJSONArrayGet404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONArray response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+
+}
\ No newline at end of file
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/GetObjectApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/GetObjectApiTest.java
new file mode 100644
index 0000000..8409ab2
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/GetObjectApiTest.java
@@ -0,0 +1,450 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
+import com.androidnetworking.interfaces.ParsedRequestListener;
+import com.androidnetworking.model.User;
+
+import org.json.JSONException;
+import org.junit.Rule;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 10/04/17.
+ */
+
+public class GetObjectApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public GetObjectApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testObjectGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsObject(User.class, new ParsedRequestListener() {
+ @Override
+ public void onResponse(User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testObjectGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsObject(User.class, new ParsedRequestListener() {
+ @Override
+ public void onResponse(User user) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ public void testObjectListGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsObjectList(User.class, new ParsedRequestListener>() {
+ @Override
+ public void onResponse(List userList) {
+ firstNameRef.set(userList.get(0).firstName);
+ lastNameRef.set(userList.get(0).lastName);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testObjectListGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsObjectList(User.class, new ParsedRequestListener>() {
+ @Override
+ public void onResponse(List userList) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectGetRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForObject(User.class);
+
+ assertEquals("Amit", response.getResult().firstName);
+
+ assertEquals("Shekhar", response.getResult().lastName);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForObject(User.class);
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectListGetRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse> response = request.executeForObjectList(User.class);
+
+ User user = response.getResult().get(0);
+
+ assertEquals("Amit", user.firstName);
+
+ assertEquals("Shekhar", user.lastName);
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectListGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse> response = request.executeForObjectList(User.class);
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ public void testResponseBodyAndObjectGet() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndObjectGet404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testResponseBodyAndObjectListGet() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObjectList(User.class,
+ new OkHttpResponseAndParsedRequestListener>() {
+ @Override
+ public void onResponse(Response okHttpResponse, List userList) {
+ firstNameRef.set(userList.get(0).firstName);
+ lastNameRef.set(userList.get(0).lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndObjectListGet404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObjectList(User.class,
+ new OkHttpResponseAndParsedRequestListener>() {
+ @Override
+ public void onResponse(Response okHttpResponse, List userList) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+
+}
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/GetStringApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/GetStringApiTest.java
new file mode 100644
index 0000000..aaef6fe
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/GetStringApiTest.java
@@ -0,0 +1,348 @@
+/*
+ * Copyright (C) 2016 Amit Shekhar
+ * Copyright (C) 2011 Android Open Source Project
+ *
+ * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.OkHttpResponseAndStringRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseListener;
+import com.androidnetworking.interfaces.StringRequestListener;
+
+import org.junit.Rule;
+
+import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+public class GetStringApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public GetStringApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testStringGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsString(new StringRequestListener() {
+ @Override
+ public void onResponse(String response) {
+ responseRef.set(response);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("data", responseRef.get());
+ }
+
+ public void testStringGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .build()
+ .getAsString(new StringRequestListener() {
+ @Override
+ public void onResponse(String response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousStringGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForString();
+
+ assertEquals("data", response.getResult());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousStringGetRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForString();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+ }
+
+ public void testResponseBodyGet() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponse(new OkHttpResponseListener() {
+ @Override
+ public void onResponse(Response response) {
+ try {
+ responseRef.set(response.body().string());
+ latch.countDown();
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("data", responseRef.get());
+ }
+
+ public void testResponseBodyGet404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponse(new OkHttpResponseListener() {
+ @Override
+ public void onResponse(Response response) {
+ try {
+ errorBodyRef.set(response.body().string());
+ errorCodeRef.set(response.code());
+ latch.countDown();
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSyncResponseBodyGet() throws InterruptedException, IOException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForOkHttpResponse();
+
+ assertEquals("data", response.getResult().body().string());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSyncResponseBodyGet404() throws InterruptedException, IOException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.get(server.url("/").toString()).build();
+
+ ANResponse response = request.executeForOkHttpResponse();
+
+ assertEquals("data", response.getResult().body().string());
+
+ assertEquals(404, response.getResult().code());
+ }
+
+ public void testResponseBodyAndStringGet() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final AtomicReference responseStringRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, String response) {
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ responseStringRef.set(response);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("data", responseStringRef.get());
+ }
+
+ public void testResponseBodyAndStringGet404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, String response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderGetRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.get(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, String response) {
+ responseRef.set(response);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("data", responseRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+}
\ No newline at end of file
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/MultipartJSONApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/MultipartJSONApiTest.java
new file mode 100644
index 0000000..de2cc93
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/MultipartJSONApiTest.java
@@ -0,0 +1,487 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.JSONArrayRequestListener;
+import com.androidnetworking.interfaces.JSONObjectRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndJSONArrayRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndJSONObjectRequestListener;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Rule;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 09/04/17.
+ */
+
+public class MultipartJSONApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public MultipartJSONApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testJSONObjectMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsJSONObject(new JSONObjectRequestListener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testJSONObjectMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsJSONObject(new JSONObjectRequestListener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ public void testJSONArrayMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsJSONArray(new JSONArrayRequestListener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ try {
+ JSONObject jsonObject = response.getJSONObject(0);
+ firstNameRef.set(jsonObject.getString("firstName"));
+ lastNameRef.set(jsonObject.getString("lastName"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testJSONArrayMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsJSONArray(new JSONArrayRequestListener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONObjectMultipartRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForJSONObject();
+
+ assertEquals("Amit", response.getResult().getString("firstName"));
+
+ assertEquals("Shekhar", response.getResult().getString("lastName"));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONObjectMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForJSONObject();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONArrayMultipartRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForJSONArray();
+
+ JSONObject jsonObject = response.getResult().getJSONObject(0);
+
+ assertEquals("Amit", jsonObject.getString("firstName"));
+
+ assertEquals("Shekhar", jsonObject.getString("lastName"));
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONArrayMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForJSONArray();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ public void testResponseBodyAndJSONObjectMultipart() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndJSONObjectMultipart404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testResponseBodyAndJSONArrayMultipart() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONArray response) {
+ try {
+ JSONObject jsonObject = response.getJSONObject(0);
+ firstNameRef.set(jsonObject.getString("firstName"));
+ lastNameRef.set(jsonObject.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndJSONArrayMultipart404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONArray response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+
+
+}
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/MultipartObjectApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/MultipartObjectApiTest.java
new file mode 100644
index 0000000..021c244
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/MultipartObjectApiTest.java
@@ -0,0 +1,467 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
+import com.androidnetworking.interfaces.ParsedRequestListener;
+import com.androidnetworking.model.User;
+
+import org.json.JSONException;
+import org.junit.Rule;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 12/04/17.
+ */
+
+public class MultipartObjectApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public MultipartObjectApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testObjectMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsObject(User.class, new ParsedRequestListener() {
+ @Override
+ public void onResponse(User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testObjectMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsObject(User.class, new ParsedRequestListener() {
+ @Override
+ public void onResponse(User user) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ public void testObjectListMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsObjectList(User.class, new ParsedRequestListener>() {
+ @Override
+ public void onResponse(List userList) {
+ firstNameRef.set(userList.get(0).firstName);
+ lastNameRef.set(userList.get(0).lastName);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testObjectListMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsObjectList(User.class, new ParsedRequestListener>() {
+ @Override
+ public void onResponse(List userList) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectMultipartRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForObject(User.class);
+
+ assertEquals("Amit", response.getResult().firstName);
+
+ assertEquals("Shekhar", response.getResult().lastName);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForObject(User.class);
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectListMultipartRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse> response = request.executeForObjectList(User.class);
+
+ User user = response.getResult().get(0);
+
+ assertEquals("Amit", user.firstName);
+
+ assertEquals("Shekhar", user.lastName);
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectListMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse> response = request.executeForObjectList(User.class);
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ public void testResponseBodyAndObjectMultipart() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndObjectMultipart404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testResponseBodyAndObjectListMultipart() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObjectList(User.class,
+ new OkHttpResponseAndParsedRequestListener>() {
+ @Override
+ public void onResponse(Response okHttpResponse, List userList) {
+ firstNameRef.set(userList.get(0).firstName);
+ lastNameRef.set(userList.get(0).lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndObjectListMultipart404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObjectList(User.class,
+ new OkHttpResponseAndParsedRequestListener>() {
+ @Override
+ public void onResponse(Response okHttpResponse, List userList) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+
+}
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/MultipartStringApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/MultipartStringApiTest.java
new file mode 100644
index 0000000..30402bf
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/MultipartStringApiTest.java
@@ -0,0 +1,371 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndStringRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseListener;
+import com.androidnetworking.interfaces.StringRequestListener;
+import com.androidnetworking.model.User;
+
+import org.junit.Rule;
+
+import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 27/03/17.
+ */
+
+public class MultipartStringApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public MultipartStringApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testStringMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsString(new StringRequestListener() {
+ @Override
+ public void onResponse(String response) {
+ responseRef.set(response);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("data", responseRef.get());
+ }
+
+ public void testStringMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build()
+ .getAsString(new StringRequestListener() {
+ @Override
+ public void onResponse(String response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousStringMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForString();
+
+ assertEquals("data", response.getResult());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousMultipartRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForString();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+ }
+
+ public void testResponseBodyMultipart() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponse(new OkHttpResponseListener() {
+ @Override
+ public void onResponse(Response response) {
+ try {
+ responseRef.set(response.body().string());
+ latch.countDown();
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("data", responseRef.get());
+ }
+
+ public void testResponseBodyMultipart404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponse(new OkHttpResponseListener() {
+ @Override
+ public void onResponse(Response response) {
+ try {
+ errorBodyRef.set(response.body().string());
+ errorCodeRef.set(response.code());
+ latch.countDown();
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSyncResponseBodyMultipart() throws InterruptedException, IOException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForOkHttpResponse();
+
+ assertEquals("data", response.getResult().body().string());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSyncResponseBodyMultipart404() throws InterruptedException, IOException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .build();
+
+ ANResponse response = request.executeForOkHttpResponse();
+
+ assertEquals("data", response.getResult().body().string());
+
+ assertEquals(404, response.getResult().code());
+ }
+
+ public void testResponseBodyAndStringMultipart() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final AtomicReference responseStringRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, String response) {
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ responseStringRef.set(response);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("data", responseStringRef.get());
+ }
+
+ public void testResponseBodyAndStringMultipart404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, String response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderMultipartRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("data"));
+
+ final AtomicReference responseRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.upload(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .addMultipartParameter("key", "value")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndString(new OkHttpResponseAndStringRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, String response) {
+ responseRef.set(response);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("data", responseRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+
+}
\ No newline at end of file
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/PostJSONApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/PostJSONApiTest.java
new file mode 100644
index 0000000..c546b6a
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/PostJSONApiTest.java
@@ -0,0 +1,499 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.JSONArrayRequestListener;
+import com.androidnetworking.interfaces.JSONObjectRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndJSONArrayRequestListener;
+import com.androidnetworking.interfaces.OkHttpResponseAndJSONObjectRequestListener;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Rule;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 06/04/17.
+ */
+
+public class PostJSONApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public PostJSONApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testJSONObjectPostRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsJSONObject(new JSONObjectRequestListener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testJSONObjectPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsJSONObject(new JSONObjectRequestListener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ public void testJSONArrayPostRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsJSONArray(new JSONArrayRequestListener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ try {
+ JSONObject jsonObject = response.getJSONObject(0);
+ firstNameRef.set(jsonObject.getString("firstName"));
+ lastNameRef.set(jsonObject.getString("lastName"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testJSONArrayPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsJSONArray(new JSONArrayRequestListener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONObjectPostRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse response = request.executeForJSONObject();
+
+ assertEquals("Amit", response.getResult().getString("firstName"));
+
+ assertEquals("Shekhar", response.getResult().getString("lastName"));
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONObjectPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse response = request.executeForJSONObject();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONArrayPostRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse response = request.executeForJSONArray();
+
+ JSONObject jsonObject = response.getResult().getJSONObject(0);
+
+ assertEquals("Amit", jsonObject.getString("firstName"));
+
+ assertEquals("Shekhar", jsonObject.getString("lastName"));
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousJSONArrayPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse response = request.executeForJSONArray();
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ public void testResponseBodyAndJSONObjectPost() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndJSONObjectPost404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testResponseBodyAndJSONArrayPost() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONArray response) {
+ try {
+ JSONObject jsonObject = response.getJSONObject(0);
+ firstNameRef.set(jsonObject.getString("firstName"));
+ lastNameRef.set(jsonObject.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndJSONArrayPost404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONArray(new OkHttpResponseAndJSONArrayRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONArray response) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testHeaderPostRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference headerRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addHeaders("headerKey", "headerValue")
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndJSONObject(new OkHttpResponseAndJSONObjectRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, JSONObject response) {
+ try {
+ firstNameRef.set(response.getString("firstName"));
+ lastNameRef.set(response.getString("lastName"));
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ headerRef.set(okHttpResponse.request().header("headerKey"));
+ latch.countDown();
+ } catch (JSONException e) {
+ assertTrue(false);
+ }
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ assertEquals("headerValue", headerRef.get());
+ }
+
+}
diff --git a/android-networking/src/androidTest/java/com/androidnetworking/PostObjectApiTest.java b/android-networking/src/androidTest/java/com/androidnetworking/PostObjectApiTest.java
new file mode 100644
index 0000000..49a07b2
--- /dev/null
+++ b/android-networking/src/androidTest/java/com/androidnetworking/PostObjectApiTest.java
@@ -0,0 +1,480 @@
+/*
+ *
+ * * Copyright (C) 2016 Amit Shekhar
+ * * Copyright (C) 2011 Android Open Source Project
+ * *
+ * * Licensed 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.androidnetworking;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+import com.androidnetworking.common.ANConstants;
+import com.androidnetworking.common.ANRequest;
+import com.androidnetworking.common.ANResponse;
+import com.androidnetworking.error.ANError;
+import com.androidnetworking.interfaces.OkHttpResponseAndParsedRequestListener;
+import com.androidnetworking.interfaces.ParsedRequestListener;
+import com.androidnetworking.model.User;
+
+import org.json.JSONException;
+import org.junit.Rule;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+import okhttp3.Response;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+/**
+ * Created by owner on 11/04/17.
+ */
+
+public class PostObjectApiTest extends ApplicationTestCase {
+
+ @Rule
+ public final MockWebServer server = new MockWebServer();
+
+ public PostObjectApiTest() {
+ super(Application.class);
+ }
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ createApplication();
+ }
+
+ public void testObjectPostRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsObject(User.class, new ParsedRequestListener() {
+ @Override
+ public void onResponse(User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testObjectPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsObject(User.class, new ParsedRequestListener() {
+ @Override
+ public void onResponse(User user) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ public void testObjectListPostRequest() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsObjectList(User.class, new ParsedRequestListener>() {
+ @Override
+ public void onResponse(List userList) {
+ firstNameRef.set(userList.get(0).firstName);
+ lastNameRef.set(userList.get(0).lastName);
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testObjectListPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build()
+ .getAsObjectList(User.class, new ParsedRequestListener>() {
+ @Override
+ public void onResponse(List userList) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectPostRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse response = request.executeForObject(User.class);
+
+ assertEquals("Amit", response.getResult().firstName);
+
+ assertEquals("Shekhar", response.getResult().lastName);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse response = request.executeForObject(User.class);
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectListPostRequest() throws InterruptedException, JSONException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse> response = request.executeForObjectList(User.class);
+
+ User user = response.getResult().get(0);
+
+ assertEquals("Amit", user.firstName);
+
+ assertEquals("Shekhar", user.lastName);
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testSynchronousObjectListPostRequest404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ ANRequest request = AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .build();
+
+ ANResponse> response = request.executeForObjectList(User.class);
+
+ ANError error = response.getError();
+
+ assertEquals("data", error.getErrorBody());
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, error.getErrorDetail());
+
+ assertEquals(404, error.getErrorCode());
+
+ }
+
+ public void testResponseBodyAndObjectPost() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ firstNameRef.set(user.firstName);
+ lastNameRef.set(user.lastName);
+ responseBodySuccess.set(okHttpResponse.isSuccessful());
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ assertTrue(false);
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertTrue(responseBodySuccess.get());
+ assertEquals("Amit", firstNameRef.get());
+ assertEquals("Shekhar", lastNameRef.get());
+ }
+
+ public void testResponseBodyAndObjectPost404() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setResponseCode(404).setBody("data"));
+
+ final AtomicReference errorBodyRef = new AtomicReference<>();
+ final AtomicReference errorCodeRef = new AtomicReference<>();
+ final AtomicReference errorDetailRef = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObject(User.class,
+ new OkHttpResponseAndParsedRequestListener() {
+ @Override
+ public void onResponse(Response okHttpResponse, User user) {
+ assertTrue(false);
+ }
+
+ @Override
+ public void onError(ANError anError) {
+ errorBodyRef.set(anError.getErrorBody());
+ errorDetailRef.set(anError.getErrorDetail());
+ errorCodeRef.set(anError.getErrorCode());
+ latch.countDown();
+ }
+ });
+
+ assertTrue(latch.await(2, SECONDS));
+
+ assertEquals(ANConstants.RESPONSE_FROM_SERVER_ERROR, errorDetailRef.get());
+
+ assertEquals("data", errorBodyRef.get());
+
+ assertEquals(404, errorCodeRef.get().intValue());
+ }
+
+ public void testResponseBodyAndObjectListPost() throws InterruptedException {
+
+ server.enqueue(new MockResponse().setBody("[{\"firstName\":\"Amit\", \"lastName\":\"Shekhar\"}]"));
+
+ final AtomicReference firstNameRef = new AtomicReference<>();
+ final AtomicReference lastNameRef = new AtomicReference<>();
+ final AtomicReference responseBodySuccess = new AtomicReference<>();
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ AndroidNetworking.post(server.url("/").toString())
+ .addBodyParameter("fistName", "Amit")
+ .addBodyParameter("lastName", "Shekhar")
+ .setExecutor(Executors.newSingleThreadExecutor())
+ .build()
+ .getAsOkHttpResponseAndObjectList(User.class,
+ new OkHttpResponseAndParsedRequestListener>() {
+ @Override
+ public void onResponse(Response okHttpResponse, List