// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Client.java
// public interface Client {
// 
//     /**
//      * Synchronously execute an HTTP represented by {@code request} and encapsulate all response data
//      * into a {@link Response} instance.
//      */
//     Response execute(Request request) throws IOException;
// }
// 
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Header.java
// public class Header {
// 
//     private final String name;
//     private final String value;
// 
//     public Header(String name, String value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         Header header = (Header) o;
// 
//         if (name != null ? !name.equals(header.name) : header.name != null) {
//             return false;
//         }
//         if (value != null ? !value.equals(header.value) : header.value != null) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = name != null ? name.hashCode() : 0;
//         result = 31 * result + (value != null ? value.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Header{" + "name='" + name + '\'' + ", value='" + value + '\'' + '}';
//     }
// }
// 
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Request.java
// public class Request {
// 
//     private final String method;
//     private final String url;
//     private final List<Header> headers;
//     private final TypedOutput body;
// 
//     public Request(String method, String url, List<Header> headers, TypedOutput body) {
//         this.method = method;
//         this.url = url;
//         this.headers = headers;
//         this.body = body;
//     }
// 
//     /** HTTP method verb. */
//     public String getMethod() {
//         return method;
//     }
// 
//     /** Target URL. */
//     public String getUrl() {
//         return url;
//     }
// 
//     /** Returns an unmodifiable list of headers, never {@code null}. */
//     public List<Header> getHeaders() {
//         return headers;
//     }
// 
//     /** Returns the request body or {@code null}. */
//     public TypedOutput getBody() {
//         return body;
//     }
// }
// 
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Response.java
// public class Response {
// 
//     private final String url;
//     private final int status;
//     private final String reason;
//     private final List<Header> headers;
//     private final TypedInput body;
// 
//     public Response(String url, int status, String reason, List<Header> headers, TypedInput body) {
//         this.url = url;
//         this.status = status;
//         this.reason = reason;
//         this.headers = headers;
//         this.body = body;
//     }
// 
//     /** Request URL. */
//     public String getUrl() {
//         return url;
//     }
// 
//     /** Status line code. */
//     public int getStatus() {
//         return status;
//     }
// 
//     /** Status line reason phrase. */
//     public String getReason() {
//         return reason;
//     }
// 
//     /** An unmodifiable collection of headers. */
//     public List<Header> getHeaders() {
//         return headers;
//     }
// 
//     /** Response body. May be {@code null}. */
//     public TypedInput getBody() {
//         return body;
//     }
// }


import com.uphyca.idobata.http.Client;
import com.uphyca.idobata.http.Header;
import com.uphyca.idobata.http.Request;
import com.uphyca.idobata.http.Response;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Collections;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.mock;

package com.uphyca.idobata;




@RunWith(MockitoJUnitRunner.class)
public class TokenAuthenticatorTest {

    @Mock
    Client mClient;

    @Test
    public void constantTokenString() throws Exception {

        ArgumentCaptor<Request> requestCaptor = ArgumentCaptor.forClass(Request.class);
        given(mClient.execute(requestCaptor.capture())).willReturn(mock(Response.class));

        TokenAuthenticator underTest = new TokenAuthenticator("abc");
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Client.java
// public interface Client {
// 
//     /**
//      * Synchronously execute an HTTP represented by {@code request} and encapsulate all response data
//      * into a {@link Response} instance.
//      */
//     Response execute(Request request) throws IOException;
// }
// 
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Header.java
// public class Header {
// 
//     private final String name;
//     private final String value;
// 
//     public Header(String name, String value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         Header header = (Header) o;
// 
//         if (name != null ? !name.equals(header.name) : header.name != null) {
//             return false;
//         }
//         if (value != null ? !value.equals(header.value) : header.value != null) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = name != null ? name.hashCode() : 0;
//         result = 31 * result + (value != null ? value.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Header{" + "name='" + name + '\'' + ", value='" + value + '\'' + '}';
//     }
// }
// 
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Request.java
// public class Request {
// 
//     private final String method;
//     private final String url;
//     private final List<Header> headers;
//     private final TypedOutput body;
// 
//     public Request(String method, String url, List<Header> headers, TypedOutput body) {
//         this.method = method;
//         this.url = url;
//         this.headers = headers;
//         this.body = body;
//     }
// 
//     /** HTTP method verb. */
//     public String getMethod() {
//         return method;
//     }
// 
//     /** Target URL. */
//     public String getUrl() {
//         return url;
//     }
// 
//     /** Returns an unmodifiable list of headers, never {@code null}. */
//     public List<Header> getHeaders() {
//         return headers;
//     }
// 
//     /** Returns the request body or {@code null}. */
//     public TypedOutput getBody() {
//         return body;
//     }
// }
// 
// Path: idobata4j-core/src/main/java/com/uphyca/idobata/http/Response.java
// public class Response {
// 
//     private final String url;
//     private final int status;
//     private final String reason;
//     private final List<Header> headers;
//     private final TypedInput body;
// 
//     public Response(String url, int status, String reason, List<Header> headers, TypedInput body) {
//         this.url = url;
//         this.status = status;
//         this.reason = reason;
//         this.headers = headers;
//         this.body = body;
//     }
// 
//     /** Request URL. */
//     public String getUrl() {
//         return url;
//     }
// 
//     /** Status line code. */
//     public int getStatus() {
//         return status;
//     }
// 
//     /** Status line reason phrase. */
//     public String getReason() {
//         return reason;
//     }
// 
//     /** An unmodifiable collection of headers. */
//     public List<Header> getHeaders() {
//         return headers;
//     }
// 
//     /** Response body. May be {@code null}. */
//     public TypedInput getBody() {
//         return body;
//     }
// }


// Path: idobata4j-core/src/test/java/com/uphyca/idobata/TokenAuthenticatorTest.java
import com.uphyca.idobata.http.Client;
import com.uphyca.idobata.http.Header;
import com.uphyca.idobata.http.Request;
import com.uphyca.idobata.http.Response;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Collections;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.mock;


package com.uphyca.idobata;




@RunWith(MockitoJUnitRunner.class)
public class TokenAuthenticatorTest {

    @Mock
    Client mClient;

    @Test
    public void constantTokenString() throws Exception {

        ArgumentCaptor<Request> requestCaptor = ArgumentCaptor.forClass(Request.class);
        given(mClient.execute(requestCaptor.capture())).willReturn(mock(Response.class));

        TokenAuthenticator underTest = new TokenAuthenticator("abc");
        Request request = new Request(null, null, Collections.<Header> emptyList(), null);