blob: b91070bc5d491f7b0d99f157d4230d018850c5d9 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* 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.android.connecteddevice.service;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class MetaDataServiceTest {
private static final String CORRECT_NAME = "CorrectMetaDataKey";
private static final int RESOURCE_ID = 1;
private static final String INVALID_NAME = "InvalidMetaDataKey";
private static final String META_STRING = "Some meta-data string.";
private static final boolean META_BOOLEAN = true;
private static final int META_INT = 1;
private static final float META_FLOAT = 2.0f;
private static final String[] META_STRING_ARRAY = new String[] { "test1", "test2" };
private final Context context = ApplicationProvider.getApplicationContext();
private final MetaDataService metaDataService = new MetaDataService() {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public Resources getResources() {
return new Resources(
context.getResources().getAssets(),
context.getResources().getDisplayMetrics(),
context.getResources().getConfiguration()) {
@NonNull
@Override
public String getString(int id) {
if (id == RESOURCE_ID) {
return META_STRING;
}
throw new NotFoundException();
}
@Override
public int getInteger(int id) {
if (id == RESOURCE_ID) {
return META_INT;
}
throw new NotFoundException();
}
@Override
public float getFloat(int id) {
if (id == RESOURCE_ID) {
return META_FLOAT;
}
throw new NotFoundException();
}
@Override
public boolean getBoolean(int id) {
if (id == RESOURCE_ID) {
return META_BOOLEAN;
}
throw new NotFoundException();
}
@NonNull
@Override
public String[] getStringArray(int id) {
if (id == RESOURCE_ID) {
return META_STRING_ARRAY;
}
throw new NotFoundException();
}
};
}
};
@Before
public void setUp() {
metaDataService.bundle = new Bundle();
metaDataService.bundle.putInt(CORRECT_NAME, RESOURCE_ID);
}
@Test
public void getMetaString_returnsValueIfInBundle() {
assertThat(metaDataService.getMetaString(CORRECT_NAME, /* defaultValue= */ null))
.isEqualTo(META_STRING);
}
@Test
public void getMetaString_returnsDefaultValueIfNameNotInBundle() {
String defaultString = "A default string.";
assertThat(metaDataService.getMetaString(INVALID_NAME, defaultString))
.isEqualTo(defaultString);
}
@Test
public void getMetaBoolean_returnsValueIfInBundle() {
assertThat(metaDataService.getMetaBoolean(CORRECT_NAME, /* defaultValue= */ !META_BOOLEAN))
.isEqualTo(META_BOOLEAN);
}
@Test
public void getMetaBoolean_returnsDefaultValueIfNameNotInBundle() {
assertThat(metaDataService.getMetaBoolean(INVALID_NAME, /* defaultValue= */ false)).isFalse();
}
@Test
public void getMetaInt_returnsValueIfInBundle() {
assertThat(metaDataService.getMetaInt(CORRECT_NAME, /* defaultValue= */ 0)).isEqualTo(META_INT);
}
@Test
public void getMetaInt_returnsDefaultValueIfNameNotInBundle() {
int defaultValue = -1;
assertThat(metaDataService.getMetaInt(INVALID_NAME, defaultValue)).isEqualTo(defaultValue);
}
@Test
public void getMetaFloat_returnsValueIfInBundle() {
assertThat(metaDataService.getMetaFloat(CORRECT_NAME, /* defaultValue= */ 0.0f))
.isEqualTo(META_FLOAT);
}
@Test
public void getMetaFloat_returnsDefaultValueIfNameNotInBundle() {
float defaultValue = -1.0f;
assertThat(metaDataService.getMetaFloat(INVALID_NAME, defaultValue)).isEqualTo(defaultValue);
}
@Test
public void getMetaStringArray_returnsValueIfInBundle() {
assertThat(metaDataService.getMetaStringArray(CORRECT_NAME, null))
.asList()
.containsExactlyElementsIn(META_STRING_ARRAY);
}
@Test
public void getMetaStringArray_returnsDefaultValueIfNameNotInBundle() {
assertThat(metaDataService.getMetaStringArray(INVALID_NAME, null)).isNull();
}
@Test
public void getMetaResourceId_returnsValueIfInBundle() {
assertThat(metaDataService.getMetaInt(CORRECT_NAME, /* defaultValue= */ 0))
.isEqualTo(RESOURCE_ID);
}
@Test
public void getMetaResource_returnsDefaultValueIfNameNotInBundle() {
int defaultValue = -1;
assertThat(metaDataService.getMetaResourceId(INVALID_NAME, defaultValue))
.isEqualTo(defaultValue);
}
@Test
public void requireMetaString_returnsValueIfInBundle() {
assertThat(metaDataService.requireMetaString(CORRECT_NAME)).isEqualTo(META_STRING);
}
@Test
public void requireMetaBoolean_returnsValueIfInBundle() {
assertThat(metaDataService.requireMetaBoolean(CORRECT_NAME)).isEqualTo(META_BOOLEAN);
}
@Test
public void requireMetaInt_returnsValueIfInBundle() {
assertThat(metaDataService.requireMetaInt(CORRECT_NAME)).isEqualTo(META_INT);
}
@Test
public void requireMetaFloat_returnsValueIfInBundle() {
assertThat(metaDataService.requireMetaFloat(CORRECT_NAME)).isEqualTo(META_FLOAT);
}
@Test
public void requireMetaStringArray_returnsValueIfInBundle() {
assertThat(metaDataService.requireMetaStringArray(CORRECT_NAME))
.asList()
.containsExactlyElementsIn(META_STRING_ARRAY);
}
@Test
public void requireMetaResourceId_returnsValueIfInBundle() {
assertThat(metaDataService.requireMetaInt(CORRECT_NAME)).isEqualTo(RESOURCE_ID);
}
@Test
public void requireMetaString_throwsIfNameNotInBundle() {
assertThrows(
IllegalArgumentException.class,
() -> metaDataService.requireMetaString(INVALID_NAME));
}
@Test
public void requireMetaBoolean_throwsIfNameNotInBundle() {
assertThrows(
IllegalArgumentException.class,
() -> metaDataService.requireMetaBoolean(INVALID_NAME));
}
@Test
public void requireMetaInt_throwsIfNameNotInBundle() {
assertThrows(
IllegalArgumentException.class,
() -> metaDataService.requireMetaInt(INVALID_NAME));
}
@Test
public void requireMetaFloat_throwsIfNameNotInBundle() {
assertThrows(
IllegalArgumentException.class,
() -> metaDataService.requireMetaFloat(INVALID_NAME));
}
@Test
public void requireMetaStringArray_throwsIfNameNotInBundle() {
assertThrows(
IllegalArgumentException.class,
() -> metaDataService.requireMetaStringArray(INVALID_NAME));
}
@Test
public void requireMetaResourceId_throwsIfNameNotInBundle() {
assertThrows(
IllegalArgumentException.class, () -> metaDataService.requireMetaResourceId(INVALID_NAME));
}
}