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
336aa267
Unverified
Commit
336aa267
authored
May 24, 2022
by
Jesús S Guerrero
Committed by
GitHub
May 24, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tools] General info project validator (#103653)
parent
680bc17c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
151 additions
and
5 deletions
+151
-5
flutter_manifest.dart
packages/flutter_tools/lib/src/flutter_manifest.dart
+2
-0
project_validator.dart
packages/flutter_tools/lib/src/project_validator.dart
+96
-2
project_validator_test.dart
.../test/commands.shard/hermetic/project_validator_test.dart
+3
-3
project_validator_integration_test.dart
...integration.shard/project_validator_integration_test.dart
+50
-0
No files found.
packages/flutter_tools/lib/src/flutter_manifest.dart
View file @
336aa267
...
@@ -69,6 +69,8 @@ class FlutterManifest {
...
@@ -69,6 +69,8 @@ class FlutterManifest {
/// A map representation of the `flutter` section in the `pubspec.yaml` file.
/// A map representation of the `flutter` section in the `pubspec.yaml` file.
Map
<
String
,
Object
?>
_flutterDescriptor
=
<
String
,
Object
?>{};
Map
<
String
,
Object
?>
_flutterDescriptor
=
<
String
,
Object
?>{};
Map
<
String
,
Object
?>
get
flutterDescriptor
=>
_flutterDescriptor
;
/// True if the `pubspec.yaml` file does not exist.
/// True if the `pubspec.yaml` file does not exist.
bool
get
isEmpty
=>
_descriptor
.
isEmpty
;
bool
get
isEmpty
=>
_descriptor
.
isEmpty
;
...
...
packages/flutter_tools/lib/src/project_validator.dart
View file @
336aa267
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// found in the LICENSE file.
import
'flutter_manifest.dart'
;
import
'project.dart'
;
import
'project.dart'
;
import
'project_validator_result.dart'
;
import
'project_validator_result.dart'
;
...
@@ -11,7 +12,100 @@ abstract class ProjectValidator {
...
@@ -11,7 +12,100 @@ abstract class ProjectValidator {
/// Can return more than one result in case a file/command have a lot of info to share to the user
/// Can return more than one result in case a file/command have a lot of info to share to the user
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
);
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
);
/// new ProjectValidators should be added here for the ValidateProjectCommand to run
/// new ProjectValidators should be added here for the ValidateProjectCommand to run
static
const
List
<
ProjectValidator
>
allProjectValidators
=
<
ProjectValidator
>[
static
List
<
ProjectValidator
>
allProjectValidators
=
<
ProjectValidator
>[
// TODO(jasguerrero): add validators
GeneralInfoProjectValidator
(),
];
];
}
}
/// Validator run for all platforms that extract information from the pubspec.yaml.
///
/// Specific info from different platforms should be written in their own ProjectValidator.
class
GeneralInfoProjectValidator
extends
ProjectValidator
{
@override
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
)
async
{
final
FlutterManifest
flutterManifest
=
project
.
manifest
;
final
List
<
ProjectValidatorResult
>
result
=
<
ProjectValidatorResult
>[];
final
ProjectValidatorResult
appNameValidatorResult
=
_getAppNameResult
(
flutterManifest
);
result
.
add
(
appNameValidatorResult
);
final
String
supportedPlatforms
=
_getSupportedPlatforms
(
project
);
if
(
supportedPlatforms
.
isEmpty
)
{
return
result
;
}
final
ProjectValidatorResult
supportedPlatformsResult
=
ProjectValidatorResult
(
name:
'Supported Platforms'
,
value:
supportedPlatforms
,
status:
StatusProjectValidator
.
success
);
final
ProjectValidatorResult
isFlutterPackage
=
_isFlutterPackageValidatorResult
(
flutterManifest
);
result
.
addAll
(<
ProjectValidatorResult
>[
supportedPlatformsResult
,
isFlutterPackage
]);
if
(
flutterManifest
.
flutterDescriptor
.
isNotEmpty
)
{
result
.
add
(
_materialDesignResult
(
flutterManifest
));
result
.
add
(
_pluginValidatorResult
(
flutterManifest
));
}
return
result
;
}
ProjectValidatorResult
_getAppNameResult
(
FlutterManifest
flutterManifest
)
{
final
String
appName
=
flutterManifest
.
appName
;
const
String
name
=
'App Name'
;
if
(
appName
.
isEmpty
)
{
return
const
ProjectValidatorResult
(
name:
name
,
value:
'name not found'
,
status:
StatusProjectValidator
.
error
);
}
return
ProjectValidatorResult
(
name:
name
,
value:
appName
,
status:
StatusProjectValidator
.
success
);
}
ProjectValidatorResult
_isFlutterPackageValidatorResult
(
FlutterManifest
flutterManifest
)
{
final
String
value
;
final
StatusProjectValidator
status
;
if
(
flutterManifest
.
flutterDescriptor
.
isNotEmpty
)
{
value
=
'yes'
;
status
=
StatusProjectValidator
.
success
;
}
else
{
value
=
'no'
;
status
=
StatusProjectValidator
.
warning
;
}
return
ProjectValidatorResult
(
name:
'Is Flutter Package'
,
value:
value
,
status:
status
);
}
ProjectValidatorResult
_materialDesignResult
(
FlutterManifest
flutterManifest
)
{
return
ProjectValidatorResult
(
name:
'Uses Material Design'
,
value:
flutterManifest
.
usesMaterialDesign
?
'yes'
:
'no'
,
status:
StatusProjectValidator
.
success
);
}
String
_getSupportedPlatforms
(
FlutterProject
project
)
{
return
project
.
getSupportedPlatforms
().
map
((
SupportedPlatform
platform
)
=>
platform
.
name
).
join
(
', '
);
}
ProjectValidatorResult
_pluginValidatorResult
(
FlutterManifest
flutterManifest
)
{
return
ProjectValidatorResult
(
name:
'Is Plugin'
,
value:
flutterManifest
.
isPlugin
?
'yes'
:
'no'
,
status:
StatusProjectValidator
.
success
);
}
@override
bool
supportsProject
(
FlutterProject
project
)
{
// this validator will run for any type of project
return
true
;
}
@override
String
get
title
=>
'General Info'
;
}
packages/flutter_tools/test/commands.shard/hermetic/project_validator_test.dart
View file @
336aa267
...
@@ -18,7 +18,7 @@ import '../../src/test_flutter_command_runner.dart';
...
@@ -18,7 +18,7 @@ import '../../src/test_flutter_command_runner.dart';
class
ProjectValidatorDummy
extends
ProjectValidator
{
class
ProjectValidatorDummy
extends
ProjectValidator
{
@override
@override
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
)
async
{
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
,
{
Logger
logger
,
FileSystem
fileSystem
}
)
async
{
return
<
ProjectValidatorResult
>[
return
<
ProjectValidatorResult
>[
const
ProjectValidatorResult
(
name:
'pass'
,
value:
'value'
,
status:
StatusProjectValidator
.
success
),
const
ProjectValidatorResult
(
name:
'pass'
,
value:
'value'
,
status:
StatusProjectValidator
.
success
),
const
ProjectValidatorResult
(
name:
'fail'
,
value:
'my error'
,
status:
StatusProjectValidator
.
error
),
const
ProjectValidatorResult
(
name:
'fail'
,
value:
'my error'
,
status:
StatusProjectValidator
.
error
),
...
@@ -37,7 +37,7 @@ class ProjectValidatorDummy extends ProjectValidator {
...
@@ -37,7 +37,7 @@ class ProjectValidatorDummy extends ProjectValidator {
class
ProjectValidatorSecondDummy
extends
ProjectValidator
{
class
ProjectValidatorSecondDummy
extends
ProjectValidator
{
@override
@override
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
)
async
{
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
,
{
Logger
logger
,
FileSystem
fileSystem
}
)
async
{
return
<
ProjectValidatorResult
>[
return
<
ProjectValidatorResult
>[
const
ProjectValidatorResult
(
name:
'second'
,
value:
'pass'
,
status:
StatusProjectValidator
.
success
),
const
ProjectValidatorResult
(
name:
'second'
,
value:
'pass'
,
status:
StatusProjectValidator
.
success
),
const
ProjectValidatorResult
(
name:
'other fail'
,
value:
'second fail'
,
status:
StatusProjectValidator
.
error
),
const
ProjectValidatorResult
(
name:
'other fail'
,
value:
'second fail'
,
status:
StatusProjectValidator
.
error
),
...
@@ -55,7 +55,7 @@ class ProjectValidatorSecondDummy extends ProjectValidator {
...
@@ -55,7 +55,7 @@ class ProjectValidatorSecondDummy extends ProjectValidator {
class
ProjectValidatorCrash
extends
ProjectValidator
{
class
ProjectValidatorCrash
extends
ProjectValidator
{
@override
@override
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
)
async
{
Future
<
List
<
ProjectValidatorResult
>>
start
(
FlutterProject
project
,
{
Logger
logger
,
FileSystem
fileSystem
}
)
async
{
throw
Exception
(
'my exception'
);
throw
Exception
(
'my exception'
);
}
}
...
...
packages/flutter_tools/test/integration.shard/project_validator_integration_test.dart
0 → 100644
View file @
336aa267
// 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.
// @dart = 2.8
import
'package:args/command_runner.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/commands/validate_project.dart'
;
import
'package:flutter_tools/src/globals.dart'
as
globals
;
import
'package:flutter_tools/src/project_validator.dart'
;
import
'../src/context.dart'
;
import
'../src/test_flutter_command_runner.dart'
;
void
main
(
)
{
FileSystem
fileSystem
;
group
(
'analyze project command'
,
()
{
setUp
(()
{
fileSystem
=
globals
.
localFileSystem
;
});
testUsingContext
(
'General Info Project Validator'
,
()
async
{
final
BufferLogger
loggerTest
=
BufferLogger
.
test
();
final
ValidateProjectCommand
command
=
ValidateProjectCommand
(
fileSystem:
fileSystem
,
logger:
loggerTest
,
allProjectValidators:
<
ProjectValidator
>[
GeneralInfoProjectValidator
()]
);
final
CommandRunner
<
void
>
runner
=
createTestCommandRunner
(
command
);
await
runner
.
run
(<
String
>[
'validate-project'
,
'../../dev/integration_tests/flutter_gallery'
]);
const
String
expected
=
'
\n
'
'┌────────────────────────────────────────────────────────────────────────────┐
\n
'
'│ General Info │
\n
'
'│ [✓] App Name: flutter_gallery │
\n
'
'│ [✓] Supported Platforms: android, ios, web, macos, linux, windows, fuchsia │
\n
'
'│ [✓] Is Flutter Package: yes │
\n
'
'│ [✓] Uses Material Design: yes │
\n
'
'│ [✓] Is Plugin: no │
\n
'
'└────────────────────────────────────────────────────────────────────────────┘
\n
'
;
expect
(
loggerTest
.
statusText
,
contains
(
expected
));
});
});
}
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