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
666c9509
Unverified
Commit
666c9509
authored
Feb 26, 2021
by
Jonah Williams
Committed by
GitHub
Feb 26, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tools] replace most MockBuildSystem instances with TestBuildSystem (#76821)
parent
cca26d06
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
262 additions
and
232 deletions
+262
-232
executable.dart
packages/flutter_tools/lib/executable.dart
+1
-1
assemble.dart
packages/flutter_tools/lib/src/commands/assemble.dart
+5
-2
assemble_test.dart
...ter_tools/test/commands.shard/hermetic/assemble_test.dart
+101
-87
build_ios_framework_test.dart
...est/commands.shard/hermetic/build_ios_framework_test.dart
+9
-9
build_web_test.dart
...er_tools/test/commands.shard/hermetic/build_web_test.dart
+2
-12
build_bundle_test.dart
...ools/test/commands.shard/permeable/build_bundle_test.dart
+10
-14
bundle_shim_test.dart
...es/flutter_tools/test/general.shard/bundle_shim_test.dart
+21
-31
simulators_test.dart
...flutter_tools/test/general.shard/ios/simulators_test.dart
+0
-3
resident_web_runner_cold_test.dart
...ols/test/general.shard/resident_web_runner_cold_test.dart
+48
-62
flutter_tester_test.dart
..._tools/test/general.shard/tester/flutter_tester_test.dart
+4
-11
fakes.dart
packages/flutter_tools/test/src/fakes.dart
+61
-0
No files found.
packages/flutter_tools/lib/executable.dart
View file @
666c9509
...
...
@@ -144,7 +144,7 @@ List<FlutterCommand> generateCommands({
terminal:
globals
.
terminal
,
artifacts:
globals
.
artifacts
,
),
AssembleCommand
(
verboseHelp:
verboseHelp
),
AssembleCommand
(
verboseHelp:
verboseHelp
,
buildSystem:
globals
.
buildSystem
),
AttachCommand
(
verboseHelp:
verboseHelp
),
BuildCommand
(
verboseHelp:
verboseHelp
),
ChannelCommand
(
verboseHelp:
verboseHelp
),
...
...
packages/flutter_tools/lib/src/commands/assemble.dart
View file @
666c9509
...
...
@@ -82,7 +82,8 @@ const bool useLegacyNames = true;
/// Assemble provides a low level API to interact with the flutter tool build
/// system.
class
AssembleCommand
extends
FlutterCommand
{
AssembleCommand
({
bool
verboseHelp
=
false
})
{
AssembleCommand
({
bool
verboseHelp
=
false
,
@required
BuildSystem
buildSystem
})
:
_buildSystem
=
buildSystem
{
argParser
.
addMultiOption
(
'define'
,
abbr:
'd'
,
...
...
@@ -124,6 +125,8 @@ class AssembleCommand extends FlutterCommand {
);
}
final
BuildSystem
_buildSystem
;
@override
String
get
description
=>
'Assemble and build Flutter resources.'
;
...
...
@@ -229,7 +232,7 @@ class AssembleCommand extends FlutterCommand {
Future
<
FlutterCommandResult
>
runCommand
()
async
{
final
List
<
Target
>
targets
=
createTargets
();
final
Target
target
=
targets
.
length
==
1
?
targets
.
single
:
CompositeTarget
(
targets
);
final
BuildResult
result
=
await
globals
.
buildSystem
.
build
(
final
BuildResult
result
=
await
_
buildSystem
.
build
(
target
,
createEnvironment
(),
buildSystemConfig:
BuildSystemConfig
(
...
...
packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart
View file @
666c9509
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/commands.shard/hermetic/build_ios_framework_test.dart
View file @
666c9509
...
...
@@ -16,6 +16,7 @@ import 'package:mockito/mockito.dart';
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
import
'../../src/fakes.dart'
;
void
main
(
)
{
group
(
'build ios-framework'
,
()
{
...
...
@@ -70,7 +71,7 @@ void main() {
when
(
mockFlutterVersion
.
frameworkVersion
).
thenReturn
(
frameworkVersion
);
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -95,7 +96,7 @@ void main() {
when
(
mockGitTagVersion
.
commits
).
thenReturn
(
2
);
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -117,7 +118,7 @@ void main() {
when
(
mockGitTagVersion
.
commits
).
thenReturn
(
0
);
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -155,7 +156,7 @@ void main() {
testUsingContext
(
'created when forced'
,
()
async
{
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -178,7 +179,7 @@ void main() {
testUsingContext
(
'contains license and version'
,
()
async
{
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -198,7 +199,7 @@ void main() {
testUsingContext
(
'debug URL'
,
()
async
{
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -216,7 +217,7 @@ void main() {
testUsingContext
(
'profile URL'
,
()
async
{
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -234,7 +235,7 @@ void main() {
testUsingContext
(
'release URL'
,
()
async
{
final
BuildIOSFrameworkCommand
command
=
BuildIOSFrameworkCommand
(
buildSystem:
MockBuildSystem
(
),
buildSystem:
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
platform:
fakePlatform
,
flutterVersion:
mockFlutterVersion
,
cache:
cache
,
...
...
@@ -257,4 +258,3 @@ void main() {
class
MockFlutterVersion
extends
Mock
implements
FlutterVersion
{}
class
MockGitTagVersion
extends
Mock
implements
GitTagVersion
{}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
View file @
666c9509
...
...
@@ -16,10 +16,8 @@ import 'package:flutter_tools/src/commands/build_web.dart';
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:flutter_tools/src/dart/pub.dart'
;
import
'package:flutter_tools/src/features.dart'
;
import
'package:flutter_tools/src/globals.dart'
as
globals
;
import
'package:flutter_tools/src/project.dart'
;
import
'package:flutter_tools/src/web/compile.dart'
;
import
'package:mockito/mockito.dart'
;
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
...
...
@@ -112,7 +110,7 @@ void main() {
FeatureFlags:
()
=>
TestFeatureFlags
(
isWebEnabled:
true
),
Pub:
()
=>
FakePub
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
BuildSystem:
()
=>
MockBuildSystem
(
),
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
});
testUsingContext
(
'hidden if feature flag is not enabled'
,
()
async
{
...
...
@@ -149,7 +147,7 @@ void main() {
FeatureFlags:
()
=>
TestFeatureFlags
(
isWebEnabled:
true
),
Pub:
()
=>
FakePub
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
BuildSystem:
()
=>
MockBuildSystem
(
),
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
),
});
}
...
...
@@ -201,16 +199,8 @@ class UrlLauncherPlugin {}
'''
);
fileSystem
.
file
(
fileSystem
.
path
.
join
(
'lib'
,
'main.dart'
))
.
writeAsStringSync
(
'void main() { }'
);
// Process calls. We're not testing that these invocations are correct because
// that is covered in targets/web_test.dart.
when
(
globals
.
buildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
return
BuildResult
(
success:
true
);
});
}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
class
TestWebBuildCommand
extends
FlutterCommand
{
TestWebBuildCommand
({
bool
verboseHelp
=
false
})
:
webCommand
=
BuildWebCommand
(
verboseHelp:
verboseHelp
)
{
...
...
packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart
View file @
666c9509
...
...
@@ -21,6 +21,7 @@ import 'package:flutter_tools/src/globals.dart' as globals;
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
import
'../../src/fakes.dart'
;
import
'../../src/testbed.dart'
;
void
main
(
)
{
...
...
@@ -210,18 +211,6 @@ void main() {
globals
.
fs
.
file
(
'pubspec.yaml'
).
createSync
();
globals
.
fs
.
file
(
'.packages'
).
createSync
();
final
CommandRunner
<
void
>
runner
=
createTestCommandRunner
(
BuildBundleCommand
());
when
(
globals
.
buildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
final
Environment
environment
=
invocation
.
positionalArguments
[
1
]
as
Environment
;
expect
(
environment
.
defines
,
<
String
,
String
>{
kTargetFile:
globals
.
fs
.
path
.
join
(
'lib'
,
'main.dart'
),
kBuildMode:
'debug'
,
kTargetPlatform:
'android-arm'
,
kTrackWidgetCreation:
'true'
,
kIconTreeShakerFlag:
null
,
});
return
BuildResult
(
success:
true
);
});
await
runner
.
run
(<
String
>[
'bundle'
,
...
...
@@ -231,11 +220,18 @@ void main() {
'--track-widget-creation'
]);
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
MockBuildSystem
(),
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
),
(
Target
target
,
Environment
environment
)
{
expect
(
environment
.
defines
,
<
String
,
String
>{
kTargetFile:
globals
.
fs
.
path
.
join
(
'lib'
,
'main.dart'
),
kBuildMode:
'debug'
,
kTargetPlatform:
'android-arm'
,
kTrackWidgetCreation:
'true'
,
kIconTreeShakerFlag:
null
,
});
}),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
}
class
MockBundleBuilder
extends
Mock
implements
BundleBuilder
{}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
packages/flutter_tools/test/general.shard/bundle_shim_test.dart
View file @
666c9509
...
...
@@ -4,35 +4,21 @@
// @dart = 2.8
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/build_system/build_system.dart'
;
import
'package:flutter_tools/src/bundle.dart'
;
import
'package:flutter_tools/src/project.dart'
;
import
'package:flutter_tools/src/globals.dart'
as
globals
;
import
'package:mockito/mockito.dart'
;
import
'../src/common.dart'
;
import
'../src/testbed.dart'
;
import
'../src/context.dart'
;
import
'../src/fakes.dart'
;
// Tests for the temporary flutter assemble/bundle shim.
void
main
(
)
{
Testbed
testbed
;
setUp
(()
{
testbed
=
Testbed
(
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
MockBuildSystem
(),
});
});
test
(
'Copies assets to expected directory after building'
,
()
=>
testbed
.
run
(()
async
{
when
(
globals
.
buildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
final
Environment
environment
=
invocation
.
positionalArguments
[
1
]
as
Environment
;
environment
.
outputDir
.
childFile
(
'kernel_blob.bin'
).
createSync
(
recursive:
true
);
environment
.
outputDir
.
childFile
(
'isolate_snapshot_data'
).
createSync
();
environment
.
outputDir
.
childFile
(
'vm_snapshot_data'
).
createSync
();
environment
.
outputDir
.
childFile
(
'LICENSE'
).
createSync
(
recursive:
true
);
return
BuildResult
(
success:
true
);
});
testUsingContext
(
'Copies assets to expected directory after building'
,
()
async
{
await
buildWithAssemble
(
buildMode:
BuildMode
.
debug
,
flutterProject:
FlutterProject
.
fromDirectoryTest
(
globals
.
fs
.
currentDirectory
),
...
...
@@ -45,16 +31,18 @@ void main() {
expect
(
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
'example'
,
'kernel_blob.bin'
)).
existsSync
(),
true
);
expect
(
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
'example'
,
'LICENSE'
)).
existsSync
(),
true
);
expect
(
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
'example.d'
)).
existsSync
(),
false
);
}));
test
(
'Handles build system failure'
,
()
=>
testbed
.
run
(()
{
when
(
globals
.
buildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
_
)
async
{
return
BuildResult
(
success:
false
,
exceptions:
<
String
,
ExceptionMeasurement
>{},
);
});
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
),
(
Target
target
,
Environment
environment
)
{
environment
.
outputDir
.
childFile
(
'kernel_blob.bin'
).
createSync
(
recursive:
true
);
environment
.
outputDir
.
childFile
(
'isolate_snapshot_data'
).
createSync
();
environment
.
outputDir
.
childFile
(
'vm_snapshot_data'
).
createSync
();
environment
.
outputDir
.
childFile
(
'LICENSE'
).
createSync
(
recursive:
true
);
}),
});
testUsingContext
(
'Handles build system failure'
,
()
{
expect
(()
=>
buildWithAssemble
(
buildMode:
BuildMode
.
debug
,
flutterProject:
FlutterProject
.
fromDirectoryTest
(
globals
.
fs
.
currentDirectory
),
...
...
@@ -64,7 +52,9 @@ void main() {
depfilePath:
'example.d'
,
treeShakeIcons:
false
,
),
throwsToolExit
());
}));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
false
)),
});
}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
packages/flutter_tools/test/general.shard/ios/simulators_test.dart
View file @
666c9509
...
...
@@ -11,7 +11,6 @@ import 'package:flutter_tools/src/base/io.dart';
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/build_system/build_system.dart'
;
import
'package:flutter_tools/src/devfs.dart'
;
import
'package:flutter_tools/src/device.dart'
;
import
'package:flutter_tools/src/globals.dart'
as
globals
;
...
...
@@ -986,5 +985,3 @@ flutter:
});
});
}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart
View file @
666c9509
...
...
@@ -6,15 +6,14 @@
import
'dart:async'
;
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/terminal.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/isolated/devfs_web.dart'
;
import
'package:flutter_tools/src/isolated/resident_web_runner.dart'
;
import
'package:flutter_tools/src/build_system/build_system.dart'
;
import
'package:flutter_tools/src/dart/pub.dart'
;
import
'package:flutter_tools/src/device.dart'
;
import
'package:flutter_tools/src/globals.dart'
as
globals
;
import
'package:flutter_tools/src/project.dart'
;
...
...
@@ -25,42 +24,22 @@ import 'package:mockito/mockito.dart';
import
'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'
;
import
'../src/common.dart'
;
import
'../src/context.dart'
;
import
'../src/fakes.dart'
;
import
'../src/testbed.dart'
;
void
main
(
)
{
Testbed
testbed
;
ResidentWebRunner
residentWebRunner
;
MockFlutterDevice
mockFlutterDevice
;
MockWebDevFS
mockWebDevFS
;
MockBuildSystem
mockBuildSystem
;
setUp
(()
{
mockWebDevFS
=
MockWebDevFS
();
mockBuildSystem
=
MockBuildSystem
();
final
MockWebDevice
mockWebDevice
=
MockWebDevice
();
mockFlutterDevice
=
MockFlutterDevice
();
when
(
mockFlutterDevice
.
device
).
thenReturn
(
mockWebDevice
);
when
(
mockFlutterDevice
.
devFS
).
thenReturn
(
mockWebDevFS
);
when
(
mockWebDevFS
.
sources
).
thenReturn
(<
Uri
>[]);
when
(
mockBuildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
return
BuildResult
(
success:
true
);
});
testbed
=
Testbed
(
setup:
()
{
final
FlutterProject
project
=
FlutterProject
.
fromDirectoryTest
(
globals
.
fs
.
currentDirectory
);
residentWebRunner
=
residentWebRunner
=
DwdsWebRunnerFactory
().
createWebRunner
(
mockFlutterDevice
,
flutterProject:
project
,
debuggingOptions:
DebuggingOptions
.
disabled
(
BuildInfo
.
release
),
ipv6:
true
,
stayResident:
true
,
urlTunneller:
null
,
)
as
ResidentWebRunner
;
},
overrides:
<
Type
,
Generator
>{
Pub:
()
=>
FakePub
(),
}
);
});
void
_setupMocks
()
{
...
...
@@ -68,9 +47,18 @@ void main() {
globals
.
fs
.
file
(
'pubspec.yaml'
).
createSync
();
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
'lib'
,
'main.dart'
)).
createSync
(
recursive:
true
);
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
'web'
,
'index.html'
)).
createSync
(
recursive:
true
);
final
FlutterProject
project
=
FlutterProject
.
fromDirectoryTest
(
globals
.
fs
.
currentDirectory
);
residentWebRunner
=
DwdsWebRunnerFactory
().
createWebRunner
(
mockFlutterDevice
,
flutterProject:
project
,
debuggingOptions:
DebuggingOptions
.
disabled
(
BuildInfo
.
release
),
ipv6:
true
,
stayResident:
true
,
urlTunneller:
null
,
)
as
ResidentWebRunner
;
}
test
(
'Can successfully run and connect without vmservice'
,
()
=>
testbed
.
run
(
()
async
{
test
UsingContext
(
'Can successfully run and connect without vmservice'
,
()
async
{
_setupMocks
();
final
FakeStatusLogger
fakeStatusLogger
=
globals
.
logger
as
FakeStatusLogger
;
final
MockStatus
mockStatus
=
MockStatus
();
...
...
@@ -84,43 +72,37 @@ void main() {
expect
(
debugConnectionInfo
.
wsUri
,
null
);
verify
(
mockStatus
.
stop
()).
called
(
1
);
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
mockBuildSystem
,
Logger:
()
=>
FakeStatusLogger
(
BufferLogger
(
terminal:
AnsiTerminal
(
stdio:
null
,
platform:
const
LocalPlatform
(),
),
outputPreferences:
OutputPreferences
.
test
(),
)),
}));
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)),
Logger:
()
=>
FakeStatusLogger
(
BufferLogger
.
test
()),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
// Regression test for https://github.com/flutter/flutter/issues/60613
test
(
'ResidentWebRunner calls appFailedToStart if initial compilation fails'
,
()
=>
testbed
.
run
(
()
async
{
test
UsingContext
(
'ResidentWebRunner calls appFailedToStart if initial compilation fails'
,
()
async
{
_setupMocks
();
when
(
mockBuildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
return
BuildResult
(
success:
false
);
});
expect
(()
async
=>
await
residentWebRunner
.
run
(),
throwsToolExit
());
expect
(
await
residentWebRunner
.
waitForAppToFinish
(),
1
);
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
mockBuildSystem
,
}));
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
false
)),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
// Regression test for https://github.com/flutter/flutter/issues/60613
test
(
'ResidentWebRunner calls appFailedToStart if error is thrown during startup'
,
()
=>
testbed
.
run
(
()
async
{
test
UsingContext
(
'ResidentWebRunner calls appFailedToStart if error is thrown during startup'
,
()
async
{
_setupMocks
();
when
(
mockBuildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
throw
Exception
(
'foo'
);
});
expect
(()
async
=>
await
residentWebRunner
.
run
(),
throwsA
(
isA
<
Exception
>()));
expect
(
await
residentWebRunner
.
waitForAppToFinish
(),
1
);
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
mockBuildSystem
,
}));
BuildSystem:
()
=>
TestBuildSystem
.
error
(
Exception
(
'foo'
)),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
test
(
'Can full restart after attaching'
,
()
=>
testbed
.
run
(
()
async
{
test
UsingContext
(
'Can full restart after attaching'
,
()
async
{
_setupMocks
();
final
Completer
<
DebugConnectionInfo
>
connectionInfoCompleter
=
Completer
<
DebugConnectionInfo
>();
unawaited
(
residentWebRunner
.
run
(
...
...
@@ -131,28 +113,32 @@ void main() {
expect
(
result
.
code
,
0
);
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
mockBuildSystem
,
}));
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
test
(
'Fails on compilation errors in hot restart'
,
()
=>
testbed
.
run
(
()
async
{
test
UsingContext
(
'Fails on compilation errors in hot restart'
,
()
async
{
_setupMocks
();
final
Completer
<
DebugConnectionInfo
>
connectionInfoCompleter
=
Completer
<
DebugConnectionInfo
>();
unawaited
(
residentWebRunner
.
run
(
connectionInfoCompleter:
connectionInfoCompleter
,
));
await
connectionInfoCompleter
.
future
;
when
(
mockBuildSystem
.
build
(
any
,
any
)).
thenAnswer
((
Invocation
invocation
)
async
{
return
BuildResult
(
success:
false
);
});
final
OperationResult
result
=
await
residentWebRunner
.
restart
(
fullRestart:
true
);
expect
(
result
.
code
,
1
);
expect
(
result
.
message
,
contains
(
'Failed to recompile application.'
));
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
mockBuildSystem
,
}));
BuildSystem:
()
=>
TestBuildSystem
.
list
(<
BuildResult
>[
BuildResult
(
success:
true
),
BuildResult
(
success:
false
),
]),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
test
(
'Correctly performs a full refresh on attached chrome device.'
,
()
=>
testbed
.
run
(
()
async
{
test
UsingContext
(
'Correctly performs a full refresh on attached chrome device.'
,
()
async
{
_setupMocks
();
final
MockChromeDevice
chromeDevice
=
MockChromeDevice
();
final
MockChrome
chrome
=
MockChrome
();
...
...
@@ -184,9 +170,10 @@ void main() {
'ignoreCache'
:
true
,
})).
called
(
1
);
},
overrides:
<
Type
,
Generator
>{
BuildSystem:
()
=>
mockBuildSystem
,
}));
BuildSystem:
()
=>
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)),
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
});
}
class
MockWebDevFS
extends
Mock
implements
WebDevFS
{}
...
...
@@ -198,5 +185,4 @@ class MockChrome extends Mock implements Chromium {}
class
MockChromeConnection
extends
Mock
implements
ChromeConnection
{}
class
MockChromeTab
extends
Mock
implements
ChromeTab
{}
class
MockWipConnection
extends
Mock
implements
WipConnection
{}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
class
MockChromiumLauncher
extends
Mock
implements
ChromiumLauncher
{}
packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart
View file @
666c9509
...
...
@@ -21,6 +21,7 @@ import 'package:mockito/mockito.dart';
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
import
'../../src/fakes.dart'
;
void
main
(
)
{
MemoryFileSystem
fileSystem
;
...
...
@@ -80,26 +81,19 @@ void main() {
String
mainPath
;
FakeProcessManager
fakeProcessManager
;
MockBuildSystem
mockB
uildSystem
;
TestBuildSystem
b
uildSystem
;
final
Map
<
Type
,
Generator
>
startOverrides
=
<
Type
,
Generator
>{
Platform:
()
=>
FakePlatform
(
operatingSystem:
'linux'
),
FileSystem:
()
=>
fileSystem
,
ProcessManager:
()
=>
fakeProcessManager
,
Artifacts:
()
=>
Artifacts
.
test
(),
BuildSystem:
()
=>
mockB
uildSystem
,
BuildSystem:
()
=>
b
uildSystem
,
};
setUp
(()
{
mockBuildSystem
=
MockBuildSystem
(
);
buildSystem
=
TestBuildSystem
.
all
(
BuildResult
(
success:
true
)
);
fakeProcessManager
=
FakeProcessManager
.
list
(<
FakeCommand
>[]);
when
(
mockBuildSystem
.
build
(
any
,
any
,
)).
thenAnswer
((
_
)
async
{
return
BuildResult
(
success:
true
);
});
device
=
FlutterTesterDevice
(
'flutter-tester'
,
fileSystem:
fileSystem
,
processManager:
fakeProcessManager
,
...
...
@@ -194,5 +188,4 @@ FlutterTesterDevices setUpFlutterTesterDevices() {
);
}
class
MockBuildSystem
extends
Mock
implements
BuildSystem
{}
class
MockFlutterVersion
extends
Mock
implements
FlutterVersion
{}
packages/flutter_tools/test/src/fakes.dart
View file @
666c9509
...
...
@@ -12,6 +12,7 @@ import 'package:flutter_tools/src/base/file_system.dart';
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/os.dart'
;
import
'package:flutter_tools/src/build_system/build_system.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/convert.dart'
;
import
'package:flutter_tools/src/dart/pub.dart'
;
...
...
@@ -443,3 +444,63 @@ class FakePub extends Fake implements Pub {
bool
checkUpToDate
=
false
,
})
async
{
}
}
class
TestBuildSystem
implements
BuildSystem
{
/// Create a [BuildSystem] instance that returns the provided results in order.
TestBuildSystem
.
list
(
this
.
_results
,
[
this
.
_onRun
])
:
_exception
=
null
,
_singleResult
=
null
;
/// Create a [BuildSystem] instance that returns the provided result for every build
/// and buildIncremental request.
TestBuildSystem
.
all
(
this
.
_singleResult
,
[
this
.
_onRun
])
:
_exception
=
null
,
_results
=
<
BuildResult
>[];
/// Create a [BuildSystem] instance that always throws the provided error for every build
/// and buildIncremental request.
TestBuildSystem
.
error
(
this
.
_exception
)
:
_singleResult
=
null
,
_results
=
<
BuildResult
>[],
_onRun
=
null
;
final
List
<
BuildResult
>
_results
;
final
BuildResult
_singleResult
;
final
dynamic
_exception
;
final
void
Function
(
Target
target
,
Environment
environment
)
_onRun
;
int
_nextResult
=
0
;
@override
Future
<
BuildResult
>
build
(
Target
target
,
Environment
environment
,
{
BuildSystemConfig
buildSystemConfig
=
const
BuildSystemConfig
()})
async
{
if
(
_onRun
!=
null
)
{
_onRun
(
target
,
environment
);
}
if
(
_exception
!=
null
)
{
throw
_exception
;
}
if
(
_singleResult
!=
null
)
{
return
_singleResult
;
}
if
(
_nextResult
>=
_results
.
length
)
{
throw
StateError
(
'Unexpected buildIncremental request of
${target.name}
'
);
}
return
_results
[
_nextResult
++];
}
@override
Future
<
BuildResult
>
buildIncremental
(
Target
target
,
Environment
environment
,
BuildResult
previousBuild
)
async
{
if
(
_onRun
!=
null
)
{
_onRun
(
target
,
environment
);
}
if
(
_exception
!=
null
)
{
throw
_exception
;
}
if
(
_singleResult
!=
null
)
{
return
_singleResult
;
}
if
(
_nextResult
>=
_results
.
length
)
{
throw
StateError
(
'Unexpected buildIncremental request of
${target.name}
'
);
}
return
_results
[
_nextResult
++];
}
}
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