182eef1935cabfba15ac582595c4955183568350eJake Wharton/*
282eef1935cabfba15ac582595c4955183568350eJake Wharton * Copyright (C) 2018 The Android Open Source Project
382eef1935cabfba15ac582595c4955183568350eJake Wharton *
482eef1935cabfba15ac582595c4955183568350eJake Wharton * Licensed under the Apache License, Version 2.0 (the "License");
582eef1935cabfba15ac582595c4955183568350eJake Wharton * you may not use this file except in compliance with the License.
682eef1935cabfba15ac582595c4955183568350eJake Wharton * You may obtain a copy of the License at
782eef1935cabfba15ac582595c4955183568350eJake Wharton *
882eef1935cabfba15ac582595c4955183568350eJake Wharton *       http://www.apache.org/licenses/LICENSE-2.0
982eef1935cabfba15ac582595c4955183568350eJake Wharton *
1082eef1935cabfba15ac582595c4955183568350eJake Wharton * Unless required by applicable law or agreed to in writing, software
1182eef1935cabfba15ac582595c4955183568350eJake Wharton * distributed under the License is distributed on an "AS IS" BASIS,
1282eef1935cabfba15ac582595c4955183568350eJake Wharton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382eef1935cabfba15ac582595c4955183568350eJake Wharton * See the License for the specific language governing permissions and
1482eef1935cabfba15ac582595c4955183568350eJake Wharton * limitations under the License.
1582eef1935cabfba15ac582595c4955183568350eJake Wharton */
1682eef1935cabfba15ac582595c4955183568350eJake Wharton
179c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonpackage androidx.core.os
1882eef1935cabfba15ac582595c4955183568350eJake Wharton
1982eef1935cabfba15ac582595c4955183568350eJake Whartonimport android.support.test.InstrumentationRegistry
2082eef1935cabfba15ac582595c4955183568350eJake Whartonimport android.support.test.filters.SdkSuppress
2182eef1935cabfba15ac582595c4955183568350eJake Whartonimport android.view.View
229c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonimport androidx.testutils.assertThrows
2382eef1935cabfba15ac582595c4955183568350eJake Whartonimport com.google.common.truth.Truth.assertThat
2482eef1935cabfba15ac582595c4955183568350eJake Whartonimport org.junit.Assert.assertArrayEquals
2582eef1935cabfba15ac582595c4955183568350eJake Whartonimport org.junit.Assert.assertEquals
2682eef1935cabfba15ac582595c4955183568350eJake Whartonimport org.junit.Assert.assertNull
2782eef1935cabfba15ac582595c4955183568350eJake Whartonimport org.junit.Test
2882eef1935cabfba15ac582595c4955183568350eJake Wharton
2982eef1935cabfba15ac582595c4955183568350eJake Wharton@SdkSuppress(minSdkVersion = 21)
3082eef1935cabfba15ac582595c4955183568350eJake Whartonclass PersistableBundleTest {
3182eef1935cabfba15ac582595c4955183568350eJake Wharton    @Test fun persistableBundleOfValid() {
3282eef1935cabfba15ac582595c4955183568350eJake Wharton        val bundle = persistableBundleOf(
33ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "null" to null,
3482eef1935cabfba15ac582595c4955183568350eJake Wharton
35ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "double" to 1.0,
36ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "int" to 1,
37ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "long" to 1L,
3882eef1935cabfba15ac582595c4955183568350eJake Wharton
39ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "string" to "hey",
4082eef1935cabfba15ac582595c4955183568350eJake Wharton
41ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "doubleArray" to doubleArrayOf(),
42ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "intArray" to intArrayOf(),
43ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "longArray" to longArrayOf(),
4482eef1935cabfba15ac582595c4955183568350eJake Wharton
45ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "stringArray" to arrayOf("hey")
4682eef1935cabfba15ac582595c4955183568350eJake Wharton        )
4782eef1935cabfba15ac582595c4955183568350eJake Wharton
488770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton        assertEquals(9, bundle.size())
4982eef1935cabfba15ac582595c4955183568350eJake Wharton
5082eef1935cabfba15ac582595c4955183568350eJake Wharton        assertNull(bundle["null"])
5182eef1935cabfba15ac582595c4955183568350eJake Wharton
5282eef1935cabfba15ac582595c4955183568350eJake Wharton        assertEquals(1.0, bundle["double"])
5382eef1935cabfba15ac582595c4955183568350eJake Wharton        assertEquals(1, bundle["int"])
5482eef1935cabfba15ac582595c4955183568350eJake Wharton        assertEquals(1L, bundle["long"])
5582eef1935cabfba15ac582595c4955183568350eJake Wharton
5682eef1935cabfba15ac582595c4955183568350eJake Wharton        assertEquals("hey", bundle["string"])
5782eef1935cabfba15ac582595c4955183568350eJake Wharton
5882eef1935cabfba15ac582595c4955183568350eJake Wharton        assertArrayEquals(doubleArrayOf(), bundle["doubleArray"] as DoubleArray, 0.0)
5982eef1935cabfba15ac582595c4955183568350eJake Wharton        assertArrayEquals(intArrayOf(), bundle["intArray"] as IntArray)
6082eef1935cabfba15ac582595c4955183568350eJake Wharton        assertArrayEquals(longArrayOf(), bundle["longArray"] as LongArray)
6182eef1935cabfba15ac582595c4955183568350eJake Wharton
6282eef1935cabfba15ac582595c4955183568350eJake Wharton        assertThat(bundle["stringArray"] as Array<*>).asList().containsExactly("hey")
6382eef1935cabfba15ac582595c4955183568350eJake Wharton    }
6482eef1935cabfba15ac582595c4955183568350eJake Wharton
658770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton    @SdkSuppress(minSdkVersion = 22)
668770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton    @Test fun persistableBundleOfValidApi22() {
678770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton        val bundle = persistableBundleOf(
68ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "boolean" to true,
69ec87f3d0ed8fb2a23ee2bbe8b323fdd7bdcbf4eaJake Wharton            "booleanArray" to booleanArrayOf()
708770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton        )
718770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton
728770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton        assertEquals(true, bundle["boolean"])
738770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton        assertArrayEquals(booleanArrayOf(), bundle["booleanArray"] as BooleanArray)
748770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton    }
758770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton
7682eef1935cabfba15ac582595c4955183568350eJake Wharton    @Test fun persistableBundleOfInvalid() {
7782eef1935cabfba15ac582595c4955183568350eJake Wharton        assertThrows<IllegalArgumentException> {
7882eef1935cabfba15ac582595c4955183568350eJake Wharton            persistableBundleOf("nope" to View(InstrumentationRegistry.getContext()))
7982eef1935cabfba15ac582595c4955183568350eJake Wharton        }.hasMessageThat().isEqualTo("Illegal value type android.view.View for key \"nope\"")
8082eef1935cabfba15ac582595c4955183568350eJake Wharton
8182eef1935cabfba15ac582595c4955183568350eJake Wharton        assertThrows<IllegalArgumentException> {
8282eef1935cabfba15ac582595c4955183568350eJake Wharton            persistableBundleOf("nopes" to arrayOf(View(InstrumentationRegistry.getContext())))
8382eef1935cabfba15ac582595c4955183568350eJake Wharton        }.hasMessageThat().isEqualTo("Illegal value array type android.view.View for key \"nopes\"")
8482eef1935cabfba15ac582595c4955183568350eJake Wharton    }
8582eef1935cabfba15ac582595c4955183568350eJake Wharton}
86