| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.thrift; |
| |
| import java.nio.ByteBuffer; |
| import java.util.Arrays; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import junit.framework.TestCase; |
| |
| public class TestTBaseHelper extends TestCase { |
| public void testByteArrayComparison() { |
| assertTrue(TBaseHelper.compareTo(new byte[]{'a','b'}, new byte[]{'a','c'}) < 0); |
| } |
| |
| public void testSets() { |
| Set<String> a = new HashSet<String>(); |
| Set<String> b = new HashSet<String>(); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) == 0); |
| |
| a.add("test"); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) > 0); |
| |
| b.add("test"); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) == 0); |
| |
| b.add("aardvark"); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) < 0); |
| |
| a.add("test2"); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) > 0); |
| } |
| |
| public void testNestedStructures() { |
| Set<List<String>> a = new HashSet<List<String>>(); |
| Set<List<String>> b = new HashSet<List<String>>(); |
| |
| a.add(Arrays.asList(new String[] {"a","b"})); |
| b.add(Arrays.asList(new String[] {"a","b", "c"})); |
| a.add(Arrays.asList(new String[] {"a","b"})); |
| b.add(Arrays.asList(new String[] {"a","b", "c"})); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) < 0); |
| } |
| |
| public void testMapsInSets() { |
| Set<Map<String, Long>> a = new HashSet<Map<String, Long>>(); |
| Set<Map<String, Long>> b = new HashSet<Map<String, Long>>(); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) == 0); |
| |
| Map<String, Long> innerA = new HashMap<String, Long>(); |
| Map<String, Long> innerB = new HashMap<String, Long>(); |
| a.add(innerA); |
| b.add(innerB); |
| |
| innerA.put("a", 1l); |
| innerB.put("a", 2l); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) < 0); |
| } |
| |
| public void testByteArraysInMaps() { |
| Map<byte[], Long> a = new HashMap<byte[], Long>(); |
| Map<byte[], Long> b = new HashMap<byte[], Long>(); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) == 0); |
| |
| a.put(new byte[]{'a','b'}, 1000L); |
| b.put(new byte[]{'a','b'}, 1000L); |
| a.put(new byte[]{'a','b', 'd'}, 1000L); |
| b.put(new byte[]{'a','b', 'a'}, 1000L); |
| assertTrue(TBaseHelper.compareTo(a, b) > 0); |
| } |
| |
| public void testMapsWithNulls() { |
| Map<String, String> a = new HashMap<String, String>(); |
| Map<String, String> b = new HashMap<String, String>(); |
| a.put("a", null); |
| a.put("b", null); |
| b.put("a", null); |
| b.put("b", null); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) == 0); |
| } |
| |
| public void testMapKeyComparison() { |
| Map<String, String> a = new HashMap<String, String>(); |
| Map<String, String> b = new HashMap<String, String>(); |
| a.put("a", "a"); |
| b.put("b", "a"); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) < 0); |
| } |
| |
| public void testMapValueComparison() { |
| Map<String, String> a = new HashMap<String, String>(); |
| Map<String, String> b = new HashMap<String, String>(); |
| a.put("a", "b"); |
| b.put("a", "a"); |
| |
| assertTrue(TBaseHelper.compareTo(a, b) > 0); |
| } |
| |
| public void testByteArraysInSets() { |
| Set<byte[]> a = new HashSet<byte[]>(); |
| Set<byte[]> b = new HashSet<byte[]>(); |
| |
| if (TBaseHelper.compareTo(a, b) != 0) |
| throw new RuntimeException("Set compare failed:" + a + " vs. " + b); |
| |
| a.add(new byte[]{'a','b'}); |
| b.add(new byte[]{'a','b'}); |
| a.add(new byte[]{'a','b', 'd'}); |
| b.add(new byte[]{'a','b', 'a'}); |
| assertTrue(TBaseHelper.compareTo(a, b) > 0); |
| } |
| |
| public void testByteBufferToByteArray() throws Exception { |
| byte[] b1 = {10,9,8,7,6,5,4,3,2,1,0}; |
| byte[] b2 = TBaseHelper.byteBufferToByteArray(ByteBuffer.wrap(b1)); |
| assertEquals("b1 and b2 should be the exact same array (identity) due to fast path", b1, b2); |
| |
| byte[] b3 = TBaseHelper.byteBufferToByteArray(ByteBuffer.wrap(b1, 1, 3)); |
| assertEquals(3, b3.length); |
| assertEquals(ByteBuffer.wrap(b1, 1, 3), ByteBuffer.wrap(b3)); |
| } |
| |
| public void testRightSize() throws Exception { |
| assertNull(TBaseHelper.rightSize(null)); |
| } |
| |
| public void testByteBufferToString() { |
| byte[] array = new byte[]{1, 2, 3}; |
| ByteBuffer bb = ByteBuffer.wrap(array, 1, 2); |
| StringBuilder sb = new StringBuilder(); |
| TBaseHelper.toString(bb, sb); |
| assertEquals("02 03", sb.toString()); |
| bb = ByteBuffer.wrap(array, 0, array.length); |
| bb.position(1); |
| bb = bb.slice(); |
| assertEquals(1, bb.arrayOffset()); |
| assertEquals(0, bb.position()); |
| assertEquals(2, bb.limit()); |
| sb = new StringBuilder(); |
| TBaseHelper.toString(bb, sb); |
| assertEquals("02 03", sb.toString()); |
| } |
| |
| public void testCopyBinaryWithByteBuffer() throws Exception { |
| byte[] bytes = new byte[]{0, 1, 2, 3, 4, 5}; |
| ByteBuffer b = ByteBuffer.wrap(bytes); |
| ByteBuffer bCopy = TBaseHelper.copyBinary(b); |
| assertEquals(b, bCopy); |
| assertEquals(0, b.position()); |
| |
| b = ByteBuffer.allocateDirect(6); |
| b.put(bytes); |
| b.position(0); |
| bCopy = TBaseHelper.copyBinary(b); |
| assertEquals(6, b.remaining()); |
| assertEquals(0, b.position()); |
| assertEquals(b, bCopy); |
| |
| b.mark(); |
| b.get(); |
| bCopy = TBaseHelper.copyBinary(b); |
| assertEquals(ByteBuffer.wrap(bytes, 1, 5), bCopy); |
| assertEquals(1, b.position()); |
| b.reset(); |
| assertEquals(0, b.position()); |
| |
| assertNull(TBaseHelper.copyBinary((ByteBuffer)null)); |
| } |
| |
| public void testCopyBinaryWithByteArray() throws Exception { |
| byte[] bytes = new byte[]{0, 1, 2, 3, 4, 5}; |
| byte[] copy = TBaseHelper.copyBinary(bytes); |
| assertEquals(ByteBuffer.wrap(bytes), ByteBuffer.wrap(copy)); |
| assertNotSame(bytes, copy); |
| |
| assertNull(TBaseHelper.copyBinary((byte[])null)); |
| } |
| } |