xref: /openbsd/gnu/usr.bin/perl/cpan/Win32/t/GetOSName.t (revision 898184e3)
1use strict;
2use Test::More;
3use Win32;
4
5# The "description" value is extracted from the $pretty field:
6#
7#     "2000 [Server]" => "Server"
8#     "{Home Server}" => "Windows Home Server" (prefixed with "Windows ")
9#     "Anything R2"   => "R2 Anything"         (R2 moved to front)
10#
11# The "display name" value is the same as the $pretty field,
12# prefixed by "Windows ", with all "[]{}" characters removed.
13
14# $pretty, $os $id, $major, $minor, $sm, $pt, $metric
15
16my @intel_tests = (
17["Win32s",                          "Win32s",  0                     ],
18
19["95",                              "95",      1, 4, 0               ],
20["98",                              "98",      1, 4, 10              ],
21["Me",                              "Me",      1, 4, 90              ],
22
23["NT 3.51",                         "NT3.51",  2, 3, 51              ],
24["NT 4",                            "NT4",     2, 4, 0               ],
25
26["2000 [Professional]",             "2000",    2, 5, 0, 0x0000, 1,  0],
27["2000 [Server]",                   "2000",    2, 5, 0, 0x0000, 2,  0],
28["[Small Business Server] 2000",    "2000",    2, 5, 0, 0x0020, 2,  0],
29["2000 [Advanced Server]",          "2000",    2, 5, 0, 0x0002, 2,  0],
30["2000 [Datacenter Server]",        "2000",    2, 5, 0, 0x0080, 2,  0],
31
32["XP [Home Edition]",               "XP/.Net", 2, 5, 1, 0x0200, 1,  0],
33["XP [Professional]",               "XP/.Net", 2, 5, 1, 0x0000, 1,  0],
34["XP [Tablet PC Edition]",          "XP/.Net", 2, 5, 1, 0x0000, 1, 86],
35["XP [Media Center Edition]",       "XP/.Net", 2, 5, 1, 0x0000, 1, 87],
36["XP [Starter Edition]",            "XP/.Net", 2, 5, 1, 0x0000, 1, 88],
37
38["2003 [Standard Edition]",         "2003",    2, 5, 2, 0x0000, 2,  0],
39["[Small Business Server] 2003",    "2003",    2, 5, 2, 0x0020, 2,  0],
40["{Storage Server} 2003",           "2003",    2, 5, 2, 0x2000, 2,  0],
41["{Home Server}",                   "2003",    2, 5, 2, 0x8000, 2,  0],
42
43["{Compute Cluster Server} 2003",   "2003",    2, 5, 2, 0x4000, 2,  0],
44["2003 [Datacenter Edition]",       "2003",    2, 5, 2, 0x0080, 2,  0],
45["2003 [Enterprise Edition]",       "2003",    2, 5, 2, 0x0002, 2,  0],
46["2003 [Web Edition]",              "2003",    2, 5, 2, 0x0400, 2,  0],
47
48["2003 [R2 Standard Edition]",      "2003",    2, 5, 2, 0x0000, 2, 89],
49["[Small Business Server] 2003 R2", "2003",    2, 5, 2, 0x0020, 2, 89],
50["{Storage Server} 2003 R2",        "2003",    2, 5, 2, 0x2000, 2, 89],
51# ??? test for more R2 versions?
52);
53
54my @amd64_tests = (
55["{XP Professional x64 Edition}",   "2003",    2, 5, 2, 0x0000, 1,  0],
56["2003 [Datacenter x64 Edition]",   "2003",    2, 5, 2, 0x0080, 2,  0],
57["2003 [Enterprise x64 Edition]",   "2003",    2, 5, 2, 0x0002, 2,  0],
58["2003 [Standard x64 Edition]",     "2003",    2, 5, 2, 0x0000, 2,  0],
59);
60
61my @dual_tests = (
62["Vista",                           "Vista",   2, 6, 0               ],
63
64["Vista [Starter]",                 "Vista",   2, 6, 0, 0x0b         ],
65["Vista [Home Basic]",              "Vista",   2, 6, 0, 0x02         ],
66["Vista [Home Premium]",            "Vista",   2, 6, 0, 0x03         ],
67["Vista [Business]",                "Vista",   2, 6, 0, 0x06         ],
68["Vista [Enterprise]",              "Vista",   2, 6, 0, 0x04         ],
69["Vista [Ultimate]",                "Vista",   2, 6, 0, 0x01         ],
70
71#["Vista Business for Embedded Systems", "Vista",   2, 6, 0           ],
72#["Vista Ultimate for Embedded Systems", "Vista",   2, 6, 0           ],
73
74["2008 [Standard]",                 "2008",    2, 6, 0, 0x07, 2      ],
75["2008 [Enterprise]",               "2008",    2, 6, 0, 0x04, 2      ],
76["[HPC Server] 2008",               "2008",    2, 6, 0, 0x12, 2      ],
77["[Web Server] 2008",               "2008",    2, 6, 0, 0x11, 2      ],
78#["[Storage Server] 2008",           "2008",    2, 6, 0, ????, 2      ],
79["[Small Business Server] 2008",    "2008",    2, 6, 0, 0x09, 2,  0  ],
80
81#    * Windows Server 2008 Standard (x86 and x86-64)
82#    * Windows Server 2008 Enterprise (x86 and x86-64)
83#    * Windows HPC Server 2008 (replacing Windows Compute Cluster Server 2003)
84#    * Windows Web Server 2008 (x86 and x86-64)
85#    * Windows Storage Server 2008 (x86 and x86-64)
86#    * Windows Small Business Server 2008 (Codenamed "Cougar") (x86-64) for small businesses
87#    * Windows Essential Business Server 2008 (Codenamed "Centro") (x86-64) for medium-sized businesses [25]
88#    * Windows Server 2008 for Itanium-based Systems
89#    * Windows Server 2008 Foundation
90#
91# Server Core is available in the Web, Standard, Enterprise and Datacenter editions.
92
93["7",                               "7",       2, 6, 1               ],
94["7 [Starter]",                     "7",       2, 6, 1, 0x0b         ],
95["7 [Home Basic]",                  "7",       2, 6, 1, 0x02         ],
96["7 [Home Premium]",                "7",       2, 6, 1, 0x03         ],
97["7 [Professional]",                "7",       2, 6, 1, 0x06         ],
98["7 [Professional]",                "7",       2, 6, 1, 0x30         ],
99["7 [Enterprise]",                  "7",       2, 6, 1, 0x04         ],
100["7 [Ultimate]",                    "7",       2, 6, 1, 0x01         ],
101
102
103["2008 [R2]",                       "2008",    2, 6, 1, 0x00, 2, 89  ],
104["[Small Business Server] 2008 R2", "2008",    2, 6, 1, 0x09, 2, 89  ],
105
106);
107
108my @ia64_tests = (
109["2003 [Datacenter Edition for Itanium-based Systems]", "2003", 2, 5, 2, 0x0080, 2, 0],
110["2003 [Enterprise Edition for Itanium-based Systems]", "2003", 2, 5, 2, 0x0002, 2, 0],
111);
112
113plan tests => 6 * (@intel_tests + @amd64_tests + 2*@dual_tests + @ia64_tests);
114
115# Test internal implementation function
116sub check {
117    my($test, $arch) = @_;
118    my($pretty, $expect, $id, $major, $minor, $sm, $pt, $metrics) = @$test;
119    $metrics = [$metrics] if defined($metrics) && not ref $metrics;
120
121    my $tag = "";
122    ($pretty, $tag) = ("$1$2$3", "$2") if $pretty =~ /^(.*)\[(.*)\](.*)$/;
123    ($pretty, $tag) = ("$1$2$3", "Windows $2") if $pretty =~ /^(.*)\{(.*)\}(.*)$/;
124    $tag = "R2 $tag" if $tag !~ /R2/ && $pretty =~ /R2$/;
125
126    # All display names start with "Windows";
127    # and 2003/2008 start with "Windows Server"
128    unless ($pretty eq "Win32s") {
129	my $prefix = "Windows";
130	$prefix .= " Server" if $pretty =~ /^200[38]/;
131	$pretty = "$prefix $pretty";
132    }
133
134    # @dual_tests: Vista and later all come in both 32-bit and 64-bit versions
135    if ($id == 2 && $major >= 6) {
136	my $suffix = "";
137	$suffix = " (32-bit)" if $arch == Win32::PROCESSOR_ARCHITECTURE_INTEL;
138	$suffix = " (64-bit)" if $arch == Win32::PROCESSOR_ARCHITECTURE_AMD64;
139	$_ .= $suffix for $pretty, $tag;
140	$tag =~ s/^\s*//;
141    }
142
143    # We pass the same value for $suitemask and $productinfo.  The former is
144    # used for Windows up to 2003, the latter is used for Vista and later.
145    my($os, $desc) = Win32::_GetOSName("", $major||0, $minor||0, 0,
146				       $id, $sm||0, $pt||1, $sm||0, $arch, $metrics);
147    my $display = Win32::GetOSDisplayName($os, $desc);
148
149    note($pretty);
150    is($display, $pretty);
151    is($os, "Win$expect", "os:   $os");
152    is($desc, $tag, "desc: $desc");
153
154    my $sp = "Service Pack 42";
155    ($os, $desc) = Win32::_GetOSName($sp, $major||0, $minor||0, 0,
156				     $id, $sm||0, $pt||1, $sm||0, $arch, $metrics);
157    $display = Win32::GetOSDisplayName($os, $desc);
158
159    is($display, "$pretty $sp", "display: $display");
160    is($os,      "Win$expect",  "os:      $os");
161    $expect = length($tag) ? "$tag $sp" : $sp;
162    is($desc,    $expect,       "desc:    $desc");
163}
164
165check($_, Win32::PROCESSOR_ARCHITECTURE_INTEL) for @intel_tests, @dual_tests;
166check($_, Win32::PROCESSOR_ARCHITECTURE_AMD64) for @amd64_tests, @dual_tests;
167check($_, Win32::PROCESSOR_ARCHITECTURE_IA64)  for @ia64_tests;
168
169