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