Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/widget/ToolbarProgressBarTest.java

Issue 1245333002: [Andorid] Migrate to ClipDrawable progress bar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix flaky Chrome shell tests. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.widget; 5 package org.chromium.chrome.browser.widget;
6 6
7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_PHONE; 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_PHONE;
8 8
9 import android.animation.Animator;
10 import android.animation.Animator.AnimatorListener;
9 import android.test.suitebuilder.annotation.MediumTest; 11 import android.test.suitebuilder.annotation.MediumTest;
12 import android.view.View;
10 13
11 import org.chromium.base.ThreadUtils; 14 import org.chromium.base.ThreadUtils;
15 import org.chromium.base.annotations.SuppressFBWarnings;
12 import org.chromium.base.test.util.Feature; 16 import org.chromium.base.test.util.Feature;
13 import org.chromium.base.test.util.Restriction; 17 import org.chromium.base.test.util.Restriction;
14 import org.chromium.chrome.R; 18 import org.chromium.chrome.R;
15 import org.chromium.chrome.browser.ChromeActivity; 19 import org.chromium.chrome.browser.ChromeActivity;
16 import org.chromium.chrome.test.ChromeActivityTestCaseBase; 20 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
17 import org.chromium.content.browser.test.util.Criteria;
18 import org.chromium.content.browser.test.util.CriteriaHelper;
19 21
20 import java.util.concurrent.atomic.AtomicReference; 22 import java.util.concurrent.atomic.AtomicReference;
21 23
22 /** 24 /**
23 * Tests related to the ToolbarProgressBar. 25 * Tests related to the ToolbarProgressBar.
24 */ 26 */
25 public class ToolbarProgressBarTest extends ChromeActivityTestCaseBase<ChromeAct ivity> { 27 public class ToolbarProgressBarTest extends ChromeActivityTestCaseBase<ChromeAct ivity> {
26 28
27 public ToolbarProgressBarTest() { 29 public ToolbarProgressBarTest() {
28 super(ChromeActivity.class); 30 super(ChromeActivity.class);
29 } 31 }
30 32
31 @Override 33 @Override
32 public void startMainActivity() throws InterruptedException { 34 public void startMainActivity() throws InterruptedException {
33 startMainActivityOnBlankPage(); 35 startMainActivityOnBlankPage();
34 } 36 }
35 37
36 /** 38 /**
37 * Test that calling progressBar.setProgress(# > 0) followed by progressBar. setProgress(0) 39 * Test that calling progressBar.setProgress(# > 0) followed by progressBar. setProgress(0)
38 * results in a hidden progress bar (the secondary progress needs to be 0). 40 * results in a hidden progress bar.
39 * @throws InterruptedException 41 * @throws InterruptedException
40 */ 42 */
41 @Feature({"Android-Toolbar"}) 43 @Feature({"Android-Toolbar"})
42 @MediumTest 44 @MediumTest
43 @Restriction(RESTRICTION_TYPE_PHONE) 45 @Restriction(RESTRICTION_TYPE_PHONE)
46 @SuppressFBWarnings({"WA_NOT_IN_LOOP", "UW_UNCOND_WAIT"})
44 public void testProgressBarDisappearsAfterFastShowHide() throws InterruptedE xception { 47 public void testProgressBarDisappearsAfterFastShowHide() throws InterruptedE xception {
48 // onAnimationEnd will be signaled on progress bar showing/hiding animat ion end.
49 final Object onAnimationEnd = new Object();
45 final AtomicReference<ToolbarProgressBar> progressBar = 50 final AtomicReference<ToolbarProgressBar> progressBar =
46 new AtomicReference<ToolbarProgressBar>(); 51 new AtomicReference<ToolbarProgressBar>();
47 ThreadUtils.runOnUiThread(new Runnable() { 52 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
48 @Override 53 @Override
49 public void run() { 54 public void run() {
50 progressBar.set((ToolbarProgressBar) getActivity().findViewById( R.id.progress)); 55 progressBar.set((ToolbarProgressBar) getActivity().findViewById( R.id.progress));
56 progressBar.get().setAlphaAnimationDuration(10);
57 progressBar.get().setHidingDelay(10);
58 progressBar.get().animate().setListener(new AnimatorListener() {
59 @Override
60 public void onAnimationStart(Animator animation) {
61 }
62
63 @Override
64 public void onAnimationRepeat(Animator animation) {
65 }
66
67 @Override
68 public void onAnimationEnd(Animator animation) {
69 synchronized (onAnimationEnd) {
70 onAnimationEnd.notify();
71 }
72 }
73
74 @Override
75 public void onAnimationCancel(Animator animation) {
76 }
77 });
51 } 78 }
52 }); 79 });
53 80
54 // Wait for the progress bar to be reset. 81 // Before the actual test, ensure that the progress bar is hidden.
55 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 82 assertNotSame(View.VISIBLE, progressBar.get().getVisibility());
56 @Override
57 public boolean isSatisfied() {
58 return progressBar.get().getProgress() == 0;
59 }
60 });
61 83
62 ThreadUtils.runOnUiThread(new Runnable() { 84 // Make some progress and check that the progress bar is fully visible.
63 @Override 85 synchronized (onAnimationEnd) {
64 public void run() { 86 ThreadUtils.runOnUiThread(new Runnable() {
65 assertEquals("Progress bar should be hidden to start.", 0, 87 @Override
66 progressBar.get().getProgress()); 88 public void run() {
67 progressBar.get().setProgress(10); 89 progressBar.get().start();
68 assertTrue("Progress bar did not start animating", 90 progressBar.get().setProgress(0.5f);
69 progressBar.get().isAnimatingForShowOrHide()); 91 }
70 progressBar.get().setProgress(0); 92 });
71 }
72 });
73 93
74 // Wait for the progress bar to finish any and all animations. 94 onAnimationEnd.wait();
75 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 95 assertEquals(1.0f, progressBar.get().getAlpha());
76 @Override 96 assertEquals(View.VISIBLE, progressBar.get().getVisibility());
77 public boolean isSatisfied() { 97 }
78 return !progressBar.get().isAnimatingForShowOrHide();
79 }
80 });
81 98
82 ThreadUtils.runOnUiThread(new Runnable() { 99 // Clear progress and check that the progress bar is hidden.
83 @Override 100 synchronized (onAnimationEnd) {
84 public void run() { 101 ThreadUtils.runOnUiThread(new Runnable() {
85 // The secondary progress should be gone. 102 @Override
86 assertEquals("Progress bar background still visible.", 0, 103 public void run() {
87 progressBar.get().getSecondaryProgress()); 104 progressBar.get().finish(true);
88 } 105 }
89 }); 106 });
107
108 onAnimationEnd.wait();
109 assertEquals(0.0f, progressBar.get().getAlpha());
110 assertNotSame(View.VISIBLE, progressBar.get().getVisibility());
111 }
90 } 112 }
91 } 113 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698