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