| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.tools.rpclib.binary; |
| |
| import junit.framework.TestCase; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.IOException; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| public class HandleTest extends TestCase { |
| static final String handleString = "000102030405060708090a0b0c0d0e0f10111213"; |
| static final byte[] handleBytes = { |
| 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, |
| 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13 |
| }; |
| |
| public void testHandleEquality() { |
| // Check handle identity. |
| Handle handle1 = new Handle(handleBytes); |
| assertEquals(handle1, handle1); |
| |
| // Check equality of two handles created with the same bytes. |
| Handle handle2 = new Handle(handleBytes); |
| assertEquals(handle1, handle2); |
| } |
| |
| public void testHandleNonEquality() { |
| Handle handle = new Handle(handleBytes); |
| assertFalse(handle.equals(null)); |
| |
| // Check that we're getting a different handle than the zero-bytes handle. |
| Handle zeroHandle = new Handle(new byte[handleBytes.length]); |
| assertNotSame(zeroHandle, handle); |
| |
| // Check that we're getting a different handle if only the last byte differs. |
| byte[] handleLastDiffBytes = new byte[handleBytes.length]; |
| System.arraycopy(handleBytes, 0, handleLastDiffBytes, 0, handleBytes.length); |
| handleLastDiffBytes[handleLastDiffBytes.length-1]++; |
| Handle handleLastDiff = new Handle(handleLastDiffBytes); |
| assertNotSame(handleLastDiff, handle); |
| |
| // Check that we're getting a different handle if only the first byte differs. |
| byte[] handleFirstDiffBytes = new byte[handleBytes.length]; |
| System.arraycopy(handleBytes, 0, handleFirstDiffBytes, 0, handleBytes.length); |
| handleLastDiffBytes[0]++; |
| Handle handleFirstDiff = new Handle(handleFirstDiffBytes); |
| assertNotSame(handleFirstDiff, handle); |
| } |
| |
| public void testHandleToString() { |
| Handle handle = new Handle(handleBytes); |
| assertEquals(handleString, handle.toString()); |
| } |
| |
| public void testHandleAsKey() { |
| Set<Handle> set = new HashSet<Handle>(); |
| |
| Handle handle1 = new Handle(handleBytes); |
| set.add(handle1); |
| assertTrue(set.contains(handle1)); |
| assertEquals(1, set.size()); |
| |
| // Two handles with the same bytes should be seen as the same set elements. |
| Handle sameHandle = new Handle(handleBytes); |
| set.add(sameHandle); |
| assertTrue(set.contains(sameHandle)); |
| assertEquals(1, set.size()); |
| |
| // Two handles with different bytes should be seen as separate elements in a set. |
| Handle zeroHandle = new Handle(new byte[20]); |
| set.add(zeroHandle); |
| assertTrue(set.contains(zeroHandle)); |
| assertEquals(2, set.size()); |
| } |
| |
| public void testDecodeHandle() throws IOException { |
| ByteArrayInputStream input = new ByteArrayInputStream(handleBytes); |
| Decoder d = new Decoder(input); |
| |
| Handle handle = new Handle(handleBytes); |
| Handle handleFromDecoder = new Handle(d); |
| assertEquals(handle, handleFromDecoder); |
| } |
| } |