Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package android.transition.cts;
     17 
     18 import static org.junit.Assert.assertEquals;
     19 import static org.junit.Assert.assertFalse;
     20 import static org.junit.Assert.assertNotNull;
     21 import static org.junit.Assert.assertTrue;
     22 import static org.junit.Assert.fail;
     23 
     24 import android.content.Context;
     25 import android.graphics.Path;
     26 import android.graphics.PathMeasure;
     27 import android.support.test.filters.MediumTest;
     28 import android.support.test.runner.AndroidJUnit4;
     29 import android.transition.ArcMotion;
     30 import android.transition.AutoTransition;
     31 import android.transition.ChangeBounds;
     32 import android.transition.ChangeClipBounds;
     33 import android.transition.ChangeImageTransform;
     34 import android.transition.ChangeScroll;
     35 import android.transition.ChangeTransform;
     36 import android.transition.Explode;
     37 import android.transition.Fade;
     38 import android.transition.PathMotion;
     39 import android.transition.PatternPathMotion;
     40 import android.transition.Scene;
     41 import android.transition.Slide;
     42 import android.transition.Transition;
     43 import android.transition.TransitionInflater;
     44 import android.transition.TransitionManager;
     45 import android.transition.TransitionSet;
     46 import android.transition.TransitionValues;
     47 import android.transition.Visibility;
     48 import android.util.AttributeSet;
     49 import android.view.Gravity;
     50 import android.widget.ImageView;
     51 import android.widget.TextView;
     52 
     53 import org.junit.Test;
     54 import org.junit.runner.RunWith;
     55 
     56 import java.util.List;
     57 
     58 @MediumTest
     59 @RunWith(AndroidJUnit4.class)
     60 public class TransitionInflaterTest extends BaseTransitionTest {
     61     @Test
     62     public void testInflationConstructors() throws Throwable {
     63         TransitionInflater inflater = TransitionInflater.from(mActivity);
     64         Transition transition = inflater.inflateTransition(R.transition.transition_constructors);
     65         assertTrue(transition instanceof TransitionSet);
     66         TransitionSet set = (TransitionSet) transition;
     67         assertEquals(10, set.getTransitionCount());
     68     }
     69 
     70     @Test
     71     public void testInflation() {
     72         TransitionInflater inflater = TransitionInflater.from(mActivity);
     73         verifyFadeProperties(inflater.inflateTransition(R.transition.fade));
     74         verifyChangeBoundsProperties(inflater.inflateTransition(R.transition.change_bounds));
     75         verifySlideProperties(inflater.inflateTransition(R.transition.slide));
     76         verifyExplodeProperties(inflater.inflateTransition(R.transition.explode));
     77         verifyChangeImageTransformProperties(
     78                 inflater.inflateTransition(R.transition.change_image_transform));
     79         verifyChangeTransformProperties(inflater.inflateTransition(R.transition.change_transform));
     80         verifyChangeClipBoundsProperties(
     81                 inflater.inflateTransition(R.transition.change_clip_bounds));
     82         verifyAutoTransitionProperties(inflater.inflateTransition(R.transition.auto_transition));
     83         verifyChangeScrollProperties(inflater.inflateTransition(R.transition.change_scroll));
     84         verifyTransitionSetProperties(inflater.inflateTransition(R.transition.transition_set));
     85         verifyCustomTransitionProperties(
     86                 inflater.inflateTransition(R.transition.custom_transition));
     87         verifyTargetIds(inflater.inflateTransition(R.transition.target_ids));
     88         verifyTargetNames(inflater.inflateTransition(R.transition.target_names));
     89         verifyTargetClass(inflater.inflateTransition(R.transition.target_classes));
     90         verifyArcMotion(inflater.inflateTransition(R.transition.arc_motion));
     91         verifyCustomPathMotion(inflater.inflateTransition(R.transition.custom_path_motion));
     92         verifyPatternPathMotion(inflater.inflateTransition(R.transition.pattern_path_motion));
     93     }
     94 
     95     @Test
     96     public void testInflateTransitionManager() throws Throwable {
     97         TransitionInflater inflater = TransitionInflater.from(mActivity);
     98         TransitionManager transitionManager =
     99                 inflater.inflateTransitionManager(R.transition.transition_manager, mSceneRoot);
    100         assertNotNull(transitionManager);
    101 
    102         Scene scene1 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene1, mActivity);
    103         Transition transition = transitionManager.getTransition(scene1);
    104         assertNotNull(transition);
    105         assertTrue(transition instanceof Fade);
    106         enterScene(scene1);
    107 
    108         Scene scene2 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene2, mActivity);
    109         transition = transitionManager.getTransition(scene2);
    110         assertNotNull(transition);
    111         assertTrue(transition instanceof ChangeBounds);
    112     }
    113 
    114     private void verifyFadeProperties(Transition transition) {
    115         assertTrue(transition instanceof Fade);
    116         Fade fade = (Fade) transition;
    117         assertEquals(Fade.OUT, fade.getMode());
    118     }
    119 
    120     private void verifyChangeBoundsProperties(Transition transition) {
    121         assertTrue(transition instanceof ChangeBounds);
    122         ChangeBounds changeBounds = (ChangeBounds) transition;
    123         assertTrue(changeBounds.getResizeClip());
    124     }
    125 
    126     private void verifySlideProperties(Transition transition) {
    127         assertTrue(transition instanceof Slide);
    128         Slide slide = (Slide) transition;
    129         assertEquals(Gravity.TOP, slide.getSlideEdge());
    130     }
    131 
    132     private void verifyExplodeProperties(Transition transition) {
    133         assertTrue(transition instanceof Explode);
    134         Visibility visibility = (Visibility) transition;
    135         assertEquals(Visibility.MODE_IN, visibility.getMode());
    136     }
    137 
    138     private void verifyChangeImageTransformProperties(Transition transition) {
    139         assertTrue(transition instanceof ChangeImageTransform);
    140     }
    141 
    142     private void verifyChangeTransformProperties(Transition transition) {
    143         assertTrue(transition instanceof ChangeTransform);
    144         ChangeTransform changeTransform = (ChangeTransform) transition;
    145         assertFalse(changeTransform.getReparent());
    146         assertFalse(changeTransform.getReparentWithOverlay());
    147     }
    148 
    149     private void verifyChangeClipBoundsProperties(Transition transition) {
    150         assertTrue(transition instanceof ChangeClipBounds);
    151     }
    152 
    153     private void verifyAutoTransitionProperties(Transition transition) {
    154         assertTrue(transition instanceof AutoTransition);
    155     }
    156 
    157     private void verifyChangeScrollProperties(Transition transition) {
    158         assertTrue(transition instanceof ChangeScroll);
    159     }
    160 
    161     private void verifyTransitionSetProperties(Transition transition) {
    162         assertTrue(transition instanceof TransitionSet);
    163         TransitionSet set = (TransitionSet) transition;
    164         assertEquals(TransitionSet.ORDERING_SEQUENTIAL, set.getOrdering());
    165         assertEquals(2, set.getTransitionCount());
    166         assertTrue(set.getTransitionAt(0) instanceof ChangeBounds);
    167         assertTrue(set.getTransitionAt(1) instanceof Fade);
    168     }
    169 
    170     private void verifyCustomTransitionProperties(Transition transition) {
    171         assertTrue(transition instanceof CustomTransition);
    172     }
    173 
    174     private void verifyTargetIds(Transition transition) {
    175         List<Integer> targets = transition.getTargetIds();
    176         assertNotNull(targets);
    177         assertEquals(2, targets.size());
    178         assertEquals(R.id.hello, (int) targets.get(0));
    179         assertEquals(R.id.world, (int) targets.get(1));
    180     }
    181 
    182     private void verifyTargetNames(Transition transition) {
    183         List<String> targets = transition.getTargetNames();
    184         assertNotNull(targets);
    185         assertEquals(2, targets.size());
    186         assertEquals("hello", targets.get(0));
    187         assertEquals("world", targets.get(1));
    188     }
    189 
    190     private void verifyTargetClass(Transition transition) {
    191         List<Class> targets = transition.getTargetTypes();
    192         assertNotNull(targets);
    193         assertEquals(2, targets.size());
    194         assertEquals(TextView.class, targets.get(0));
    195         assertEquals(ImageView.class, targets.get(1));
    196     }
    197 
    198     private void verifyArcMotion(Transition transition) {
    199         assertNotNull(transition);
    200         PathMotion motion = transition.getPathMotion();
    201         assertNotNull(motion);
    202         assertTrue(motion instanceof ArcMotion);
    203         ArcMotion arcMotion = (ArcMotion) motion;
    204         assertEquals(1f, arcMotion.getMinimumVerticalAngle(), 0.01f);
    205         assertEquals(2f, arcMotion.getMinimumHorizontalAngle(), 0.01f);
    206         assertEquals(53f, arcMotion.getMaximumAngle(), 0.01f);
    207     }
    208 
    209     private void verifyCustomPathMotion(Transition transition) {
    210         assertNotNull(transition);
    211         PathMotion motion = transition.getPathMotion();
    212         assertNotNull(motion);
    213         assertTrue(motion instanceof CustomPathMotion);
    214     }
    215 
    216     private void verifyPatternPathMotion(Transition transition) {
    217         assertNotNull(transition);
    218         PathMotion motion = transition.getPathMotion();
    219         assertNotNull(motion);
    220         assertTrue(motion instanceof PatternPathMotion);
    221         PatternPathMotion pattern = (PatternPathMotion) motion;
    222         Path path = pattern.getPatternPath();
    223         PathMeasure measure = new PathMeasure(path, false);
    224         assertEquals(200f, measure.getLength(), 0.1f);
    225     }
    226 
    227     public static class CustomTransition extends Transition {
    228         public CustomTransition() {
    229             fail("Default constructor was not expected");
    230         }
    231 
    232         public CustomTransition(Context context, AttributeSet attrs) {
    233             super(context, attrs);
    234         }
    235 
    236         @Override
    237         public void captureStartValues(TransitionValues transitionValues) {
    238         }
    239 
    240         @Override
    241         public void captureEndValues(TransitionValues transitionValues) {
    242         }
    243     }
    244 
    245     public static class CustomPathMotion extends PathMotion {
    246         public CustomPathMotion() {
    247             fail("default constructor shouldn't be called.");
    248         }
    249 
    250         public CustomPathMotion(Context context, AttributeSet attrs) {
    251             super(context, attrs);
    252         }
    253 
    254         @Override
    255         public Path getPath(float startX, float startY, float endX, float endY) {
    256             return null;
    257         }
    258     }
    259 
    260     public static class InflationFade extends Fade {
    261         public InflationFade(Context context, AttributeSet attrs) {
    262             super(context, attrs);
    263         }
    264     }
    265 
    266     public static class InflationChangeBounds extends ChangeBounds {
    267         public InflationChangeBounds(Context context, AttributeSet attrs) {
    268             super(context, attrs);
    269         }
    270     }
    271 
    272     public static class InflationSlide extends Slide {
    273         public InflationSlide(Context context, AttributeSet attrs) {
    274             super(context, attrs);
    275         }
    276     }
    277 
    278     public static class InflationTransitionSet extends TransitionSet {
    279         public InflationTransitionSet(Context context, AttributeSet attrs) {
    280             super(context, attrs);
    281         }
    282     }
    283 
    284     public static class InflationChangeImageTransform extends ChangeImageTransform {
    285         public InflationChangeImageTransform(Context context, AttributeSet attrs) {
    286             super(context, attrs);
    287         }
    288     }
    289 
    290     public static class InflationChangeTransform extends ChangeTransform {
    291         public InflationChangeTransform(Context context, AttributeSet attrs) {
    292             super(context, attrs);
    293         }
    294     }
    295 
    296     public static class InflationAutoTransition extends AutoTransition {
    297         public InflationAutoTransition(Context context, AttributeSet attrs) {
    298             super(context, attrs);
    299         }
    300     }
    301 
    302     public static class InflationChangeClipBounds extends ChangeClipBounds {
    303         public InflationChangeClipBounds(Context context, AttributeSet attrs) {
    304             super(context, attrs);
    305         }
    306     }
    307 
    308     public static class InflationChangeScroll extends ChangeScroll {
    309         public InflationChangeScroll(Context context, AttributeSet attrs) {
    310             super(context, attrs);
    311         }
    312     }
    313 
    314     public static class InflationExplode extends Explode {
    315         public InflationExplode(Context context, AttributeSet attrs) {
    316             super(context, attrs);
    317         }
    318     }
    319 }
    320