| /* |
| * 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); |
| } |
| } |