Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
66c306b4
Unverified
Commit
66c306b4
authored
Sep 08, 2022
by
Elias Yishak
Committed by
GitHub
Sep 08, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Windows version check in doctor (#110013)
parent
d80e994a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
310 additions
and
0 deletions
+310
-0
doctor.dart
packages/flutter_tools/lib/src/doctor.dart
+5
-0
windows_version_validator.dart
...tter_tools/lib/src/windows/windows_version_validator.dart
+70
-0
windows_version_validator_test.dart
...ls/test/general.shard/windows_version_validator_test.dart
+235
-0
No files found.
packages/flutter_tools/lib/src/doctor.dart
View file @
66c306b4
...
...
@@ -42,6 +42,7 @@ import 'web/chrome.dart';
import
'web/web_validator.dart'
;
import
'web/workflow.dart'
;
import
'windows/visual_studio_validator.dart'
;
import
'windows/windows_version_validator.dart'
;
import
'windows/windows_workflow.dart'
;
abstract
class
DoctorValidatorsProvider
{
...
...
@@ -129,6 +130,10 @@ class _DefaultDoctorValidatorsProvider implements DoctorValidatorsProvider {
flutterRoot:
()
=>
Cache
.
flutterRoot
!,
operatingSystemUtils:
globals
.
os
,
),
if
(
platform
.
isWindows
)
WindowsVersionValidator
(
processManager:
globals
.
processManager
,
),
if
(
androidWorkflow
!.
appliesToHostPlatform
)
GroupedValidator
(<
DoctorValidator
>[
androidValidator
!,
androidLicenseValidator
!]),
if
(
globals
.
iosWorkflow
!.
appliesToHostPlatform
||
macOSWorkflow
.
appliesToHostPlatform
)
...
...
packages/flutter_tools/lib/src/windows/windows_version_validator.dart
0 → 100644
View file @
66c306b4
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'package:process/process.dart'
;
import
'../base/io.dart'
;
import
'../doctor_validator.dart'
;
/// Flutter only supports development on Windows host machines version 10 and greater.
const
List
<
String
>
kUnsupportedVersions
=
<
String
>[
'6'
,
'7'
,
'8'
,
];
/// Regex pattern for identifying line from systeminfo stdout with windows version
/// (ie. 10.5.4123)
const
String
kWindowsOSVersionSemVerPattern
=
r'^(OS Version:\s*)([0-9]+\.[0-9]+\.[0-9]+)(.*)$'
;
/// Validator for supported Windows host machine operating system version.
class
WindowsVersionValidator
extends
DoctorValidator
{
const
WindowsVersionValidator
({
required
ProcessManager
processManager
})
:
_processManager
=
processManager
,
super
(
'Windows Version'
);
final
ProcessManager
_processManager
;
@override
Future
<
ValidationResult
>
validate
()
async
{
final
ProcessResult
result
=
await
_processManager
.
run
(<
String
>[
'systeminfo'
]);
if
(
result
.
exitCode
!=
0
)
{
return
const
ValidationResult
(
ValidationType
.
missing
,
<
ValidationMessage
>[],
statusInfo:
'Exit status from running `systeminfo` was unsuccessful'
,
);
}
final
String
resultStdout
=
result
.
stdout
as
String
;
final
RegExp
regex
=
RegExp
(
kWindowsOSVersionSemVerPattern
,
multiLine:
true
);
final
Iterable
<
RegExpMatch
>
matches
=
regex
.
allMatches
(
resultStdout
);
// Use the string split method to extract the major version
// and check against the [kUnsupportedVersions] list
final
ValidationType
windowsVersionStatus
;
final
String
statusInfo
;
if
(
matches
.
length
==
1
&&
!
kUnsupportedVersions
.
contains
(
matches
.
elementAt
(
0
).
group
(
2
)?.
split
(
'.'
).
elementAt
(
0
)))
{
windowsVersionStatus
=
ValidationType
.
installed
;
statusInfo
=
'Installed version of Windows is version 10 or higher'
;
}
else
{
windowsVersionStatus
=
ValidationType
.
missing
;
statusInfo
=
'Unable to confirm if installed Windows version is 10 or greater'
;
}
return
ValidationResult
(
windowsVersionStatus
,
const
<
ValidationMessage
>[],
statusInfo:
statusInfo
,
);
}
}
packages/flutter_tools/test/general.shard/windows_version_validator_test.dart
0 → 100644
View file @
66c306b4
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'package:flutter_tools/src/doctor_validator.dart'
;
import
'package:flutter_tools/src/windows/windows_version_validator.dart'
;
import
'../src/common.dart'
;
import
'../src/fake_process_manager.dart'
;
/// Example output from `systeminfo` from a Windows 10 host
const
String
validWindows10StdOut
=
r''
'
Host Name: XXXXXXXXXXXX
OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.19044 N/A Build 19044
OS Manufacturer: Microsoft Corporation
OS Configuration: Member Workstation
OS Build Type: Multiprocessor Free
Registered Owner: N/A
Registered Organization: N/A
Product ID: XXXXXXXXXXXX
Original Install Date: 8/4/2022, 2:51:28 PM
System Boot Time: 8/10/2022, 1:03:10 PM
System Manufacturer: Google
System Model: Google Compute Engine
System Type: x64-based PC
Processor(s): 1 Processor(s) Installed.
[01]: AMD64 Family 23 Model 49 Stepping 0 AuthenticAMD ~2250 Mhz
BIOS Version: Google Google, 6/29/2022
Windows Directory: C:
\\
Windows
System Directory: C:
\\
Windows
\\
system32
Boot Device:
\\
Device
\\
HarddiskVolume2
System Locale: en-us;English (United States)
Input Locale: en-us;English (United States)
Time Zone: (UTC-08:00) Pacific Time (US & Canada)
Total Physical Memory: 32,764 MB
Available Physical Memory: 17,852 MB
Virtual Memory: Max Size: 33,788 MB
Virtual Memory: Available: 18,063 MB
Virtual Memory: In Use: 15,725 MB
Page File Location(s): C:
\\
pagefile.sys
Domain: ad.corp.google.com
Logon Server:
\\
CBF-DC-8
Hotfix(s): 7 Hotfix(s) Installed.
[01]: KB5013624
[02]: KB5003791
[03]: KB5012170
[04]: KB5016616
[05]: KB5014032
[06]: KB5014671
[07]: KB5015895
Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed.
'''
;
/// Example output from `systeminfo` from version != 10
const
String
invalidWindowsStdOut
=
r''
'
Host Name: XXXXXXXXXXXX
OS Name: Microsoft Windows 8.1 Enterprise
OS Version: 6.3.9600 Build 9600
OS Manufacturer: Microsoft Corporation
OS Configuration: Member Workstation
OS Build Type: Multiprocessor Free
Registered Owner: N/A
Registered Organization: N/A
Product ID: XXXXXXXXXXXX
Original Install Date: 8/4/2022, 2:51:28 PM
System Boot Time: 8/10/2022, 1:03:10 PM
System Manufacturer: Google
System Model: Google Compute Engine
System Type: x64-based PC
Processor(s): 1 Processor(s) Installed.
[01]: AMD64 Family 23 Model 49 Stepping 0 AuthenticAMD ~2250 Mhz
BIOS Version: Google Google, 6/29/2022
Windows Directory: C:
\\
Windows
System Directory: C:
\\
Windows
\\
system32
Boot Device:
\\
Device
\\
HarddiskVolume2
System Locale: en-us;English (United States)
Input Locale: en-us;English (United States)
Time Zone: (UTC-08:00) Pacific Time (US & Canada)
Total Physical Memory: 32,764 MB
Available Physical Memory: 17,852 MB
Virtual Memory: Max Size: 33,788 MB
Virtual Memory: Available: 18,063 MB
Virtual Memory: In Use: 15,725 MB
Page File Location(s): C:
\\
pagefile.sys
Domain: ad.corp.google.com
Logon Server:
\\
CBF-DC-8
Hotfix(s): 7 Hotfix(s) Installed.
[01]: KB5013624
[02]: KB5003791
[03]: KB5012170
[04]: KB5016616
[05]: KB5014032
[06]: KB5014671
[07]: KB5015895
Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed.
'''
;
/// The expected validation result object for
/// a passing windows version test
const
ValidationResult
validWindows10ValidationResult
=
ValidationResult
(
ValidationType
.
installed
,
<
ValidationMessage
>[],
statusInfo:
'Installed version of Windows is version 10 or higher'
,
);
/// The expected validation result object for
/// a failing exit code (!= 0)
const
ValidationResult
failedValidationResult
=
ValidationResult
(
ValidationType
.
missing
,
<
ValidationMessage
>[],
statusInfo:
'Exit status from running `systeminfo` was unsuccessful'
,
);
/// The expected validation result object for
/// a passing windows version test
const
ValidationResult
invalidWindowsValidationResult
=
ValidationResult
(
ValidationType
.
missing
,
<
ValidationMessage
>[],
statusInfo:
'Unable to confirm if installed Windows version is 10 or greater'
,
);
/// Expected return from a nonzero exitcode when
/// running systeminfo
const
ValidationResult
invalidExitCodeValidationResult
=
ValidationResult
(
ValidationType
.
missing
,
<
ValidationMessage
>[],
statusInfo:
'Exit status from running `systeminfo` was unsuccessful'
,
);
void
main
(
)
{
testWithoutContext
(
'Successfully running windows version check on windows 10'
,
()
async
{
final
WindowsVersionValidator
windowsVersionValidator
=
WindowsVersionValidator
(
processManager:
FakeProcessManager
.
list
(
<
FakeCommand
>[
const
FakeCommand
(
command:
<
String
>[
'systeminfo'
],
stdout:
validWindows10StdOut
,
),
],
),
);
final
ValidationResult
result
=
await
windowsVersionValidator
.
validate
();
expect
(
result
.
type
,
validWindows10ValidationResult
.
type
,
reason:
'The ValidationResult type should be the same (installed)'
);
expect
(
result
.
statusInfo
,
validWindows10ValidationResult
.
statusInfo
,
reason:
'The ValidationResult statusInfo messages should be the same'
);
});
testWithoutContext
(
'Failing to invoke the `systeminfo` command'
,
()
async
{
final
WindowsVersionValidator
windowsVersionValidator
=
WindowsVersionValidator
(
processManager:
FakeProcessManager
.
list
(
<
FakeCommand
>[
const
FakeCommand
(
command:
<
String
>[
'systeminfo'
],
stdout:
validWindows10StdOut
,
exitCode:
1
,
),
],
),
);
final
ValidationResult
result
=
await
windowsVersionValidator
.
validate
();
expect
(
result
.
type
,
failedValidationResult
.
type
,
reason:
'The ValidationResult type should be the same (missing)'
);
expect
(
result
.
statusInfo
,
failedValidationResult
.
statusInfo
,
reason:
'The ValidationResult statusInfo messages should be the same'
);
});
testWithoutContext
(
'Identifying a windows version before 10'
,
()
async
{
final
WindowsVersionValidator
windowsVersionValidator
=
WindowsVersionValidator
(
processManager:
FakeProcessManager
.
list
(
<
FakeCommand
>[
const
FakeCommand
(
command:
<
String
>[
'systeminfo'
],
stdout:
invalidWindowsStdOut
,
),
],
),
);
final
ValidationResult
result
=
await
windowsVersionValidator
.
validate
();
expect
(
result
.
type
,
invalidWindowsValidationResult
.
type
,
reason:
'The ValidationResult type should be the same (missing)'
);
expect
(
result
.
statusInfo
,
invalidWindowsValidationResult
.
statusInfo
,
reason:
'The ValidationResult statusInfo messages should be the same'
);
});
testWithoutContext
(
'Running into an nonzero exit code from systeminfo command'
,
()
async
{
final
WindowsVersionValidator
windowsVersionValidator
=
WindowsVersionValidator
(
processManager:
FakeProcessManager
.
list
(
<
FakeCommand
>[
const
FakeCommand
(
command:
<
String
>[
'systeminfo'
],
exitCode:
1
),
],
),
);
final
ValidationResult
result
=
await
windowsVersionValidator
.
validate
();
expect
(
result
.
type
,
invalidExitCodeValidationResult
.
type
,
reason:
'The ValidationResult type should be the same (missing)'
);
expect
(
result
.
statusInfo
,
invalidExitCodeValidationResult
.
statusInfo
,
reason:
'The ValidationResult statusInfo messages should be the same'
);
});
testWithoutContext
(
'Unit testing on a regex pattern validator'
,
()
async
{
const
String
testStr
=
r''
'
OS Version: 10.0.19044 N/A Build 19044
OSz Version: 10.0.19044 N/A Build 19044
OS 6Version: 10.0.19044 N/A Build 19044
OxS Version: 10.0.19044 N/A Build 19044
OS Version: 10.19044 N/A Build 19044
OS Version: 10.x.19044 N/A Build 19044
OS Version: 10.0.19044 N/A Build 19044
OS Version: .0.19044 N/A Build 19044
'''
;
final
RegExp
regex
=
RegExp
(
kWindowsOSVersionSemVerPattern
,
multiLine:
true
);
final
Iterable
<
RegExpMatch
>
matches
=
regex
.
allMatches
(
testStr
);
expect
(
matches
.
length
,
2
,
reason:
'There should be only two matches for the pattern provided'
);
});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment