The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test;
use Win32;

my @tests = (
    #              $id, $major, $minor, $pt, $build, $tag
    [ "WinWin32s",   0                                  ],
    [ "Win95",       1, 4,  0                           ],
    [ "Win95",       1, 4,  0,  0, 67109814, "(a)"      ],
    [ "Win95",       1, 4,  0,  0, 67306684, "(b1)"     ],
    [ "Win95",       1, 4,  0,  0, 67109975, "(b2)"     ],
    [ "Win98",       1, 4, 10                           ],
    [ "Win98",       1, 4, 10,  0, 67766446, "(2nd ed)" ],
    [ "WinMe",       1, 4, 90                           ],
    [ "WinNT3.51",   2, 3, 51                           ],
    [ "WinNT4",      2, 4,  0                           ],
    [ "Win2000",     2, 5,  0                           ],
    [ "WinXP/.Net",  2, 5,  1                           ],
    [ "Win2003",     2, 5,  2                           ],
    [ "WinVista",    2, 6,  0,  1                       ],
    [ "Win2008",     2, 6,  0,  2                       ],
    [ "Win7",        2, 6,  1                           ],
);

plan tests => 2*scalar(@tests) + 1;

# Test internal implementation function
for my $test (@tests) {
    my($expect, $id, $major, $minor, $pt, $build, $tag) = @$test;
    my($os, $desc) = Win32::_GetOSName("", $major, $minor, $build||0, $id, $pt);
    ok($os, $expect);
    ok($desc, $tag||"");
}

# Does Win32::GetOSName() return the correct value for the current OS?
my(undef, $major, $minor, $build, $id, undef, undef, undef, $pt)
    = Win32::GetOSVersion();
my($os, $desc) = Win32::_GetOSName("", $major, $minor, $build, $id, $pt);
ok(scalar Win32::GetOSName(), $os);