#!perl -T
use Test::More;
use Device::USB;
use strict;
use warnings;
use constant TESTS_PER_DEVICE => 14;
my $usb = Device::USB->new();
if(defined $usb)
{
my @devices = $usb->list_devices();
plan tests => 2 + TESTS_PER_DEVICE * scalar @devices;
}
else
{
fail( "Unable to create USB object." );
}
my $busses = $usb->list_busses();
ok( defined $busses, "USB busses found" );
can_ok( "Device::USB::Device",
qw/filename configurations get_configuration
bcdUSB bDeviceClass bDeviceSubClass
bDeviceProtocol bMaxPacketSize0 idVendor idProduct
bcdDevice iManufacturer iProduct iSerialNumber bNumConfigurations/ );
foreach my $bus (@{$busses})
{
foreach my $dev (@{$bus->devices()})
{
isa_ok( $dev, "Device::USB::Device" );
my $filename = $dev->filename();
my $regex = ($^O !~ /win/i) ? qr/^(?:\d+|[0-9a-f-]+)$/ : qr/^[\\.]*[0-9a-z-]+$/;
like( $filename, $regex, "Filename is a valid format" );
my $configs = $dev->configurations();
isa_ok( $configs, 'ARRAY' );
like( $dev->bcdUSB(), qr/^\d+\.\d+$/, "$filename: USB Version" );
like( $dev->bDeviceClass(), qr/^\d+$/, "$filename: device class" );
like( $dev->bDeviceSubClass(), qr/^\d+$/, "$filename: device subclass" );
like( $dev->bMaxPacketSize0(), qr/^\d+$/, "$filename: max packet size" );
like( $dev->idVendor(), qr/^\d+$/, "$filename: vendor id" );
like( $dev->idProduct(), qr/^\d+$/, "$filename: product id" );
like( $dev->bcdDevice(), qr/^\d+\.\d+$/, "$filename: Device version" );
like( $dev->iManufacturer(), qr/^\d+$/, "$filename: manufacturer index" );
like( $dev->iProduct(), qr/^\d+$/, "$filename: product index" );
like( $dev->iSerialNumber(), qr/^\d+$/, "$filename: serial number index" );
is( $dev->bNumConfigurations(), scalar(@{$configs}),
"$filename: number of configurations matches" );
}
}