// Path: conductor/src/main/java/com/bluelinelabs/conductor/changehandler/HorizontalChangeHandler.java
// public class HorizontalChangeHandler extends AnimatorChangeHandler {
// 
//     public HorizontalChangeHandler() { }
// 
//     public HorizontalChangeHandler(boolean removesFromViewOnPush) {
//         super(removesFromViewOnPush);
//     }
// 
//     public HorizontalChangeHandler(long duration) {
//         super(duration);
//     }
// 
//     public HorizontalChangeHandler(long duration, boolean removesFromViewOnPush) {
//         super(duration, removesFromViewOnPush);
//     }
// 
//     @Override @NonNull
//     protected Animator getAnimator(@NonNull ViewGroup container, @Nullable View from, @Nullable View to, boolean isPush, boolean toAddedToContainer) {
//         AnimatorSet animatorSet = new AnimatorSet();
// 
//         if (isPush) {
//             if (from != null) {
//                 animatorSet.play(ObjectAnimator.ofFloat(from, View.TRANSLATION_X, -from.getWidth()));
//             }
//             if (to != null) {
//                 animatorSet.play(ObjectAnimator.ofFloat(to, View.TRANSLATION_X, to.getWidth(), 0));
//             }
//         } else {
//             if (from != null) {
//                 animatorSet.play(ObjectAnimator.ofFloat(from, View.TRANSLATION_X, from.getWidth()));
//             }
//             if (to != null) {
//                 // Allow this to have a nice transition when coming off an aborted push animation
//                 float fromLeft = from != null ? from.getTranslationX() : 0;
//                 animatorSet.play(ObjectAnimator.ofFloat(to, View.TRANSLATION_X, fromLeft - to.getWidth(), 0));
//             }
//         }
// 
//         return animatorSet;
//     }
// 
//     @Override
//     protected void resetFromView(@NonNull View from) {
//         from.setTranslationX(0);
//     }
// 
//     @Override @NonNull
//     public ControllerChangeHandler copy() {
//         return new HorizontalChangeHandler(getAnimationDuration(), removesFromViewOnPush());
//     }
// 
// }
// 
// Path: conductor/src/main/java/com/bluelinelabs/conductor/changehandler/VerticalChangeHandler.java
// public class VerticalChangeHandler extends AnimatorChangeHandler {
// 
//     public VerticalChangeHandler() { }
// 
//     public VerticalChangeHandler(boolean removesFromViewOnPush) {
//         super(removesFromViewOnPush);
//     }
// 
//     public VerticalChangeHandler(long duration) {
//         super(duration);
//     }
// 
//     public VerticalChangeHandler(long duration, boolean removesFromViewOnPush) {
//         super(duration, removesFromViewOnPush);
//     }
// 
//     @Override @NonNull
//     protected Animator getAnimator(@NonNull ViewGroup container, @Nullable View from, @Nullable View to, boolean isPush, boolean toAddedToContainer) {
//         AnimatorSet animator = new AnimatorSet();
//         List<Animator> viewAnimators = new ArrayList<>();
// 
//         if (isPush && to != null) {
//             viewAnimators.add(ObjectAnimator.ofFloat(to, View.TRANSLATION_Y, to.getHeight(), 0));
//         } else if (!isPush && from != null) {
//             viewAnimators.add(ObjectAnimator.ofFloat(from, View.TRANSLATION_Y, from.getHeight()));
//         }
// 
//         animator.playTogether(viewAnimators);
//         return animator;
//     }
// 
//     @Override
//     protected void resetFromView(@NonNull View from) { }
// 
//     @Override @NonNull
//     public ControllerChangeHandler copy() {
//         return new VerticalChangeHandler(getAnimationDuration(), removesFromViewOnPush());
//     }
// 
// }


import android.os.Bundle;
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import static org.junit.Assert.assertEquals;
package com.bluelinelabs.conductor;





@RunWith(RobolectricTestRunner.class)
public class ControllerTransactionTests {

