-
Notifications
You must be signed in to change notification settings - Fork 183
/
Copy pathBasicCastUITest.java
183 lines (154 loc) · 6.41 KB
/
BasicCastUITest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
* Copyright 2019 Google LLC. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.sample.cast.refplayer;
import android.content.res.Resources;
import com.google.android.gms.cast.MediaStatus;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.concurrent.TimeUnit;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.Toolbar;
import androidx.mediarouter.app.MediaRouteButton;
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.UiObjectNotFoundException;
import androidx.test.uiautomator.UiSelector;
import androidx.test.uiautomator.Until;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withParent;
import static org.hamcrest.Matchers.allOf;
/**
* To test basic Cast Widgets
*/
@RunWith(AndroidJUnit4ClassRunner.class)
public class BasicCastUITest {
private static Resources resources =
InstrumentationRegistry.getInstrumentation().getTargetContext().getResources();
private static final String VIDEO_TITLE =
resources.getString(R.string.cast_test_video_1);
private static final long SHORT_TIMEOUT_MS =
TimeUnit.SECONDS.toMillis(resources.getInteger(R.integer.cast_test_short_timeout));
private static final long MAX_TIMEOUT_MS =
TimeUnit.SECONDS.toMillis(resources.getInteger(R.integer.cast_test_max_timeout));
private static final String NOTIFICATION_TITLE = "Cast Videos Sample";
private UiDevice mDevice;
private TestUtils mTestUtils = new TestUtils();
@Rule
public ActivityTestRule<VideoBrowserActivity> mActivityRule =
new ActivityTestRule<>(VideoBrowserActivity.class);
@Before
public void initState() {
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
}
/**
* Test the cast icon is visible
*/
@Test
public void testCastButtonDisplay() throws InterruptedException {
// wait for cast button
Thread.sleep(SHORT_TIMEOUT_MS);
onView(isAssignableFrom(MediaRouteButton.class))
.check(matches(isDisplayed()));
}
/**
* Test connecting and disconnecting to Cast device
*/
@Test
public void testCastConnect() throws InterruptedException, UiObjectNotFoundException {
mTestUtils.connectToCastDevice();
mTestUtils.disconnectFromCastDevice();
}
/**
* Test casting video content to receiver app
*/
@Test
public void testCastingVideo() throws InterruptedException, UiObjectNotFoundException {
mTestUtils.connectToCastDevice();
mTestUtils.playCastContent(VIDEO_TITLE);
mTestUtils.disconnectFromCastDevice();
}
/**
* Verify the Expanded Controller is displayed
*/
@Test
public void testExpandedController() throws InterruptedException, UiObjectNotFoundException {
mTestUtils.connectToCastDevice();
mTestUtils.playCastContent(VIDEO_TITLE);
mTestUtils.verifyExpandedController();
mTestUtils.disconnectFromCastDevice();
}
/**
* Verify the Mini Controller is displayed
* Click the Mini Controller and verify the Expanded Controller is displayed
*/
@Test
public void testMiniController() throws InterruptedException, UiObjectNotFoundException {
mTestUtils.connectToCastDevice();
mTestUtils.playCastContent(VIDEO_TITLE);
// click to close expanded controller
onView(allOf(
isAssignableFrom(AppCompatImageButton.class)
, withParent(isAssignableFrom(Toolbar.class))
))
.check(matches(isDisplayed()))
.perform(click());
mTestUtils.verifyMiniController();
mDevice.pressEnter();
onView(withId(R.id.cast_mini_controller))
.perform(click());
mTestUtils.verifyExpandedController();
mTestUtils.disconnectFromCastDevice();
}
/**
* Navigate away from the sender app and open the notification
* Media control should display on notification
* Click the notification widget and verify the Expanded Controller is displayed
*/
@Test
public void testNotification() throws UiObjectNotFoundException, InterruptedException {
mTestUtils.connectToCastDevice();
mTestUtils.playCastContent(VIDEO_TITLE);
mTestUtils.assertPlayerState(MediaStatus.PLAYER_STATE_PLAYING, MAX_TIMEOUT_MS);
mDevice.pressHome();
mDevice.openNotification();
mDevice.wait(Until.hasObject(By.text(NOTIFICATION_TITLE)),MAX_TIMEOUT_MS);
mDevice.findObject(new UiSelector()
.className("android.widget.ImageButton")
.description("Pause"))
.click();
mTestUtils.assertPlayerState(MediaStatus.PLAYER_STATE_PAUSED, MAX_TIMEOUT_MS);
mDevice.findObject(new UiSelector()
.className("android.widget.ImageButton")
.description("Play"))
.click();
mTestUtils.assertPlayerState(MediaStatus.PLAYER_STATE_PLAYING, MAX_TIMEOUT_MS);
mDevice.findObject(By.text(VIDEO_TITLE)).click();
mTestUtils.verifyExpandedController();
mDevice.pressBack();
mDevice.pressEnter();
mTestUtils.disconnectFromCastDevice();
}
}