/*
* 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.testing;
import android.graphics.drawable.Drawable;
import com.facebook.common.internal.Supplier;
import com.facebook.drawee.drawable.DrawableTestUtils;
import com.facebook.drawee.drawable.VisibilityAwareDrawable;
import com.facebook.drawee.drawable.VisibilityCallback;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
@RunWith(WithTestDefaultsRunner.class)
public class DraweeMocksTest {
@Before
public void setUp() {
}
@Test
public void testMockProviderOf() {
Object obj = mock(Object.class);
Supplier<Object> provider =
DraweeMocks.supplierOf(obj);
assertEquals(obj, provider.get());
assertEquals(obj, provider.get());
assertEquals(obj, provider.get());
assertEquals(obj, provider.get());
assertEquals(obj, provider.get());
Object obj1 = mock(Object.class);
Object obj2 = mock(Object.class);
Object obj3 = mock(Object.class);
Supplier<Object> multiProvider =
DraweeMocks.supplierOf(obj1, obj2, obj3);
assertEquals(obj1, multiProvider.get());
assertEquals(obj2, multiProvider.get());
assertEquals(obj3, multiProvider.get());
assertEquals(obj3, multiProvider.get());
assertEquals(obj3, multiProvider.get());
}
@Test
public void testMockBuilderOfDrawableHierarchies() {
GenericDraweeHierarchy gdh = DraweeMocks.mockDraweeHierarchy();
GenericDraweeHierarchyBuilder builder =
DraweeMocks.mockBuilderOf(gdh);
assertEquals(gdh, builder.build());
assertEquals(gdh, builder.build());
assertEquals(gdh, builder.build());
assertEquals(gdh, builder.build());
assertEquals(gdh, builder.build());
GenericDraweeHierarchy gdh1 = DraweeMocks.mockDraweeHierarchy();
GenericDraweeHierarchy gdh2 = DraweeMocks.mockDraweeHierarchy();
GenericDraweeHierarchy gdh3 = DraweeMocks.mockDraweeHierarchy();
GenericDraweeHierarchyBuilder multiBuilder =
DraweeMocks.mockBuilderOf(gdh1, gdh2, gdh3);
assertEquals(gdh1, multiBuilder.build());
assertEquals(gdh2, multiBuilder.build());
assertEquals(gdh3, multiBuilder.build());
assertEquals(gdh3, multiBuilder.build());
assertEquals(gdh3, multiBuilder.build());
}
@Test
public void testMockDrawable_VisibilityCallback() {
boolean reset = true;
Drawable drawable = DrawableTestUtils.mockDrawable();
assertTrue(drawable instanceof VisibilityAwareDrawable);
VisibilityAwareDrawable visibilityAwareDrawable = (VisibilityAwareDrawable) drawable;
VisibilityCallback visibilityCallback = mock(VisibilityCallback.class);
visibilityAwareDrawable.setVisibilityCallback(visibilityCallback);
InOrder inOrder = inOrder(visibilityCallback);
drawable.setVisible(false, reset);
inOrder.verify(visibilityCallback).onVisibilityChange(false);
drawable.setVisible(true, reset);
inOrder.verify(visibilityCallback).onVisibilityChange(true);
drawable.setVisible(false, reset);
inOrder.verify(visibilityCallback).onVisibilityChange(false);
}
}