/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.drawee.view;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import com.facebook.drawee.drawable.DrawableTestUtils;
import com.facebook.drawee.interfaces.DraweeHierarchy;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.testing.DraweeMocks;
import com.facebook.testing.robolectric.v2.WithTestDefaultsRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.robolectric.Robolectric;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/** Unit test for {@link DraweeView}. */
@RunWith(WithTestDefaultsRunner.class)
public class DraweeViewTest {
private DraweeView<DraweeHierarchy> mDraweeView;
private Drawable mDrawable;
private Drawable mTopLevelDrawable;
private DraweeHierarchy mDraweeHierarchy;
private DraweeController mController;
@Before
public void setUp() {
Activity activity = Robolectric.buildActivity(Activity.class).create().get();
mDrawable = DrawableTestUtils.mockDrawable();
mTopLevelDrawable = DrawableTestUtils.mockDrawable();
mDraweeHierarchy = DraweeMocks.mockDraweeHierarchyOf(mTopLevelDrawable);
mController = DraweeMocks.mockController();
mDraweeView = new DraweeView<DraweeHierarchy>(activity);
}
@Test
public void testSetHierarchy() {
mDraweeView.setHierarchy(mDraweeHierarchy);
assertSame(mDraweeHierarchy, mDraweeView.getHierarchy());
assertSame(mTopLevelDrawable, mDraweeView.getDrawable());
DraweeHierarchy hierarchy2 = DraweeMocks.mockDraweeHierarchy();
mDraweeView.setHierarchy(hierarchy2);
assertSame(hierarchy2, mDraweeView.getHierarchy());
assertSame(hierarchy2.getTopLevelDrawable(), mDraweeView.getDrawable());
}
@Test
public void testSetController() {
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.setController(mController);
assertSame(mController, mDraweeView.getController());
assertSame(mTopLevelDrawable, mDraweeView.getDrawable());
verify(mController).setHierarchy(mDraweeHierarchy);
}
@Test
public void testClearControllerKeepsHierarchy() {
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.setController(mController);
mDraweeView.setController(null);
assertNull(mDraweeView.getController());
assertSame(mTopLevelDrawable, mDraweeView.getDrawable());
verify(mController).setHierarchy(null);
}
@Test
public void testNewControllerKeepsHierarchy() {
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.setController(mController);
DraweeController controller2 = DraweeMocks.mockController();
mDraweeView.setController(controller2);
assertSame(controller2, mDraweeView.getController());
assertSame(mTopLevelDrawable, mDraweeView.getDrawable());
verify(mController).setHierarchy(null);
verify(controller2).setHierarchy(mDraweeHierarchy);
}
@Test
public void testSetDrawable() {
mDraweeView.setImageDrawable(mDrawable);
assertSame(mDrawable, mDraweeView.getDrawable());
assertNull(mDraweeView.getController());
}
@Test
public void testSetDrawableAfterController() {
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.onAttachedToWindow();
mDraweeView.setController(mController);
mDraweeView.setImageDrawable(mDrawable);
assertNull(mDraweeView.getController());
assertSame(mDrawable, mDraweeView.getDrawable());
}
@Test
public void testSetControllerAfterDrawable() {
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.onAttachedToWindow();
mDraweeView.setImageDrawable(mDrawable);
mDraweeView.setController(mController);
assertSame(mController, mDraweeView.getController());
assertSame(mTopLevelDrawable, mDraweeView.getDrawable());
}
@Test
public void testLifecycle_Controller() {
InOrder inOrder = inOrder(mController);
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.setController(mController);
inOrder.verify(mController).setHierarchy(mDraweeHierarchy);
mDraweeView.onAttachedToWindow();
inOrder.verify(mController).onAttach();
mDraweeView.onStartTemporaryDetach();
inOrder.verify(mController).onDetach();
mDraweeView.onFinishTemporaryDetach();
inOrder.verify(mController).onAttach();
mDraweeView.onDetachedFromWindow();
inOrder.verify(mController).onDetach();
}
@Test
public void testLifecycle_ControllerSetWhileAttached() {
InOrder inOrder = inOrder(mController);
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.onAttachedToWindow();
mDraweeView.setController(mController);
inOrder.verify(mController).setHierarchy(mDraweeHierarchy);
inOrder.verify(mController).onAttach();
mDraweeView.onDetachedFromWindow();
inOrder.verify(mController).onDetach();
}
@Test
public void testLifecycle_NullController() {
mDraweeView.setHierarchy(mDraweeHierarchy);
mDraweeView.setController(null);
mDraweeView.onStartTemporaryDetach();
mDraweeView.onFinishTemporaryDetach();
}
@Test
public void testLifecycle_Drawable() {
mDraweeView.setImageDrawable(mDrawable);
mDraweeView.onStartTemporaryDetach();
mDraweeView.onFinishTemporaryDetach();
}
}