/*
* 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.drawable;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import com.facebook.testing.robolectric.v2.WithTestDefaultsRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/**
* Tests for {@link ForwardingDrawable}
*/
@RunWith(WithTestDefaultsRunner.class)
public class DrawableUtilsTest {
private final Rect mBounds = mock(Rect.class);
private final int mChangingConfigurations = 0x12345678;
private final int mLevel = 3;
private final boolean mIsVisible = true;
private final int[] mState = new int[5];
private final Drawable.Callback mCallback = mock(Drawable.Callback.class);
private final TransformCallback mTransformCallback = mock(TransformCallback.class);
@Before
public void setup() {
}
private void testCopyProperties(Drawable drawableFrom, Drawable drawableTo) {
when(drawableFrom.getBounds()).thenReturn(mBounds);
when(drawableFrom.getChangingConfigurations()).thenReturn(mChangingConfigurations);
when(drawableFrom.getLevel()).thenReturn(mLevel);
when(drawableFrom.isVisible()).thenReturn(mIsVisible);
when(drawableFrom.getState()).thenReturn(mState);
DrawableUtils.copyProperties(drawableTo, drawableFrom);
verify(drawableTo).setBounds(mBounds);
verify(drawableTo).setChangingConfigurations(mChangingConfigurations);
verify(drawableTo).setLevel(mLevel);
verify(drawableTo).setVisible(mIsVisible, false);
verify(drawableTo).setState(mState);
}
@Test
public void testCopyProperties() {
testCopyProperties(mock(Drawable.class), mock(Drawable.class));
}
@Test
public void testSetDrawableProperties() {
DrawableProperties properties = mock(DrawableProperties.class);
ColorFilter colorFilter = mock(ColorFilter.class);
when(properties.getAlpha()).thenReturn(42);
when(properties.getColorFilter()).thenReturn(colorFilter);
when(properties.isDither()).thenReturn(true);
when(properties.isFilterBitmap()).thenReturn(true);
Drawable drawableTo = mock(Drawable.class);
DrawableUtils.setDrawableProperties(drawableTo, properties);
verify(drawableTo).setAlpha(42);
verify(drawableTo).setColorFilter(colorFilter);
verify(drawableTo).setDither(true);
verify(drawableTo).setFilterBitmap(true);
}
@Test
public void testCopyProperties_Null() {
Drawable drawableFrom = mock(Drawable.class);
Drawable drawableTo = mock(Drawable.class);
DrawableUtils.copyProperties(null, drawableFrom);
DrawableUtils.copyProperties(drawableTo, null);
verifyNoMoreInteractions(drawableTo, drawableFrom);
}
@Test
public void testCopyProperties_Same() {
Drawable drawable = mock(Drawable.class);
DrawableUtils.copyProperties(drawable, drawable);
verifyNoMoreInteractions(drawable);
}
@Test
public void testSetCallbacks() {
Drawable drawable = mock(Drawable.class);
DrawableUtils.setCallbacks(drawable, mCallback, mTransformCallback);
verify(drawable).setCallback(mCallback);
}
@Test
public void testSetCallbacks_TransformAwareDrawable() {
ForwardingDrawable transformAwareDrawable = mock(ForwardingDrawable.class);
DrawableUtils.setCallbacks(transformAwareDrawable, mCallback, mTransformCallback);
verify(transformAwareDrawable).setCallback(mCallback);
verify(transformAwareDrawable).setTransformCallback(mTransformCallback);
}
@Test
public void testSetCallbacks_NullCallback() {
Drawable drawable = mock(Drawable.class);
DrawableUtils.setCallbacks(drawable, null, null);
verify(drawable).setCallback(null);
}
@Test
public void testSetCallbacks_TransformAwareDrawable_NullCallback() {
ForwardingDrawable transformAwareDrawable = mock(ForwardingDrawable.class);
DrawableUtils.setCallbacks(transformAwareDrawable, null, null);
verify(transformAwareDrawable).setCallback(null);
verify(transformAwareDrawable).setTransformCallback(null);
}
@Test
public void testSetCallbacks_NullDrawable() {
DrawableUtils.setCallbacks(null, mCallback, mTransformCallback);
}
@Test
public void testMultiplyColorAlpha() {
assertEquals(0x00123456, DrawableUtils.multiplyColorAlpha(0xC0123456, 0));
assertEquals(0x07123456, DrawableUtils.multiplyColorAlpha(0xC0123456, 10));
assertEquals(0x96123456, DrawableUtils.multiplyColorAlpha(0xC0123456, 200));
assertEquals(0xC0123456, DrawableUtils.multiplyColorAlpha(0xC0123456, 255));
}
@Test
public void testGetOpacityFromColor() {
assertEquals(PixelFormat.TRANSPARENT, DrawableUtils.getOpacityFromColor(0x00000000));
assertEquals(PixelFormat.TRANSPARENT, DrawableUtils.getOpacityFromColor(0x00123456));
assertEquals(PixelFormat.TRANSPARENT, DrawableUtils.getOpacityFromColor(0x00FFFFFF));
assertEquals(PixelFormat.TRANSLUCENT, DrawableUtils.getOpacityFromColor(0xC0000000));
assertEquals(PixelFormat.TRANSLUCENT, DrawableUtils.getOpacityFromColor(0xC0123456));
assertEquals(PixelFormat.TRANSLUCENT, DrawableUtils.getOpacityFromColor(0xC0FFFFFF));
assertEquals(PixelFormat.OPAQUE, DrawableUtils.getOpacityFromColor(0xFF000000));
assertEquals(PixelFormat.OPAQUE, DrawableUtils.getOpacityFromColor(0xFF123456));
assertEquals(PixelFormat.OPAQUE, DrawableUtils.getOpacityFromColor(0xFFFFFFFF));
}
}