1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2015 The Chromium Authors. All rights reserved. 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file. 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezpackage org.chromium.mojo.bindings; 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 7cfc1eaa913db3974e56c87b5489bda0a2bf36d93Jay Civelliimport android.support.test.filters.SmallTest; 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.MojoTestCase; 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.bindings.Callbacks.Callback1; 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.bindings.test.mojom.sample.Enum; 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.bindings.test.mojom.sample.IntegerAccessor; 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.system.MojoException; 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.io.Closeable; 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.util.ArrayList; 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.util.Collections; 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.util.List; 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez/** 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * Tests for interface control messages. 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezpublic class InterfaceControlMessageTest extends MojoTestCase { 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private final List<Closeable> mCloseablesToClose = new ArrayList<Closeable>(); 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * See mojo/public/interfaces/bindings/tests/sample_interfaces.mojom. 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez class IntegerAccessorImpl extends SideEffectFreeCloseable implements IntegerAccessor { 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private long mValue = 0; 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private int mEnum = 0; 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private boolean mEncounteredError = false; 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * @see ConnectionErrorHandler#onConnectionError(MojoException) 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @Override 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void onConnectionError(MojoException e) { 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez mEncounteredError = true; 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * @see IntegerAccessor#getInteger(IntegerAccessor.GetIntegerResponse) 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @Override 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void getInteger(GetIntegerResponse response) { 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez response.call(mValue, mEnum); 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * @see IntegerAccessor#setInteger(long, int) 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @Override 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void setInteger(long value, int enumValue) { 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez mValue = value; 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez mEnum = enumValue; 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public long getValue() { 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return mValue; 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public boolean encounteredError() { 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return mEncounteredError; 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez /** 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * @see MojoTestCase#tearDown() 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */ 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @Override 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez protected void tearDown() throws Exception { 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Close the elements in the reverse order they were added. This is needed because it is an 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // error to close the handle of a proxy without closing the proxy first. 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Collections.reverse(mCloseablesToClose); 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez for (Closeable c : mCloseablesToClose) { 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez c.close(); 78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez super.tearDown(); 80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @SmallTest 83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void testQueryVersion() { 84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez IntegerAccessor.Proxy p = BindingsTestUtils.newProxyOverPipe( 85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez IntegerAccessor.MANAGER, new IntegerAccessorImpl(), mCloseablesToClose); 86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(0, p.getProxyHandler().getVersion()); 87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.getProxyHandler().queryVersion(new Callback1<Integer>() { 88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @Override 89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void call(Integer version) { 90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(3, version.intValue()); 91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }); 93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez runLoopUntilIdle(); 94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(3, p.getProxyHandler().getVersion()); 95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez @SmallTest 98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public void testRequireVersion() { 99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez IntegerAccessorImpl impl = new IntegerAccessorImpl(); 100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez IntegerAccessor.Proxy p = BindingsTestUtils.newProxyOverPipe( 101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez IntegerAccessor.MANAGER, impl, mCloseablesToClose); 102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(0, p.getProxyHandler().getVersion()); 104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.getProxyHandler().requireVersion(1); 106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(1, p.getProxyHandler().getVersion()); 107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.setInteger(123, Enum.VALUE); 108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez runLoopUntilIdle(); 109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertFalse(impl.encounteredError()); 110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(123, impl.getValue()); 111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.getProxyHandler().requireVersion(3); 113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(3, p.getProxyHandler().getVersion()); 114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.setInteger(456, Enum.VALUE); 115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez runLoopUntilIdle(); 116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertFalse(impl.encounteredError()); 117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(456, impl.getValue()); 118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Require a version that is not supported by the implementation side. 120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.getProxyHandler().requireVersion(4); 121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // getVersion() is updated synchronously. 122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(4, p.getProxyHandler().getVersion()); 123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez p.setInteger(789, Enum.VALUE); 124645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez runLoopUntilIdle(); 125645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertTrue(impl.encounteredError()); 126645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // The call to setInteger() after requireVersion() is ignored. 127645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez assertEquals(456, impl.getValue()); 128645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 129645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 130