blob: d66c7fcd78aeb4a97f9787b299cbf66ba3ea2ac8 [file] [log] [blame]
/*
* Copyright (C) 2016 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 android.support.v4.media;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertThat;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.os.Build;
import android.support.test.filters.SdkSuppress;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test {@link AudioAttributesCompat}. */
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AudioAttributesCompatTest {
// some macros for conciseness
static final AudioAttributesCompat.Builder mkBuilder(
@AudioAttributesCompat.AttributeContentType int type,
@AudioAttributesCompat.AttributeUsage int usage) {
return new AudioAttributesCompat.Builder().setContentType(type).setUsage(usage);
}
static final AudioAttributesCompat.Builder mkBuilder(int legacyStream) {
return new AudioAttributesCompat.Builder().setLegacyStreamType(legacyStream);
}
// some objects we'll toss around
Object mMediaAA;
AudioAttributesCompat mMediaAAC,
mMediaLegacyAAC,
mMediaAACFromAA,
mNotificationAAC,
mNotificationLegacyAAC;
@Before
@SdkSuppress(minSdkVersion = 21)
public void setUpApi21() {
if (Build.VERSION.SDK_INT < 21) return;
mMediaAA =
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build();
mMediaAACFromAA = AudioAttributesCompat.wrap((AudioAttributes) mMediaAA);
}
@Before
public void setUp() {
mMediaAAC =
mkBuilder(AudioAttributesCompat.CONTENT_TYPE_MUSIC,
AudioAttributesCompat.USAGE_MEDIA).build();
mMediaLegacyAAC = mkBuilder(AudioManager.STREAM_MUSIC).build();
mNotificationAAC =
mkBuilder(AudioAttributesCompat.CONTENT_TYPE_SONIFICATION,
AudioAttributesCompat.USAGE_NOTIFICATION)
.build();
mNotificationLegacyAAC = mkBuilder(AudioManager.STREAM_NOTIFICATION).build();
}
@Test
@SdkSuppress(minSdkVersion = 21)
public void testCreateWithAudioAttributesApi21() {
assertThat(mMediaAACFromAA, not(equalTo(null)));
assertThat((AudioAttributes) mMediaAACFromAA.unwrap(), equalTo(mMediaAA));
assertThat(
(AudioAttributes) mMediaAACFromAA.unwrap(),
equalTo(new AudioAttributes.Builder((AudioAttributes) mMediaAA).build()));
}
@Test
@SdkSuppress(minSdkVersion = 21)
public void testEqualityApi21() {
assertThat("self equality", mMediaAACFromAA, equalTo(mMediaAACFromAA));
assertThat("different things", mMediaAACFromAA, not(equalTo(mNotificationAAC)));
}
@Test
public void testEquality() {
assertThat("self equality", mMediaAAC, equalTo(mMediaAAC));
assertThat(
"equal to clone",
mMediaAAC,
equalTo(new AudioAttributesCompat.Builder(mMediaAAC).build()));
assertThat("different things are different", mMediaAAC, not(equalTo(mNotificationAAC)));
assertThat("different things are different 2", mNotificationAAC, not(equalTo(mMediaAAC)));
assertThat(
"equal to clone 2",
mNotificationAAC,
equalTo(new AudioAttributesCompat.Builder(mNotificationAAC).build()));
}
@Test
public void testGetters() {
assertThat(mMediaAAC.getContentType(), equalTo(AudioAttributesCompat.CONTENT_TYPE_MUSIC));
assertThat(mMediaAAC.getUsage(), equalTo(AudioAttributesCompat.USAGE_MEDIA));
assertThat(mMediaAAC.getFlags(), equalTo(0));
}
@Test
public void testLegacyStreamTypeInference() {
assertThat(mMediaAAC.getLegacyStreamType(), equalTo(AudioManager.STREAM_MUSIC));
assertThat(mMediaLegacyAAC.getLegacyStreamType(), equalTo(AudioManager.STREAM_MUSIC));
assertThat(
mNotificationAAC.getLegacyStreamType(), equalTo(AudioManager.STREAM_NOTIFICATION));
assertThat(
mNotificationLegacyAAC.getLegacyStreamType(),
equalTo(AudioManager.STREAM_NOTIFICATION));
}
@Test
@SdkSuppress(minSdkVersion = 21)
public void testLegacyStreamTypeInferenceApi21() {
assertThat(mMediaAACFromAA.getLegacyStreamType(), equalTo(AudioManager.STREAM_MUSIC));
}
@Test
public void testLegacyStreamTypeInferenceInLegacyMode() {
// the builders behave differently based on the value of this only-for-testing global
// so we need our very own objects inside this method
AudioAttributesCompat.setForceLegacyBehavior(true);
AudioAttributesCompat mediaAAC =
mkBuilder(AudioAttributesCompat.CONTENT_TYPE_MUSIC,
AudioAttributesCompat.USAGE_MEDIA).build();
AudioAttributesCompat mediaLegacyAAC = mkBuilder(AudioManager.STREAM_MUSIC).build();
AudioAttributesCompat notificationAAC =
mkBuilder(AudioAttributesCompat.CONTENT_TYPE_SONIFICATION,
AudioAttributesCompat.USAGE_NOTIFICATION)
.build();
AudioAttributesCompat notificationLegacyAAC =
mkBuilder(AudioManager.STREAM_NOTIFICATION).build();
assertThat(mediaAAC.getLegacyStreamType(), equalTo(AudioManager.STREAM_MUSIC));
assertThat(mediaLegacyAAC.getLegacyStreamType(), equalTo(AudioManager.STREAM_MUSIC));
assertThat(
notificationAAC.getLegacyStreamType(), equalTo(AudioManager.STREAM_NOTIFICATION));
assertThat(
notificationLegacyAAC.getLegacyStreamType(),
equalTo(AudioManager.STREAM_NOTIFICATION));
}
@After
public void cleanUp() {
AudioAttributesCompat.setForceLegacyBehavior(false);
}
}