-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reviewed By: oprisnik Differential Revision: D24799754 fbshipit-source-id: b5a094c3fce11ab13c04e1bdc8868341b47e51e3
- Loading branch information
1 parent
29c0ff1
commit 9aa485d
Showing
4 changed files
with
252 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
218 changes: 218 additions & 0 deletions
218
drawee/src/test/java/com/facebook/drawee/drawable/FadeDrawableOnFadeListenerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,218 @@ | ||
/* | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
package com.facebook.drawee.drawable; | ||
|
||
import static org.mockito.Mockito.mock; | ||
import static org.mockito.Mockito.never; | ||
import static org.mockito.Mockito.times; | ||
import static org.mockito.Mockito.verify; | ||
import static org.mockito.Mockito.verifyNoMoreInteractions; | ||
|
||
import android.graphics.Canvas; | ||
import android.graphics.Rect; | ||
import android.graphics.drawable.Drawable; | ||
import android.os.SystemClock; | ||
import com.facebook.testing.robolectric.v4.WithTestDefaultsRunner; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.powermock.core.classloader.annotations.PrepareForTest; | ||
|
||
/** Tests {@link FadeDrawable.OnFadeListener} */ | ||
@RunWith(WithTestDefaultsRunner.class) | ||
@PrepareForTest({ | ||
// SystemClock.class, | ||
Rect.class, | ||
}) | ||
public class FadeDrawableOnFadeListenerTest { | ||
|
||
public static final int DURATION = 1000; | ||
public static final int ACTUAL_LAYER_INDEX = 1; | ||
public static final int OTHER_LAYER_INDEX = 2; | ||
|
||
private Drawable[] mLayers = | ||
new Drawable[] { | ||
DrawableTestUtils.mockDrawable(), | ||
DrawableTestUtils.mockDrawable(), | ||
DrawableTestUtils.mockDrawable(), | ||
}; | ||
|
||
private FadeDrawable mFadeDrawable; | ||
private FadeDrawable.OnFadeListener mOnFadeListener = mock(FadeDrawable.OnFadeListener.class); | ||
|
||
private Canvas mCanvas = mock(Canvas.class); | ||
|
||
@Before | ||
public void setUp() { | ||
// PowerMockito.mockStatic(SystemClock.class); | ||
mFadeDrawable = new FadeDrawable(mLayers, false, 1); | ||
mFadeDrawable.setTransitionDuration(DURATION); | ||
mFadeDrawable.setOnFadeListener(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testSimple() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeStarted(); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.5)); | ||
mFadeDrawable.draw(mCanvas); | ||
mFadeDrawable.draw(mCanvas); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, never()).onFadeFinished(); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.5)); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testComplex() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.fadeOutLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeStarted(); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.5)); | ||
mFadeDrawable.draw(mCanvas); | ||
mFadeDrawable.draw(mCanvas); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, never()).onFadeFinished(); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.1)); | ||
// mFadeDrawable.fadeInAllLayers(); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testFinishImmediately() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeStarted(); | ||
|
||
mFadeDrawable.finishTransitionImmediately(); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testFadeInAll() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
mFadeDrawable.fadeInAllLayers(); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeStarted(); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.1)); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testFadeTheOtherLayer() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
mFadeDrawable.fadeInLayer(OTHER_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.1)); | ||
mFadeDrawable.draw(mCanvas); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testFadeOut() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
mFadeDrawable.fadeInAllLayers(); | ||
// Notice we finish immediately before the draw call: | ||
mFadeDrawable.finishTransitionImmediately(); | ||
mFadeDrawable.draw(mCanvas); | ||
|
||
mFadeDrawable.fadeOutLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.1)); | ||
mFadeDrawable.draw(mCanvas); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testFadeOut2() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
mFadeDrawable.fadeInAllLayers(); | ||
// Notice we call draw before finishing immediately | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeStarted(); | ||
mFadeDrawable.finishTransitionImmediately(); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
|
||
@Test | ||
public void testMultipleFades() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeStarted(); | ||
|
||
mFadeDrawable.fadeInLayer(OTHER_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
verifyNoMoreInteractions(mOnFadeListener); | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.2)); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
} | ||
|
||
@Test | ||
public void testLateListener() { | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.1)); | ||
|
||
// No listener set: | ||
mFadeDrawable.setOnFadeListener(null); | ||
|
||
mFadeDrawable.fadeInLayer(ACTUAL_LAYER_INDEX); | ||
mFadeDrawable.draw(mCanvas); | ||
SystemClock.setCurrentTimeMillis((long) (DURATION * 0.5)); | ||
mFadeDrawable.draw(mCanvas); | ||
mFadeDrawable.draw(mCanvas); | ||
mFadeDrawable.draw(mCanvas); | ||
|
||
// Set the listener back | ||
mFadeDrawable.setOnFadeListener(mOnFadeListener); | ||
|
||
SystemClock.setCurrentTimeMillis((long) (DURATION * 1.5)); | ||
mFadeDrawable.draw(mCanvas); | ||
verify(mOnFadeListener, times(1)).onFadeFinished(); | ||
|
||
verifyNoMoreInteractions(mOnFadeListener); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters