MemoryIntArrayTest.java revision 53a441ca8eda5a3e6209a952b1bbd32a39e19a1c
153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov/*
253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * Copyright (C) 2016 The Android Open Source Project
353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov *
453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * Licensed under the Apache License, Version 2.0 (the "License");
553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * you may not use this file except in compliance with the License.
653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * You may obtain a copy of the License at
753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov *
853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov *      http://www.apache.org/licenses/LICENSE-2.0
953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov *
1053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * Unless required by applicable law or agreed to in writing, software
1153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * distributed under the License is distributed on an "AS IS" BASIS,
1253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * See the License for the specific language governing permissions and
1453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov * limitations under the License.
1553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov */
1653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
1753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovpackage android.util;
1853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
1953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovimport android.os.Parcel;
2053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovimport junit.framework.TestCase;
2153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovimport libcore.io.IoUtils;
2253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
2353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovpublic class MemoryIntArrayTest extends TestCase {
2453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
2553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testSize() throws Exception {
2653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
2753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
2853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(3, false);
2953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("size must be three", 3, array.size());
3053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
3153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(array);
3253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
3353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
3453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
3553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testGetSet() throws Exception {
3653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
3753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
3853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(3, false);
3953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
4053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array.set(0, 1);
4153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array.set(1, 2);
4253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array.set(2, 3);
4353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
4453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("First element should be 1", 1, array.get(0));
4553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("First element should be 2", 2, array.get(1));
4653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("First element should be 3", 3, array.get(2));
4753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
4853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(array);
4953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
5053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
5153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
5253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testWritable() throws Exception {
5353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
5453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
5553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(3, true);
5653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertTrue("Must be mutable", array.isWritable());
5753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
5853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(array);
5953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
6053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
6153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
6253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testClose() throws Exception {
6353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
6453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
6553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(3, false);
6653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array.close();
6753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertTrue("Must be closed", array.isClosed());
6853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
6953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            if (array != null && !array.isClosed()) {
7053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                IoUtils.closeQuietly(array);
7153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
7253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
7353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
7453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
7553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testMarshalledGetSet() throws Exception {
7653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray firstArray = null;
7753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray secondArray = null;
7853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
7953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            firstArray = new MemoryIntArray(3, false);
8053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
8153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            firstArray.set(0, 1);
8253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            firstArray.set(1, 2);
8353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            firstArray.set(2, 3);
8453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
8553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            Parcel parcel = Parcel.obtain();
8653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            parcel.writeParcelable(firstArray, 0);
8753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            parcel.setDataPosition(0);
8853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            secondArray = parcel.readParcelable(null);
8953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            parcel.recycle();
9053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
9153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertNotNull("Should marshall file descriptor", secondArray);
9253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
9353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("First element should be 1", 1, secondArray.get(0));
9453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("First element should be 2", 2, secondArray.get(1));
9553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            assertEquals("First element should be 3", 3, secondArray.get(2));
9653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
9753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(firstArray);
9853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(secondArray);
9953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
10053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
10153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
10253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testInteractOnceClosed() throws Exception {
10353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
10453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
10553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(3, false);
10653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array.close();
10753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
10853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array.close();
10953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
11053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
11153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.size();
11253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact with a closed instance");
11353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IllegalStateException e) {
11453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
11553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
11653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
11753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
11853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.get(0);
11953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact with a closed instance");
12053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IllegalStateException e) {
12153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
12253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
12353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
12453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
12553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.set(0, 1);
12653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact with a closed instance");
12753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IllegalStateException e) {
12853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
12953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
13053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
13153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
13253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.isWritable();
13353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact with a closed instance");
13453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IllegalStateException e) {
13553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
13653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
13753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
13853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            if (array != null && !array.isClosed()) {
13953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                IoUtils.closeQuietly(array);
14053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
14153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
14253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
14353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
14453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testInteractPutOfBounds() throws Exception {
14553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
14653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
14753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(3, false);
14853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
14953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
15053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.get(-1);
15153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact out of array bounds");
15253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IndexOutOfBoundsException e) {
15353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
15453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
15553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
15653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
15753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.get(3);
15853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact out of array bounds");
15953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IndexOutOfBoundsException e) {
16053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
16153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
16253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
16353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
16453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.set(-1, 0);
16553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact out of array bounds");
16653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IndexOutOfBoundsException e) {
16753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
16853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
16953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
17053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            try {
17153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                array.set(3, 0);
17253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                fail("Cannot interact out of array bounds");
17353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            } catch (IndexOutOfBoundsException e) {
17453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov                /* expected */
17553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            }
17653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
17753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(array);
17853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
17953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
18053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov
18153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    public void testOverMaxSize() throws Exception {
18253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        MemoryIntArray array = null;
18353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        try {
18453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            array = new MemoryIntArray(MemoryIntArray.getMaxSize() + 1, false);
18553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            fail("Cannot use over max size");
18653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } catch (IllegalArgumentException e) {
18753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            /* expected */
18853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        } finally {
18953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov            IoUtils.closeQuietly(array);
19053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov        }
19153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov    }
19253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov}
193