// Path: simple-stack/src/test/java/com/zhuinden/simplestack/helpers/TestKey.java
// public class TestKey
//         implements Parcelable {
//     public final String name;
// 
//     public TestKey(String name) {
//         this.name = name;
//     }
// 
//     protected TestKey(Parcel in) {
//         name = in.readString();
//     }
// 
//     public static final Creator<TestKey> CREATOR = new Creator<TestKey>() {
//         @Override
//         public TestKey createFromParcel(Parcel in) {
//             return new TestKey(in);
//         }
// 
//         @Override
//         public TestKey[] newArray(int size) {
//             return new TestKey[size];
//         }
//     };
// 
//     @Override
//     public boolean equals(Object o) {
//         if(this == o) {
//             return true;
//         }
//         if(o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         TestKey key = (TestKey) o;
//         return name.equals(key.name);
//     }
// 
//     @Override
//     public int hashCode() {
//         return name.hashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return String.format("%s{%h}", name, this);
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeString(name);
//     }
// }


import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import com.zhuinden.simplestack.helpers.TestKey;
import com.zhuinden.statebundle.StateBundle;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.annotation.Nonnull;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
            fail();
        } catch(IllegalArgumentException e) {
            // OK!
        }
    }

    @Test
    public void setSamePersistenceTagTwiceShouldBeOk() {
        BackstackDelegate backstackDelegate = new BackstackDelegate();
        backstackDelegate.setPersistenceTag(new String("hello"));
        backstackDelegate.setPersistenceTag(new String("hello"));
        // no exceptions thrown
    }

    @Test
    public void setTwoDifferentPersistenceTagsShouldThrow() {
        BackstackDelegate backstackDelegate = new BackstackDelegate();
        backstackDelegate.setPersistenceTag(new String("hello"));
        try {
            backstackDelegate.setPersistenceTag(new String("world"));
            fail();
        } catch(IllegalStateException e) {
            // OK!
        }
    }

    @Test
    public void setPersistenceTagAfterOnCreateShouldThrow() {
        BackstackDelegate backstackDelegate = new BackstackDelegate();
        backstackDelegate.onCreate(null, null, new ArrayList<Object>() {{
// Path: simple-stack/src/test/java/com/zhuinden/simplestack/helpers/TestKey.java
// public class TestKey
//         implements Parcelable {
//     public final String name;
// 
//     public TestKey(String name) {
//         this.name = name;
//     }
// 
//     protected TestKey(Parcel in) {
//         name = in.readString();
//     }
// 
//     public static final Creator<TestKey> CREATOR = new Creator<TestKey>() {
//         @Override
//         public TestKey createFromParcel(Parcel in) {
//             return new TestKey(in);
//         }
// 
//         @Override
//         public TestKey[] newArray(int size) {
//             return new TestKey[size];
//         }
//     };
// 
//     @Override
//     public boolean equals(Object o) {
//         if(this == o) {
//             return true;
//         }
//         if(o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         TestKey key = (TestKey) o;
//         return name.equals(key.name);
//     }
// 
//     @Override
//     public int hashCode() {
//         return name.hashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return String.format("%s{%h}", name, this);
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeString(name);
//     }
// }


// Path: simple-stack/src/test/java/com/zhuinden/simplestack/BackstackDelegateTest.java
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import com.zhuinden.simplestack.helpers.TestKey;
import com.zhuinden.statebundle.StateBundle;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.annotation.Nonnull;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;

            fail();
        } catch(IllegalArgumentException e) {
            // OK!
        }
    }

    @Test
    public void setSamePersistenceTagTwiceShouldBeOk() {
        BackstackDelegate backstackDelegate = new BackstackDelegate();
        backstackDelegate.setPersistenceTag(new String("hello"));
        backstackDelegate.setPersistenceTag(new String("hello"));
        // no exceptions thrown
    }

    @Test
    public void setTwoDifferentPersistenceTagsShouldThrow() {
        BackstackDelegate backstackDelegate = new BackstackDelegate();
        backstackDelegate.setPersistenceTag(new String("hello"));
        try {
            backstackDelegate.setPersistenceTag(new String("world"));
            fail();
        } catch(IllegalStateException e) {
            // OK!
        }
    }

    @Test
    public void setPersistenceTagAfterOnCreateShouldThrow() {
        BackstackDelegate backstackDelegate = new BackstackDelegate();
        backstackDelegate.onCreate(null, null, new ArrayList<Object>() {{
            add(new TestKey("hello"));