From 9f82bfd3fcc463f2549188cad9c586004fa673ac Mon Sep 17 00:00:00 2001 From: Klaus Reimer Date: Thu, 18 Apr 2013 20:17:30 +0200 Subject: [PATCH] Add unit tests for DescriptorUtils --- .../ailis/usb4java/utils/DescriptorUtils.java | 15 +- .../usb4java/utils/DescriptorUtilsTest.java | 176 ++++++++++++++++++ 2 files changed, 183 insertions(+), 8 deletions(-) create mode 100644 src/test/java/de/ailis/usb4java/utils/DescriptorUtilsTest.java diff --git a/src/main/java/de/ailis/usb4java/utils/DescriptorUtils.java b/src/main/java/de/ailis/usb4java/utils/DescriptorUtils.java index 9f9323f..6e27eb7 100644 --- a/src/main/java/de/ailis/usb4java/utils/DescriptorUtils.java +++ b/src/main/java/de/ailis/usb4java/utils/DescriptorUtils.java @@ -96,18 +96,17 @@ public final class DescriptorUtils { final int columns = 16; bytes.rewind(); - if (!bytes.hasRemaining()) return ""; final StringBuilder builder = new StringBuilder(); int i = 0; while (bytes.hasRemaining()) { + if (i % columns != 0) + builder.append(' '); + else if (i >= columns) + builder.append(String.format("%n")); + builder.append(String.format("%02x", bytes.get())); i++; - if (i % columns == 0) - builder.append(String.format("%02x%n", bytes.get())); - else - builder.append(String.format("%02x ", bytes.get())); } - if (i % columns != 0) builder.append(String.format("%n")); return builder.toString(); } @@ -200,7 +199,7 @@ public final class DescriptorUtils + " bInterfaceClass %10d%n" + " bInterfaceSubClass %7d%n" + " bInterfaceProtocol %7d%n" - + " iInterface %15d%n", + + " iInterface %15d", descriptor.bLength(), descriptor.bDescriptorType(), descriptor.bInterfaceNumber() & 0xff, @@ -228,7 +227,7 @@ public final class DescriptorUtils + " bEndpointAddress %9s%n" + " bmAttributes %13d%n" + " wMaxPacketSize %11d%n" - + " bInterval %16d%n", + + " bInterval %16d", descriptor.bLength(), descriptor.bDescriptorType(), String.format("0x%02x", descriptor.bEndpointAddress() & 0xff), diff --git a/src/test/java/de/ailis/usb4java/utils/DescriptorUtilsTest.java b/src/test/java/de/ailis/usb4java/utils/DescriptorUtilsTest.java new file mode 100644 index 0000000..5928ed6 --- /dev/null +++ b/src/test/java/de/ailis/usb4java/utils/DescriptorUtilsTest.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2013 Klaus Reimer + * See LICENSE.md for licensing information. + */ + +package de.ailis.usb4java.utils; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; + +import org.junit.Test; + +import de.ailis.usb4java.descriptors.SimpleUsbConfigurationDescriptor; +import de.ailis.usb4java.descriptors.SimpleUsbDeviceDescriptor; +import de.ailis.usb4java.descriptors.SimpleUsbEndpointDescriptor; +import de.ailis.usb4java.descriptors.SimpleUsbInterfaceDescriptor; +import de.ailis.usb4java.libusb.LibUsb; + +/** + * Tests the {@link DescriptorUtils} class. + * + * @author Klaus Reimer (k@ailis.de) + */ +public class DescriptorUtilsTest +{ + /** + * Tests the {@link DescriptorUtils#decodeBCD(int)} method. + */ + @Test + public void testDecodeBCD() + { + assertEquals("10.20", DescriptorUtils.decodeBCD(0x1020)); + } + + /** + * Tests the DescriptorUtils#getSpeedName(int)} method. + */ + @Test + public void testGetSpeedName() + { + assertEquals("Super", DescriptorUtils.getSpeedName(LibUsb.SPEED_SUPER)); + assertEquals("Full", DescriptorUtils.getSpeedName(LibUsb.SPEED_FULL)); + assertEquals("High", DescriptorUtils.getSpeedName(LibUsb.SPEED_HIGH)); + assertEquals("Low", DescriptorUtils.getSpeedName(LibUsb.SPEED_LOW)); + assertEquals("Unknown", + DescriptorUtils.getSpeedName(LibUsb.SPEED_UNKNOWN)); + } + + /** + * Tests the {@link DescriptorUtils#getUSBClassName(int)} method. + */ + @Test + public void testGetUSBClassName() + { + assertEquals("Audio", + DescriptorUtils.getUSBClassName(LibUsb.CLASS_AUDIO)); + assertEquals("Unknown", DescriptorUtils.getUSBClassName(0x1234)); + } + + /** + * Tests the {@link DescriptorUtils#dump(java.nio.ByteBuffer)} method. + */ + @Test + public void testDumpByteBuffer() + { + ByteBuffer bytes = ByteBuffer.allocate(0); + assertEquals("", DescriptorUtils.dump(bytes)); + + bytes = ByteBuffer.allocate(8); + bytes.put(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }); + assertEquals("01 02 03 04 05 06 07 08", DescriptorUtils.dump(bytes)); + + bytes = ByteBuffer.allocate(16); + bytes.put(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16 }); + assertEquals("01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10", + DescriptorUtils.dump(bytes)); + + bytes = ByteBuffer.allocate(20); + bytes.put(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20 }); + assertEquals("01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10\n" + + "11 12 13 14", DescriptorUtils.dump(bytes)); + } + + /** + * Tests the {@link DescriptorUtils#dump(javax.usb.UsbDeviceDescriptor)} + * method. + */ + @Test + public void testDumpUsbDeviceDescriptor() + { + assertEquals("Device Descriptor:\n" + + " bLength 0\n" + + " bDescriptorType 1\n" + + " bcdDevice 0.02\n" + + " bDeviceClass 3\n" + + " bDeviceSubClass 4\n" + + " bDeviceProtocol 5\n" + + " bMaxPacketSize0 6\n" + + " idVendor 0x0007\n" + + " idProduct 0x0008\n" + + " bcdDevice 0.09\n" + + " iManufacturer 10\n" + + " iProduct 11\n" + + " iSerial 12\n" + + " bNumConfigurations 13", + DescriptorUtils.dump(new SimpleUsbDeviceDescriptor((byte) 0, + (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, + (byte) 7, (byte) 8, (byte) 9, (byte) 10, (byte) 11, (byte) 12, + (byte) 13))); + } + + /** + * Tests the + * {@link DescriptorUtils#dump(javax.usb.UsbConfigurationDescriptor)} + * method. + */ + @Test + public void testDumpUsbConfigurationDescriptor() + { + assertEquals("Configuration Descriptor:\n" + + " bLength 0\n" + + " bDescriptorType 1\n" + + " wTotalLength 2\n" + + " bNumInterfaces 3\n" + + " bConfigurationValue 4\n" + + " iConfiguration 5\n" + + " bmAttributes 0x06\n" + + " bMaxPower 14mA", + DescriptorUtils.dump(new SimpleUsbConfigurationDescriptor((byte) 0, + (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, + (byte) 7))); + } + + /** + * Tests the {@link DescriptorUtils#dump(javax.usb.UsbInterfaceDescriptor)} + * method. + */ + @Test + public void testDumpUsbInterfaceDescriptor() + { + assertEquals("Interface Descriptor:\n" + + " bLength 0\n" + + " bDescriptorType 1\n" + + " bInterfaceNumber 2\n" + + " bAlternateSetting 3\n" + + " bNumEndpoints 4\n" + + " bInterfaceClass 5\n" + + " bInterfaceSubClass 6\n" + + " bInterfaceProtocol 7\n" + + " iInterface 8", + DescriptorUtils.dump(new SimpleUsbInterfaceDescriptor((byte) 0, + (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, + (byte) 7, (byte) 8))); + } + + /** + * Tests the {@link DescriptorUtils#dump(javax.usb.UsbEndpointDescriptor)} + * method. + */ + @Test + public void testDumpUsbEndpointDescriptor() + { + assertEquals("Endpoint Descriptor:\n" + + " bLength 0\n" + + " bDescriptorType 1\n" + + " bEndpointAddress 0x02\n" + + " bmAttributes 3\n" + + " wMaxPacketSize 4\n" + + " bInterval 5", + DescriptorUtils.dump(new SimpleUsbEndpointDescriptor((byte) 0, + (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5))); + } +}