@@ -4,6 +4,7 @@ use utf8;
44
55use Test::More tests => 6;
66require bytes;
7+ use version;
78
89BEGIN {
910 use_ok ' Win32' ;
@@ -14,6 +15,7 @@ BEGIN {
1415
1516BEGIN { subtest " Import private helper's" => sub {
1617 can_ok(' Win32API::Console' =>
18+ ' CP_ACP' ,
1719 ' CP_UTF8' ,
1820 ' ERROR_SUCCESS' ,
1921 ' ERROR_INVALID_HANDLE' ,
@@ -28,6 +30,7 @@ BEGIN { subtest "Import private helper's" => sub {
2830 ' __HRESULT_FROM_WIN32' ,
2931 );
3032 no warnings;
33+ *CP_ACP = Win32API::Console-> can(' CP_ACP' );
3134 *CP_UTF8 = Win32API::Console-> can(' CP_UTF8' );
3235 *ERROR_SUCCESS = Win32API::Console-> can(' ERROR_SUCCESS' );
3336 *ERROR_INVALID_HANDLE = Win32API::Console-> can(' ERROR_INVALID_HANDLE' );
@@ -42,6 +45,7 @@ BEGIN { subtest "Import private helper's" => sub {
4245 *__HRESULT_FROM_WIN32 = Win32API::Console-> can(' __HRESULT_FROM_WIN32' );
4346}}
4447
48+ my $os ;
4549subtest ' GetOSVersion' => sub {
4650 my $id = GetOSVersion();
4751 diag " $^E" if $^E;
@@ -51,23 +55,34 @@ subtest 'GetOSVersion' => sub {
5155 diag " $^E" if $^E;
5256 cmp_ok(@ver , ' >=' , 5, ' GetOSVersion() array context' );
5357 note join (" , " => @ver );
58+ $os = version-> declare(sprintf (' v%2$d.%3$d.%4$d' , @ver ));
5459};
5560
5661subtest ' WideCharToMultiByte and back' => sub {
57- my $original = " Viele Grüße" ;
62+ my ($cp , $original );
63+ if ($os < v10.0.1903) {
64+ # Before Windows 10, there was no native UTF-8 system locale.
65+ $cp = CP_ACP;
66+ $original = " Hello" ;
67+ }
68+ else {
69+ # Starting with Windows 10 (1903), there is beta support for UTF-8.
70+ $cp = CP_UTF8;
71+ $original = " Viele Grüße" ;
72+ }
5873
59- # Convert multibyte to wide string (UTF-8 codepage)
60- my $wide = MultiByteToWideChar($original , CP_UTF8 );
74+ # Convert multibyte to wide string
75+ my $wide = MultiByteToWideChar($original , $cp );
6176 ok(defined $wide , ' MultiByteToWideChar returned a value' );
6277 ok($wide , ' wide string is not empty' );
6378
6479 # Convert back to multibyte string
65- my $mb = WideCharToMultiByte($wide , CP_UTF8 );
80+ my $mb = WideCharToMultiByte($wide , $cp );
6681 ok(defined $mb , ' WideCharToMultiByte returned a value' );
6782 ok($mb , ' Multibyte string is not empty' );
6883 is(
69- bytes::substr ($original , 0),
70- bytes::substr ($mb , 0),
84+ bytes::substr ($mb , 0),
85+ bytes::substr ($original , 0),
7186 ' Round-trip conversion preserved string'
7287 );
7388};
0 commit comments