blob: 99c6bcab0f251a8f81df3cc77e96b476c2f89b3b [file] [log] [blame]
Ram Parameswaran619cc5f2020-11-03 21:07:41 -08001/*
2 * Copyright 2020 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 androidx.car.app.navigation.model;
18
19import static androidx.car.app.navigation.model.Maneuver.TYPE_DESTINATION_LEFT;
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080020import static androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW;
21import static androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE;
22import static androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW;
23import static androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE;
Billy Lamd5488f42020-11-23 22:54:47 -080024import static androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_CW;
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080025import static androidx.car.app.navigation.model.Maneuver.TYPE_STRAIGHT;
26
27import static com.google.common.truth.Truth.assertThat;
28
29import static org.junit.Assert.assertThrows;
30
31import android.content.ContentResolver;
32import android.net.Uri;
33
34import androidx.car.app.model.CarIcon;
35import androidx.core.graphics.drawable.IconCompat;
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080036
37import org.junit.Test;
38import org.junit.runner.RunWith;
Ram Parameswaran1384d512020-12-01 22:08:21 -080039import org.robolectric.RobolectricTestRunner;
40import org.robolectric.annotation.internal.DoNotInstrument;
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080041
42/** Tests for {@link Maneuver}. */
Ram Parameswaran1384d512020-12-01 22:08:21 -080043@RunWith(RobolectricTestRunner.class)
44@DoNotInstrument
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080045public class ManeuverTest {
46
47 @Test
48 public void createInstance_non_roundabout() {
49 int type = TYPE_STRAIGHT;
50
Jorge Pereira5dd252d2021-01-07 20:30:13 -080051 Maneuver maneuver = new Maneuver.Builder(type).setIcon(CarIcon.APP_ICON).build();
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080052 assertThat(type).isEqualTo(maneuver.getType());
53 assertThat(CarIcon.APP_ICON).isEqualTo(maneuver.getIcon());
54 }
55
56 @Test
57 public void createInstance_non_roundabout_invalid_type() {
58 int typeHigh = 1000;
59 assertThrows(
60 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -080061 () -> new Maneuver.Builder(typeHigh).setIcon(CarIcon.APP_ICON).build());
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080062
63 int typeLow = -1;
64 assertThrows(
65 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -080066 () -> new Maneuver.Builder(typeLow).setIcon(CarIcon.APP_ICON).build());
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080067 }
68
69 @Test
70 public void createInstance_non_roundabout_roundabout_type() {
71 assertThrows(
72 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -080073 () -> new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW).setIcon(
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080074 CarIcon.APP_ICON).build());
75 assertThrows(
76 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -080077 () -> new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW).setIcon(
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080078 CarIcon.APP_ICON).build());
79 assertThrows(IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -080080 () -> new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080081 .setIcon(CarIcon.APP_ICON)
82 .build());
83 assertThrows(
84 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -080085 () -> new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080086 .setIcon(CarIcon.APP_ICON)
87 .build());
88 }
89
90 @Test
91 public void createInstance_roundabout_only_exit_number() {
92 int type = TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW;
93 int roundaboutExitNumber = 2;
94
95 Maneuver maneuver =
Jorge Pereira5dd252d2021-01-07 20:30:13 -080096 new Maneuver.Builder(type)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -080097 .setRoundaboutExitNumber(roundaboutExitNumber)
98 .setIcon(CarIcon.APP_ICON)
99 .build();
100 assertThat(type).isEqualTo(maneuver.getType());
101 assertThat(roundaboutExitNumber).isEqualTo(maneuver.getRoundaboutExitNumber());
102 assertThat(CarIcon.APP_ICON).isEqualTo(maneuver.getIcon());
103 }
104
105 @Test
106 public void createInstance_roundabout_invalid_type() {
107 int typeHigh = 1000;
108 assertThrows(
109 IllegalArgumentException.class,
110 () ->
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800111 new Maneuver.Builder(typeHigh)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800112 .setRoundaboutExitNumber(1)
113 .setIcon(CarIcon.APP_ICON)
114 .build());
115
116 int typeLow = -1;
117 assertThrows(
118 IllegalArgumentException.class,
119 () ->
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800120 new Maneuver.Builder(typeLow).setRoundaboutExitNumber(1).setIcon(
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800121 CarIcon.APP_ICON).build());
122 }
123
124 @Test
125 public void createInstance_roundabout_non_roundabout_type() {
126 int type = TYPE_STRAIGHT;
127 assertThrows(
128 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800129 () -> new Maneuver.Builder(type).setRoundaboutExitNumber(1).setIcon(
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800130 CarIcon.APP_ICON).build());
131 }
132
133 @Test
134 public void createInstance_roundabout_invalid_exit() {
135 int type = TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW;
136 int roundaboutExitNumber = 0;
137
138 assertThrows(
139 IllegalArgumentException.class,
140 () ->
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800141 new Maneuver.Builder(type)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800142 .setRoundaboutExitNumber(roundaboutExitNumber)
143 .setIcon(CarIcon.APP_ICON)
144 .build());
145 }
146
147 @Test
148 public void createInstance_roundabout_with_angle() {
149 int type = TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE;
150 int roundaboutExitNumber = 3;
151 int roundaboutExitAngle = 270;
152
153 Maneuver maneuver =
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800154 new Maneuver.Builder(type)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800155 .setRoundaboutExitNumber(roundaboutExitNumber)
156 .setRoundaboutExitAngle(roundaboutExitAngle)
157 .setIcon(CarIcon.APP_ICON)
158 .build();
159 assertThat(type).isEqualTo(maneuver.getType());
160 assertThat(roundaboutExitNumber).isEqualTo(maneuver.getRoundaboutExitNumber());
161 assertThat(roundaboutExitAngle).isEqualTo(maneuver.getRoundaboutExitAngle());
162 assertThat(CarIcon.APP_ICON).isEqualTo(maneuver.getIcon());
163 }
164
165 @Test
Billy Lam994257a2022-01-14 16:42:06 -0800166 public void createInstance_roundabout_with_angle_optionalExitNumber() {
167 int type = TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE;
168 int roundaboutExitAngle = 270;
169
170 Maneuver maneuver =
171 new Maneuver.Builder(type)
172 .setRoundaboutExitAngle(roundaboutExitAngle)
173 .setIcon(CarIcon.APP_ICON)
174 .build();
175 assertThat(type).isEqualTo(maneuver.getType());
176 assertThat(roundaboutExitAngle).isEqualTo(maneuver.getRoundaboutExitAngle());
177 assertThat(CarIcon.APP_ICON).isEqualTo(maneuver.getIcon());
178 }
179
180 @Test
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800181 public void createInstance_roundabout_with_angle_invalid_type() {
182 assertThrows(
183 IllegalArgumentException.class,
184 () ->
Billy Lam994257a2022-01-14 16:42:06 -0800185 new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800186 .setRoundaboutExitAngle(1)
187 .setIcon(CarIcon.APP_ICON)
188 .build());
189 assertThrows(
190 IllegalArgumentException.class,
191 () ->
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800192 new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_CW)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800193 .setRoundaboutExitNumber(1)
194 .setRoundaboutExitAngle(1)
195 .setIcon(CarIcon.APP_ICON)
196 .build());
197 assertThrows(
198 IllegalArgumentException.class,
199 () ->
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800200 new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800201 .setRoundaboutExitNumber(1)
202 .setRoundaboutExitAngle(1)
203 .setIcon(CarIcon.APP_ICON)
204 .build());
205 }
206
207 @Test
208 public void createInstance_invalid_carIcon() {
209 Uri.Builder builder = new Uri.Builder();
210 builder.scheme(ContentResolver.SCHEME_CONTENT);
211 builder.appendPath("foo/bar");
212 Uri iconUri = builder.build();
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800213 CarIcon carIcon = new CarIcon.Builder(IconCompat.createWithContentUri(iconUri)).build();
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800214
215 assertThrows(
216 IllegalArgumentException.class,
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800217 () -> new Maneuver.Builder(TYPE_STRAIGHT).setIcon(carIcon).build());
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800218 }
219
220 @Test
221 public void equals() {
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800222 Maneuver maneuver = new Maneuver.Builder(TYPE_STRAIGHT).setIcon(CarIcon.APP_ICON).build();
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800223
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800224 assertThat(new Maneuver.Builder(TYPE_STRAIGHT).setIcon(CarIcon.APP_ICON).build())
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800225 .isEqualTo(maneuver);
226 }
227
228 @Test
229 public void notEquals_differentType() {
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800230 Maneuver maneuver = new Maneuver.Builder(TYPE_DESTINATION_LEFT).setIcon(
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800231 CarIcon.APP_ICON).build();
232
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800233 assertThat(new Maneuver.Builder(TYPE_STRAIGHT).setIcon(CarIcon.APP_ICON).build())
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800234 .isNotEqualTo(maneuver);
235 }
236
237 @Test
238 public void notEquals_differentImage() {
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800239 Maneuver maneuver = new Maneuver.Builder(TYPE_DESTINATION_LEFT).setIcon(
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800240 CarIcon.APP_ICON).build();
241
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800242 assertThat(new Maneuver.Builder(TYPE_DESTINATION_LEFT).setIcon(CarIcon.ALERT).build())
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800243 .isNotEqualTo(maneuver);
244 }
245
246 @Test
247 public void notEquals_differentRoundaboutExit() {
248 Maneuver maneuver =
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800249 new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800250 .setRoundaboutExitNumber(1)
251 .setIcon(CarIcon.APP_ICON)
252 .build();
253
254 assertThat(
Jorge Pereira5dd252d2021-01-07 20:30:13 -0800255 new Maneuver.Builder(TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW)
Ram Parameswaran619cc5f2020-11-03 21:07:41 -0800256 .setRoundaboutExitNumber(2)
257 .setIcon(CarIcon.APP_ICON)
258 .build())
259 .isNotEqualTo(maneuver);
260 }
261}