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 1904df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport static org.junit.Assert.assertEquals; 2004df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport static org.junit.Assert.assertNotNull; 2104df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport static org.junit.Assert.assertSame; 2204df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport static org.junit.Assert.assertTrue; 2304df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport static org.junit.Assert.fail; 2404df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov 2553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovimport android.os.Parcel; 2604df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport android.support.test.runner.AndroidJUnit4; 2753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganovimport libcore.io.IoUtils; 2804df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport org.junit.Test; 2904df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovimport org.junit.runner.RunWith; 3053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 3104df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov@RunWith(AndroidJUnit4.class) 3204df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganovpublic class MemoryIntArrayTest { 3353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 3404df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 3553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testSize() throws Exception { 3653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 3753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 3853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(3, false); 3953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("size must be three", 3, array.size()); 4053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 4153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 4253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 4353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 4453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 4504df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 4653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testGetSet() throws Exception { 4753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 4853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 4953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(3, false); 5053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 5153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.set(0, 1); 5253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.set(1, 2); 5353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.set(2, 3); 5453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 5553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("First element should be 1", 1, array.get(0)); 5653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("First element should be 2", 2, array.get(1)); 5753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("First element should be 3", 3, array.get(2)); 5853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 5953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 6053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 6153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 6253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 6304df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 6453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testWritable() throws Exception { 6553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 6653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 6753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(3, true); 6853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertTrue("Must be mutable", array.isWritable()); 6953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 7053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 7153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 7253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 7353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 7404df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 7553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testClose() throws Exception { 7653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 7753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 7853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(3, false); 7953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.close(); 8053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertTrue("Must be closed", array.isClosed()); 8153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 8253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov if (array != null && !array.isClosed()) { 8353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 8453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 8553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 8653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 8753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 8804df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 8953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testMarshalledGetSet() throws Exception { 9053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray firstArray = null; 9153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray secondArray = null; 9253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 9353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov firstArray = new MemoryIntArray(3, false); 9453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 9553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov firstArray.set(0, 1); 9653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov firstArray.set(1, 2); 9753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov firstArray.set(2, 3); 9853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 9953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov Parcel parcel = Parcel.obtain(); 10053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov parcel.writeParcelable(firstArray, 0); 10153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov parcel.setDataPosition(0); 10253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov secondArray = parcel.readParcelable(null); 10353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov parcel.recycle(); 10453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 10553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertNotNull("Should marshall file descriptor", secondArray); 10653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 10753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("First element should be 1", 1, secondArray.get(0)); 10853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("First element should be 2", 2, secondArray.get(1)); 10953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov assertEquals("First element should be 3", 3, secondArray.get(2)); 11053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 11153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(firstArray); 11253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(secondArray); 11353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 11453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 11553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 11604df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 11753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testInteractOnceClosed() throws Exception { 11853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 11953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 12053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(3, false); 12153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.close(); 12253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 12353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.close(); 12453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 12553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 12653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.size(); 12753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact with a closed instance"); 12853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IllegalStateException e) { 12953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 13053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 13153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 13253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 13353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.get(0); 13453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact with a closed instance"); 13553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IllegalStateException e) { 13653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 13753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 13853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 13953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 14053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.set(0, 1); 14153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact with a closed instance"); 14253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IllegalStateException e) { 14353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 14453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 14553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 14653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 14753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.isWritable(); 14853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact with a closed instance"); 14953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IllegalStateException e) { 15053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 15153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 15253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 15353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov if (array != null && !array.isClosed()) { 15453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 15553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 15653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 15753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 15853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 15904df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 16053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testInteractPutOfBounds() throws Exception { 16153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 16253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 16353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(3, false); 16453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 16553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 16653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.get(-1); 16753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact out of array bounds"); 16853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IndexOutOfBoundsException e) { 16953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 17053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 17153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 17253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 17353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.get(3); 17453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact out of array bounds"); 17553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IndexOutOfBoundsException e) { 17653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 17753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 17853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 17953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 18053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.set(-1, 0); 18153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact out of array bounds"); 18253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IndexOutOfBoundsException e) { 18353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 18453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 18553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 18653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 18753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array.set(3, 0); 18853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot interact out of array bounds"); 18953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IndexOutOfBoundsException e) { 19053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 19153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 19253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 19353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 19453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 19553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 19653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov 19704df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 19853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov public void testOverMaxSize() throws Exception { 19953a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov MemoryIntArray array = null; 20053a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov try { 20153a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov array = new MemoryIntArray(MemoryIntArray.getMaxSize() + 1, false); 20253a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov fail("Cannot use over max size"); 20353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } catch (IllegalArgumentException e) { 20453a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov /* expected */ 20553a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } finally { 20653a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov IoUtils.closeQuietly(array); 20753a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 20853a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov } 20904df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov 21004df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov @Test 21104df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov public void testNotMutableByUnprivilegedClients() throws Exception { 21204df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov RemoteIntArray remoteIntArray = new RemoteIntArray(1, false); 21304df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov try { 21404df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov assertNotNull("Couldn't get remote instance", remoteIntArray); 21504df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov MemoryIntArray localIntArray = remoteIntArray.peekInstance(); 21604df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov assertNotNull("Couldn't get local instance", localIntArray); 21704df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov 21804df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov remoteIntArray.set(0, 1); 21904df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov assertSame("Remote should be able to modify", 1, remoteIntArray.get(0)); 22004df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov 22104df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov try { 22204df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov localIntArray.set(0, 0); 22304df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov fail("Local shouldn't be able to modify"); 22404df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov } catch (UnsupportedOperationException e) { 22504df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov /* expected */ 22604df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov } 22704df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov assertSame("Local shouldn't be able to modify", 1, localIntArray.get(0)); 22804df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov assertSame("Local shouldn't be able to modify", 1, remoteIntArray.get(0)); 22904df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov } finally { 23004df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov remoteIntArray.destroy(); 23104df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov } 23204df738bcb6584dd82b731a67f4cf8d6925b061eSvetoslav Ganov } 23353a441ca8eda5a3e6209a952b1bbd32a39e19a1cSvet Ganov} 234