1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.support.v7.media;
18
19import static org.junit.Assert.assertEquals;
20import static org.junit.Assert.assertTrue;
21
22import android.os.Bundle;
23import android.support.test.filters.SmallTest;
24import android.support.test.runner.AndroidJUnit4;
25
26import org.junit.Test;
27import org.junit.runner.RunWith;
28
29import java.util.ArrayList;
30import java.util.List;
31
32/**
33 * Test {@link MediaRouteProvider} and its related classes.
34 */
35@RunWith(AndroidJUnit4.class)
36public class MediaRouteProviderTest {
37    private static final String FAKE_MEDIA_ROUTE_ID_1 = "fakeMediaRouteId1";
38    private static final String FAKE_MEDIA_ROUTE_ID_2 = "fakeMediaRouteId2";
39    private static final String FAKE_MEDIA_ROUTE_ID_3 = "fakeMediaRouteId3";
40    private static final String FAKE_MEDIA_ROUTE_ID_4 = "fakeMediaRouteId4";
41    private static final String FAKE_MEDIA_ROUTE_NAME_1 = "fakeMediaRouteName1";
42    private static final String FAKE_MEDIA_ROUTE_NAME_2 = "fakeMediaRouteName2";
43    private static final String FAKE_MEDIA_ROUTE_NAME_3 = "fakeMediaRouteName3";
44    private static final String FAKE_MEDIA_ROUTE_NAME_4 = "fakeMediaRouteName4";
45
46    @Test
47    @SmallTest
48    public void testDescriptorBuilder() {
49        // Tests for empty descriptor
50        MediaRouteProviderDescriptor.Builder builder = new MediaRouteProviderDescriptor.Builder();
51        MediaRouteProviderDescriptor descriptor = builder.build();
52        assertTrue(descriptor.getRoutes().isEmpty());
53
54        // Tests for addRoute()
55        builder.addRoute(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_1,
56                FAKE_MEDIA_ROUTE_NAME_1).build());
57        builder.addRoute(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_2,
58                FAKE_MEDIA_ROUTE_NAME_2).build());
59        descriptor = builder.build();
60        List<MediaRouteDescriptor> routes = descriptor.getRoutes();
61        assertEquals(2, routes.size());
62        assertEquals(FAKE_MEDIA_ROUTE_ID_1, routes.get(0).getId());
63        assertEquals(FAKE_MEDIA_ROUTE_NAME_1, routes.get(0).getName());
64        assertEquals(FAKE_MEDIA_ROUTE_ID_2, routes.get(1).getId());
65        assertEquals(FAKE_MEDIA_ROUTE_NAME_2, routes.get(1).getName());
66
67        // Tests for addRoutes()
68        List<MediaRouteDescriptor> otherRoutes = new ArrayList<>();
69        otherRoutes.add(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_3,
70                FAKE_MEDIA_ROUTE_NAME_3).build());
71        otherRoutes.add(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_4,
72                FAKE_MEDIA_ROUTE_NAME_4).build());
73        builder.addRoutes(otherRoutes);
74        descriptor = builder.build();
75        routes = descriptor.getRoutes();
76        assertEquals(4, routes.size());
77        assertEquals(FAKE_MEDIA_ROUTE_ID_1, routes.get(0).getId());
78        assertEquals(FAKE_MEDIA_ROUTE_NAME_1, routes.get(0).getName());
79        assertEquals(FAKE_MEDIA_ROUTE_ID_2, routes.get(1).getId());
80        assertEquals(FAKE_MEDIA_ROUTE_NAME_2, routes.get(1).getName());
81        assertEquals(FAKE_MEDIA_ROUTE_ID_3, routes.get(2).getId());
82        assertEquals(FAKE_MEDIA_ROUTE_NAME_3, routes.get(2).getName());
83        assertEquals(FAKE_MEDIA_ROUTE_ID_4, routes.get(3).getId());
84        assertEquals(FAKE_MEDIA_ROUTE_NAME_4, routes.get(3).getName());
85
86        // Tests for setRoutes()
87        builder.setRoutes(otherRoutes);
88        descriptor = builder.build();
89        routes = descriptor.getRoutes();
90        assertEquals(2, routes.size());
91        assertEquals(FAKE_MEDIA_ROUTE_ID_3, routes.get(0).getId());
92        assertEquals(FAKE_MEDIA_ROUTE_NAME_3, routes.get(0).getName());
93        assertEquals(FAKE_MEDIA_ROUTE_ID_4, routes.get(1).getId());
94        assertEquals(FAKE_MEDIA_ROUTE_NAME_4, routes.get(1).getName());
95
96        // Tests setRoutes() for side effects
97        otherRoutes.add(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_1,
98                FAKE_MEDIA_ROUTE_NAME_1).build());
99        descriptor = builder.build();
100        routes = descriptor.getRoutes();
101        assertEquals(2, routes.size());
102        assertEquals(FAKE_MEDIA_ROUTE_ID_3, routes.get(0).getId());
103        assertEquals(FAKE_MEDIA_ROUTE_NAME_3, routes.get(0).getName());
104        assertEquals(FAKE_MEDIA_ROUTE_ID_4, routes.get(1).getId());
105        assertEquals(FAKE_MEDIA_ROUTE_NAME_4, routes.get(1).getName());
106
107        // Tests setRoutes against null
108        builder.setRoutes(null);
109        descriptor = builder.build();
110        assertTrue(descriptor.getRoutes().isEmpty());
111    }
112
113    @Test
114    @SmallTest
115    public void testCreateDescriptorBundleForClient() {
116        MediaRouteProviderDescriptor.Builder builder = new MediaRouteProviderDescriptor.Builder();
117        builder.addRoute(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_1,
118                FAKE_MEDIA_ROUTE_NAME_1).setMaxClientVersion(15).setMinClientVersion(10).build());
119        builder.addRoute(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_2,
120                FAKE_MEDIA_ROUTE_NAME_2).setMaxClientVersion(18).setMinClientVersion(11).build());
121        builder.addRoute(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_3,
122                FAKE_MEDIA_ROUTE_NAME_3).setMaxClientVersion(25).setMinClientVersion(16).build());
123        builder.addRoute(new MediaRouteDescriptor.Builder(FAKE_MEDIA_ROUTE_ID_4,
124                FAKE_MEDIA_ROUTE_NAME_4).setMaxClientVersion(12).setMinClientVersion(4).build());
125        MediaRouteProviderDescriptor descriptor = builder.build();
126
127        Bundle bundle = MediaRouteProviderService
128                .createDescriptorBundleForClientVersion(descriptor, 3);
129        MediaRouteProviderDescriptor resultDescriptor =
130                MediaRouteProviderDescriptor.fromBundle(bundle);
131        assertTrue(resultDescriptor.getRoutes().isEmpty());
132
133        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 4);
134        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
135        List<MediaRouteDescriptor> routes = resultDescriptor.getRoutes();
136        assertEquals(1, routes.size());
137        assertEquals(FAKE_MEDIA_ROUTE_ID_4, routes.get(0).getId());
138        assertEquals(FAKE_MEDIA_ROUTE_NAME_4, routes.get(0).getName());
139
140        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 10);
141        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
142        routes = resultDescriptor.getRoutes();
143        assertEquals(2, routes.size());
144        assertEquals(FAKE_MEDIA_ROUTE_ID_1, routes.get(0).getId());
145        assertEquals(FAKE_MEDIA_ROUTE_NAME_1, routes.get(0).getName());
146        assertEquals(FAKE_MEDIA_ROUTE_ID_4, routes.get(1).getId());
147        assertEquals(FAKE_MEDIA_ROUTE_NAME_4, routes.get(1).getName());
148
149        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 12);
150        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
151        routes = resultDescriptor.getRoutes();
152        assertEquals(3, routes.size());
153        assertEquals(FAKE_MEDIA_ROUTE_ID_1, routes.get(0).getId());
154        assertEquals(FAKE_MEDIA_ROUTE_NAME_1, routes.get(0).getName());
155        assertEquals(FAKE_MEDIA_ROUTE_ID_2, routes.get(1).getId());
156        assertEquals(FAKE_MEDIA_ROUTE_NAME_2, routes.get(1).getName());
157        assertEquals(FAKE_MEDIA_ROUTE_ID_4, routes.get(2).getId());
158        assertEquals(FAKE_MEDIA_ROUTE_NAME_4, routes.get(2).getName());
159
160        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 15);
161        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
162        routes = resultDescriptor.getRoutes();
163        assertEquals(2, routes.size());
164        assertEquals(FAKE_MEDIA_ROUTE_ID_1, routes.get(0).getId());
165        assertEquals(FAKE_MEDIA_ROUTE_NAME_1, routes.get(0).getName());
166        assertEquals(FAKE_MEDIA_ROUTE_ID_2, routes.get(1).getId());
167        assertEquals(FAKE_MEDIA_ROUTE_NAME_2, routes.get(1).getName());
168
169        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 16);
170        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
171        routes = resultDescriptor.getRoutes();
172        assertEquals(2, routes.size());
173        assertEquals(FAKE_MEDIA_ROUTE_ID_2, routes.get(0).getId());
174        assertEquals(FAKE_MEDIA_ROUTE_NAME_2, routes.get(0).getName());
175        assertEquals(FAKE_MEDIA_ROUTE_ID_3, routes.get(1).getId());
176        assertEquals(FAKE_MEDIA_ROUTE_NAME_3, routes.get(1).getName());
177
178        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 19);
179        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
180        routes = resultDescriptor.getRoutes();
181        assertEquals(1, routes.size());
182        assertEquals(FAKE_MEDIA_ROUTE_ID_3, routes.get(0).getId());
183        assertEquals(FAKE_MEDIA_ROUTE_NAME_3, routes.get(0).getName());
184
185        bundle = MediaRouteProviderService.createDescriptorBundleForClientVersion(descriptor, 26);
186        resultDescriptor = MediaRouteProviderDescriptor.fromBundle(bundle);
187        assertTrue(resultDescriptor.getRoutes().isEmpty());
188    }
189}
190