    @Test
    public void testRouterSaveRestore() {
        RouterTransaction transaction = RouterTransaction.with(new TestController())
// Path: conductor/src/main/java/com/bluelinelabs/conductor/changehandler/HorizontalChangeHandler.java
// public class HorizontalChangeHandler extends AnimatorChangeHandler {
// 
//     public HorizontalChangeHandler() { }
// 
//     public HorizontalChangeHandler(boolean removesFromViewOnPush) {
//         super(removesFromViewOnPush);
//     }
// 
//     public HorizontalChangeHandler(long duration) {
//         super(duration);
//     }
// 
//     public HorizontalChangeHandler(long duration, boolean removesFromViewOnPush) {
//         super(duration, removesFromViewOnPush);
//     }
// 
//     @Override @NonNull
//     protected Animator getAnimator(@NonNull ViewGroup container, @Nullable View from, @Nullable View to, boolean isPush, boolean toAddedToContainer) {
//         AnimatorSet animatorSet = new AnimatorSet();
// 
//         if (isPush) {
//             if (from != null) {
//                 animatorSet.play(ObjectAnimator.ofFloat(from, View.TRANSLATION_X, -from.getWidth()));
//             }
//             if (to != null) {
//                 animatorSet.play(ObjectAnimator.ofFloat(to, View.TRANSLATION_X, to.getWidth(), 0));
//             }
//         } else {
//             if (from != null) {
//                 animatorSet.play(ObjectAnimator.ofFloat(from, View.TRANSLATION_X, from.getWidth()));
//             }
//             if (to != null) {
//                 // Allow this to have a nice transition when coming off an aborted push animation
//                 float fromLeft = from != null ? from.getTranslationX() : 0;
//                 animatorSet.play(ObjectAnimator.ofFloat(to, View.TRANSLATION_X, fromLeft - to.getWidth(), 0));
//             }
//         }
// 
//         return animatorSet;
//     }
// 
//     @Override
//     protected void resetFromView(@NonNull View from) {
//         from.setTranslationX(0);
//     }
// 
//     @Override @NonNull
//     public ControllerChangeHandler copy() {
//         return new HorizontalChangeHandler(getAnimationDuration(), removesFromViewOnPush());
//     }
// 
// }
// 
// Path: conductor/src/main/java/com/bluelinelabs/conductor/changehandler/VerticalChangeHandler.java
// public class VerticalChangeHandler extends AnimatorChangeHandler {
// 
//     public VerticalChangeHandler() { }
// 
//     public VerticalChangeHandler(boolean removesFromViewOnPush) {
//         super(removesFromViewOnPush);
//     }
// 
//     public VerticalChangeHandler(long duration) {
//         super(duration);
//     }
// 
//     public VerticalChangeHandler(long duration, boolean removesFromViewOnPush) {
//         super(duration, removesFromViewOnPush);
//     }
// 
//     @Override @NonNull
//     protected Animator getAnimator(@NonNull ViewGroup container, @Nullable View from, @Nullable View to, boolean isPush, boolean toAddedToContainer) {
//         AnimatorSet animator = new AnimatorSet();
//         List<Animator> viewAnimators = new ArrayList<>();
// 
//         if (isPush && to != null) {
//             viewAnimators.add(ObjectAnimator.ofFloat(to, View.TRANSLATION_Y, to.getHeight(), 0));
//         } else if (!isPush && from != null) {
//             viewAnimators.add(ObjectAnimator.ofFloat(from, View.TRANSLATION_Y, from.getHeight()));
//         }
// 
//         animator.playTogether(viewAnimators);
//         return animator;
//     }
// 
//     @Override
//     protected void resetFromView(@NonNull View from) { }
// 
//     @Override @NonNull
//     public ControllerChangeHandler copy() {
//         return new VerticalChangeHandler(getAnimationDuration(), removesFromViewOnPush());
//     }
// 
// }


// Path: conductor/src/test/java/com/bluelinelabs/conductor/ControllerTransactionTests.java
import android.os.Bundle;
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import static org.junit.Assert.assertEquals;

package com.bluelinelabs.conductor;





@RunWith(RobolectricTestRunner.class)
public class ControllerTransactionTests {

    @Test
    public void testRouterSaveRestore() {
        RouterTransaction transaction = RouterTransaction.with(new TestController())
                .pushChangeHandler(new HorizontalChangeHandler())