The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;
use Linux::Sysfs;

BEGIN {
    require 't/common.pl';
}

plan tests => 16;

# close
{
    my $class = Linux::Sysfs::Class->open($val_class);
    isa_ok( $class, 'Linux::Sysfs::Class' );

    lives_ok(sub {
            $class->close;
    }, 'close');
}

{
    my $class = bless \(my $s), 'Linux::Sysfs::Class';

    lives_ok(sub {
            $class->close;
    }, 'close on invalid class');
}


# open
{
    my $class = Linux::Sysfs::Class->open($val_class);
    isa_ok( $class, 'Linux::Sysfs::Class' );

    debug(sprintf 'Class %s is at %s', $class->name, $class->path);
    $class->close;
}

{
    my $class = Linux::Sysfs::Class->open($inval_name);
    ok( !defined $class, 'open with invalid name' );
}

TODO: {
    local $TODO = 'Will fail in future';

    no warnings 'uninitialized';
    my $class = Linux::Sysfs::Class->open(undef);
    ok( !defined $class, 'open with undefined name' );
}


# get_devices
{
    my $class = Linux::Sysfs::Class->open($val_class);
    isa_ok( $class, 'Linux::Sysfs::Class' );

    my @devices = $class->get_devices;
    ok( scalar @devices > 0, 'get_devices' ); # TODO: errno

    show_device_list(\@devices);
    $class->close;
}

{
    my $class = bless \(my $s), 'Linux::Sysfs::Class';

    my @devices = $class->get_devices;
    ok( scalar @devices == 0, 'get_devices on invalid class' );
}


# get_device
{
    my $class = Linux::Sysfs::Class->open($val_class);
    isa_ok( $class, 'Linux::Sysfs::Class' );

    my $classdev = $class->get_device($val_class_dev);
    isa_ok( $classdev, 'Linux::Sysfs::ClassDevice' ); # TODO: errno
    show_class_device($classdev);

    $classdev = $class->get_device($inval_name);
    ok( !defined $classdev, 'get_device with invalid name' );

    TODO: {
        local $TODO = 'Will fail in future';

        no warnings 'uninitialized';
        $classdev = $class->get_device(undef);
        ok( !defined $classdev, 'get_device with undefined name' );
    }

    $class->close;
}

{
    my $class = bless \(my $s), 'Linux::Sysfs::Class';

    my $classdev = $class->get_device($val_class_dev);
    ok( !defined $classdev, 'get_device on invalid class' );

    $classdev = $class->get_device($inval_name);
    ok( !defined $classdev, 'get_device on invalid class with invalid name' );

    {
        no warnings 'uninitialized';
        $classdev = $class->get_device(undef);
        ok( !defined $classdev, 'get_device on invalid class with undefined name' );
    }
}