// Path: waterfallcache/src/androidTest/java/com/github/simonpercic/waterfallcache/model/GenericObject.java
// public class GenericObject<T> {
// 
//     private T object;
// 
//     private String value;
// 
//     public T getObject() {
//         return object;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// 
//     public void setObject(T object) {
//         this.object = object;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }
// 
// Path: waterfallcache/src/test/java/com/github/simonpercic/waterfallcache/model/SimpleObject.java
// public class SimpleObject {
// 
//     private String value;
// 
//     public SimpleObject(String value) {
//         this.value = value;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// }
// 
// Path: waterfallcache/src/androidTest/java/com/github/simonpercic/waterfallcache/model/WrappedObject.java
// public class WrappedObject {
// 
//     private SimpleObject object;
// 
//     private String value;
// 
//     public SimpleObject getObject() {
//         return object;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// 
//     public void setObject(SimpleObject object) {
//         this.object = object;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }


import com.github.simonpercic.waterfallcache.model.GenericObject;
import com.github.simonpercic.waterfallcache.model.SimpleObject;
import com.github.simonpercic.waterfallcache.model.WrappedObject;
import com.google.gson.reflect.TypeToken;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.Type;
import rx.Observable;
import rx.schedulers.Schedulers;
import static org.junit.Assert.assertEquals;
    public void testContainsNoValue() throws Exception {
        String key = "TEST_KEY";

        Observable<Boolean> observable = waterfallCache.contains(key);
        ObservableTestUtils.testObservable(observable, Assert::assertFalse);
    }

    @Test
    public void testSimple() throws Exception {
        String key = "TEST_KEY";
        String value = "TEST_VALUE";

        SimpleObject object = new SimpleObject(value);

        ObservableTestUtils.testObservable(waterfallCache.put(key, object), Assert::assertTrue);

        Observable<SimpleObject> getObservable = waterfallCache.get(key, SimpleObject.class);
        ObservableTestUtils.testObservable(getObservable, simpleObject -> assertEquals(value, simpleObject.getValue()));

        ObservableTestUtils.testObservable(waterfallCache.contains(key), Assert::assertTrue);
    }

    @Test
    public void testWrapped() throws Exception {
        String key = "TEST_KEY";
        String simpleValue = "TEST_SIMPLE_VALUE";
        String wrappedValue = "TEST_WRAPPED_VALUE";

        SimpleObject simple = new SimpleObject(simpleValue);

// Path: waterfallcache/src/androidTest/java/com/github/simonpercic/waterfallcache/model/GenericObject.java
// public class GenericObject<T> {
// 
//     private T object;
// 
//     private String value;
// 
//     public T getObject() {
//         return object;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// 
//     public void setObject(T object) {
//         this.object = object;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }
// 
// Path: waterfallcache/src/test/java/com/github/simonpercic/waterfallcache/model/SimpleObject.java
// public class SimpleObject {
// 
//     private String value;
// 
//     public SimpleObject(String value) {
//         this.value = value;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// }
// 
// Path: waterfallcache/src/androidTest/java/com/github/simonpercic/waterfallcache/model/WrappedObject.java
// public class WrappedObject {
// 
//     private SimpleObject object;
// 
//     private String value;
// 
//     public SimpleObject getObject() {
//         return object;
//     }
// 
//     public String getValue() {
//         return value;
//     }
// 
//     public void setObject(SimpleObject object) {
//         this.object = object;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }


// Path: waterfallcache/src/androidTest/java/com/github/simonpercic/waterfallcache/WaterfallCacheInlineMemoryOnlyTest.java
import com.github.simonpercic.waterfallcache.model.GenericObject;
import com.github.simonpercic.waterfallcache.model.SimpleObject;
import com.github.simonpercic.waterfallcache.model.WrappedObject;
import com.google.gson.reflect.TypeToken;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.Type;
import rx.Observable;
import rx.schedulers.Schedulers;
import static org.junit.Assert.assertEquals;

    public void testContainsNoValue() throws Exception {
        String key = "TEST_KEY";

        Observable<Boolean> observable = waterfallCache.contains(key);
        ObservableTestUtils.testObservable(observable, Assert::assertFalse);
    }

    @Test
    public void testSimple() throws Exception {
        String key = "TEST_KEY";
        String value = "TEST_VALUE";

        SimpleObject object = new SimpleObject(value);

        ObservableTestUtils.testObservable(waterfallCache.put(key, object), Assert::assertTrue);

        Observable<SimpleObject> getObservable = waterfallCache.get(key, SimpleObject.class);
        ObservableTestUtils.testObservable(getObservable, simpleObject -> assertEquals(value, simpleObject.getValue()));

        ObservableTestUtils.testObservable(waterfallCache.contains(key), Assert::assertTrue);
    }

    @Test
    public void testWrapped() throws Exception {
        String key = "TEST_KEY";
        String simpleValue = "TEST_SIMPLE_VALUE";
        String wrappedValue = "TEST_WRAPPED_VALUE";

        SimpleObject simple = new SimpleObject(simpleValue);

        WrappedObject wrapped = new WrappedObject();