/**
* BlueCove - Java library for Bluetooth
* Copyright (C) 2007-2009 Vlad Skarzhevskyy
*
* 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.
*
* @author vlads
* @version $Id$
*/
package com.intel.bluetooth;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.bluetooth.DataElement;
import javax.bluetooth.UUID;
/**
*
*/
public class NativeSDPStreamOSXTest extends NativeOSXTestCase {
private void validateConversion(DataElement elementExpect, int testType, int type, long ldata, byte[] bdata)
throws IOException {
byte[] blob = NativeTestInterfaces.testOsXDataElementConversion(testType, type, ldata, bdata);
assertNotNull("NULL blob", blob);
DataElement element = (new SDPInputStream(new ByteArrayInputStream(blob))).readElement();
SDPStreamTest.assertEquals("", elementExpect, element);
}
/**
* Tests for simple types
*/
private void validateConversion(DataElement element) throws IOException {
int type = element.getDataType();
switch (type) {
case DataElement.NULL:
validateConversion(element, 0, type, 0, null);
break;
case DataElement.BOOL:
validateConversion(element, 0, type, element.getBoolean() ? 1 : 0, null);
break;
case DataElement.U_INT_1:
case DataElement.INT_1:
case DataElement.U_INT_2:
case DataElement.INT_2:
case DataElement.U_INT_4:
case DataElement.INT_4:
case DataElement.INT_8:
validateConversion(element, 0, type, element.getLong(), null);
break;
case DataElement.U_INT_8:
case DataElement.U_INT_16:
case DataElement.INT_16:
validateConversion(element, 0, type, 0, (byte[]) element.getValue());
break;
case DataElement.UUID:
validateConversion(element, 0, type, 0, Utils.UUIDToByteArray((UUID) element.getValue()));
break;
case DataElement.STRING:
byte[] bs = Utils.getUTF8Bytes((String) element.getValue());
validateConversion(element, 0, type, 0, bs);
break;
case DataElement.URL:
byte[] bu = Utils.getASCIIBytes((String) element.getValue());
validateConversion(element, 0, type, 0, bu);
break;
default:
throw new IllegalArgumentException();
}
}
public void testInt() throws IOException {
validateConversion(new DataElement(DataElement.U_INT_1, 0));
validateConversion(new DataElement(DataElement.U_INT_1, 1));
validateConversion(new DataElement(DataElement.U_INT_1, 1));
validateConversion(new DataElement(DataElement.U_INT_2, 60));
validateConversion(new DataElement(DataElement.U_INT_4, 77839));
validateConversion(new DataElement(DataElement.U_INT_1, 0));
validateConversion(new DataElement(DataElement.U_INT_1, 0xBC));
validateConversion(new DataElement(DataElement.U_INT_2, 0));
validateConversion(new DataElement(DataElement.U_INT_2, 0xABCD));
validateConversion(new DataElement(DataElement.U_INT_4, 0));
validateConversion(new DataElement(DataElement.U_INT_4, 0xABCDEF40l));
validateConversion(new DataElement(DataElement.INT_1, -7));
validateConversion(new DataElement(DataElement.INT_2, -5));
validateConversion(new DataElement(DataElement.INT_4, -25678));
validateConversion(new DataElement(DataElement.INT_1, 0));
validateConversion(new DataElement(DataElement.INT_1, 0x4C));
validateConversion(new DataElement(DataElement.INT_1, -0x1E));
validateConversion(new DataElement(DataElement.INT_2, 0));
validateConversion(new DataElement(DataElement.INT_2, 0x5BCD));
validateConversion(new DataElement(DataElement.INT_2, -0x7EFD));
validateConversion(new DataElement(DataElement.INT_4, 0));
validateConversion(new DataElement(DataElement.INT_4, 0x1BCDEF35l));
validateConversion(new DataElement(DataElement.INT_4, -0x2BC7EF35l));
validateConversion(new DataElement(DataElement.INT_8, 0));
validateConversion(new DataElement(DataElement.INT_8, 1));
validateConversion(new DataElement(DataElement.INT_8, 257));
validateConversion(new DataElement(DataElement.INT_8, 2497));
validateConversion(new DataElement(DataElement.INT_8, -1));
validateConversion(new DataElement(DataElement.INT_8, 998652497));
validateConversion(new DataElement(DataElement.INT_8, 0x3eC6EF355892EA8Cl));
validateConversion(new DataElement(DataElement.INT_8, -0x7F893012AB39FB72l));
validateConversion(new DataElement(DataElement.U_INT_8, new byte[] { 1, -2, 3, 4, -5, 6, 7, -8 }));
validateConversion(new DataElement(DataElement.INT_16, new byte[] { 11, -22, 33, 44, -5, 6, 77, 88, 9, -10, 11,
12, -13, 14, 15, 16 }));
validateConversion(new DataElement(DataElement.U_INT_16, new byte[] { 21, -32, 43, 54, -65, 76, 87, 98, 11,
-110, 111, 112, -113, 114, 115, 16 }));
}
public void testUUID() throws IOException {
validateConversion(new DataElement(DataElement.UUID, new UUID("0100", true)));
validateConversion(new DataElement(DataElement.UUID, new UUID("B10C0BE1111111111111111111110001", false)));
// This is the same UUIDs
validateConversion(new DataElement(DataElement.UUID, new UUID("0000110500001000800000805f9b34fb", false)));
validateConversion(new DataElement(DataElement.UUID, new UUID(0x1105)));
}
public void testString() throws IOException {
validateConversion(new DataElement(DataElement.STRING, ""));
validateConversion(new DataElement(DataElement.STRING, "12345"));
validateConversion(new DataElement(DataElement.STRING, SDPStreamTest.stringUTFData));
StringBuffer b = new StringBuffer();
b.append("b");
for (int i = 0; i < 0x100; i++) {
b.append("Z");
}
b.append("e");
validateConversion(new DataElement(DataElement.STRING, b.toString()));
}
public void testURL() throws IOException {
validateConversion(new DataElement(DataElement.URL, ""));
validateConversion(new DataElement(DataElement.URL, "12345"));
validateConversion(new DataElement(DataElement.URL, "http://blueCove/"));
StringBuffer b = new StringBuffer();
b.append("b");
for (int i = 0; i < 0x100; i++) {
b.append("Z");
}
b.append("e");
validateConversion(new DataElement(DataElement.URL, b.toString()));
}
public void testOtherAttributes() throws IOException {
validateConversion(new DataElement(true));
validateConversion(new DataElement(false));
validateConversion(new DataElement(DataElement.NULL));
}
}