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
3599b3a8
Unverified
Commit
3599b3a8
authored
Oct 25, 2022
by
Danny Tuppeny
Committed by
GitHub
Oct 25, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for expression compilation when debugging integration tests (#113481)
Fixes #79439.
parent
5304a241
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
59 additions
and
12 deletions
+59
-12
flutter_platform.dart
packages/flutter_tools/lib/src/test/flutter_platform.dart
+11
-9
integration_test_device.dart
...s/flutter_tools/lib/src/test/integration_test_device.dart
+7
-1
integration_test_device_test.dart
...ools/test/general.shard/integration_test_device_test.dart
+3
-0
expression_evaluation_test.dart
...ls/test/integration.shard/expression_evaluation_test.dart
+33
-0
integration_tests_project.dart
...ntegration.shard/test_data/integration_tests_project.dart
+2
-2
test_driver.dart
...ges/flutter_tools/test/integration.shard/test_driver.dart
+3
-0
No files found.
packages/flutter_tools/lib/src/test/flutter_platform.dart
View file @
3599b3a8
...
...
@@ -418,6 +418,7 @@ class FlutterPlatform extends PlatformPlugin {
debuggingOptions:
debuggingOptions
,
device:
integrationTestDevice
!,
userIdentifier:
integrationTestUserIdentifier
,
compileExpression:
_compileExpressionService
);
}
return
FlutterTesterTestDevice
(
...
...
@@ -457,21 +458,22 @@ class FlutterPlatform extends PlatformPlugin {
controllerSinkClosed
=
true
;
}));
// When start paused is specified, it means that the user is likely
// running this with a debugger attached. Initialize the resident
// compiler in this case.
if
(
debuggingOptions
.
startPaused
)
{
compiler
??=
TestCompiler
(
debuggingOptions
.
buildInfo
,
flutterProject
,
precompiledDillPath:
precompiledDillPath
,
testTimeRecorder:
testTimeRecorder
);
final
Uri
testUri
=
globals
.
fs
.
file
(
testPath
).
uri
;
// Trigger a compilation to initialize the resident compiler.
unawaited
(
compiler
!.
compile
(
testUri
));
}
// If a kernel file is given, then use that to launch the test.
// If mapping is provided, look kernel file from mapping.
// If all fails, create a "listener" dart that invokes actual test.
String
?
mainDart
;
if
(
precompiledDillPath
!=
null
)
{
mainDart
=
precompiledDillPath
;
// When start paused is specified, it means that the user is likely
// running this with a debugger attached. Initialize the resident
// compiler in this case.
if
(
debuggingOptions
.
startPaused
)
{
compiler
??=
TestCompiler
(
debuggingOptions
.
buildInfo
,
flutterProject
,
precompiledDillPath:
precompiledDillPath
,
testTimeRecorder:
testTimeRecorder
);
final
Uri
testUri
=
globals
.
fs
.
file
(
testPath
).
uri
;
// Trigger a compilation to initialize the resident compiler.
unawaited
(
compiler
!.
compile
(
testUri
));
}
}
else
if
(
precompiledDillFiles
!=
null
)
{
mainDart
=
precompiledDillFiles
![
testPath
];
}
else
{
...
...
packages/flutter_tools/lib/src/test/integration_test_device.dart
View file @
3599b3a8
...
...
@@ -24,12 +24,14 @@ class IntegrationTestTestDevice implements TestDevice {
required
this
.
device
,
required
this
.
debuggingOptions
,
required
this
.
userIdentifier
,
required
this
.
compileExpression
,
});
final
int
id
;
final
Device
device
;
final
DebuggingOptions
debuggingOptions
;
final
String
?
userIdentifier
;
final
CompileExpression
?
compileExpression
;
ApplicationPackage
?
_applicationPackage
;
final
Completer
<
void
>
_finished
=
Completer
<
void
>();
...
...
@@ -70,7 +72,11 @@ class IntegrationTestTestDevice implements TestDevice {
_gotProcessObservatoryUri
.
complete
(
observatoryUri
);
globals
.
printTrace
(
'test
$id
: Connecting to vm service'
);
final
FlutterVmService
vmService
=
await
connectToVmService
(
observatoryUri
,
logger:
globals
.
logger
).
timeout
(
final
FlutterVmService
vmService
=
await
connectToVmService
(
observatoryUri
,
logger:
globals
.
logger
,
compileExpression:
compileExpression
,
).
timeout
(
const
Duration
(
seconds:
5
),
onTimeout:
()
=>
throw
TimeoutException
(
'Connecting to the VM Service timed out.'
),
);
...
...
packages/flutter_tools/test/general.shard/integration_test_device_test.dart
View file @
3599b3a8
...
...
@@ -77,6 +77,7 @@ void main() {
BuildInfo
.
debug
,
),
userIdentifier:
''
,
compileExpression:
null
,
);
fakeVmServiceHost
=
FakeVmServiceHost
(
requests:
<
VmServiceExpectation
>[
...
...
@@ -173,6 +174,7 @@ void main() {
BuildInfo
.
debug
,
),
userIdentifier:
''
,
compileExpression:
null
,
);
expect
(()
=>
testDevice
.
start
(
'entrypointPath'
),
throwsA
(
isA
<
TestDeviceException
>()));
...
...
@@ -201,6 +203,7 @@ void main() {
BuildInfo
.
debug
,
),
userIdentifier:
''
,
compileExpression:
null
,
);
expect
(()
=>
testDevice
.
start
(
'entrypointPath'
),
throwsA
(
isA
<
TestDeviceException
>()));
...
...
packages/flutter_tools/test/integration.shard/expression_evaluation_test.dart
View file @
3599b3a8
...
...
@@ -8,6 +8,7 @@ import 'package:vm_service/vm_service.dart';
import
'../src/common.dart'
;
import
'test_data/basic_project.dart'
;
import
'test_data/integration_tests_project.dart'
;
import
'test_data/tests_project.dart'
;
import
'test_driver.dart'
;
import
'test_utils.dart'
;
...
...
@@ -141,6 +142,37 @@ void batch2() {
});
}
void
batch3
(
)
{
final
IntegrationTestsProject
project
=
IntegrationTestsProject
();
late
Directory
tempDir
;
late
FlutterTestTestDriver
flutter
;
Future
<
void
>
initProject
()
async
{
tempDir
=
createResolvedTempDirectorySync
(
'integration_test_expression_eval_test.'
);
await
project
.
setUpIn
(
tempDir
);
flutter
=
FlutterTestTestDriver
(
tempDir
);
}
Future
<
void
>
cleanProject
()
async
{
await
flutter
.
waitForCompletion
();
tryToDelete
(
tempDir
);
}
testWithoutContext
(
'flutter integration test expression evaluation - can evaluate expressions in a test'
,
()
async
{
await
initProject
();
await
flutter
.
test
(
deviceId:
'flutter-tester'
,
testFile:
project
.
testFilePath
,
withDebugger:
true
,
beforeStart:
()
=>
flutter
.
addBreakpoint
(
project
.
breakpointUri
,
project
.
breakpointLine
),
);
await
flutter
.
waitForPause
();
await
evaluateTrivialExpressions
(
flutter
);
await
cleanProject
();
});
}
Future
<
void
>
evaluateTrivialExpressions
(
FlutterTestDriver
flutter
)
async
{
ObjRef
res
;
...
...
@@ -189,4 +221,5 @@ void expectValue(ObjRef result, String message) {
void
main
(
)
{
batch1
();
batch2
();
batch3
();
}
packages/flutter_tools/test/integration.shard/test_data/integration_tests_project.dart
View file @
3599b3a8
...
...
@@ -58,11 +58,11 @@ class IntegrationTestsProject extends Project implements TestsProject {
String
get
testFilePath
=>
fileSystem
.
path
.
join
(
dir
.
path
,
'integration_test'
,
'app_test.dart'
);
@override
Uri
get
breakpointUri
=>
throw
UnimplementedError
(
);
Uri
get
breakpointUri
=>
Uri
.
file
(
testFilePath
);
@override
Uri
get
breakpointAppUri
=>
throw
UnimplementedError
();
@override
int
get
breakpointLine
=>
throw
UnimplementedError
(
);
int
get
breakpointLine
=>
lineContaining
(
testContent
,
'// BREAKPOINT'
);
}
packages/flutter_tools/test/integration.shard/test_driver.dart
View file @
3599b3a8
...
...
@@ -763,6 +763,7 @@ class FlutterTestTestDriver extends FlutterTestDriver {
Future
<
void
>
test
({
String
testFile
=
'test/test.dart'
,
String
?
deviceId
,
bool
withDebugger
=
false
,
bool
pauseOnExceptions
=
false
,
bool
coverage
=
false
,
...
...
@@ -775,6 +776,8 @@ class FlutterTestTestDriver extends FlutterTestDriver {
'--machine'
,
if
(
coverage
)
'--coverage'
,
if
(
deviceId
!=
null
)
...<
String
>[
'-d'
,
deviceId
],
],
script:
testFile
,
withDebugger:
withDebugger
,
pauseOnExceptions:
pauseOnExceptions
,
beforeStart:
beforeStart
);
}
...
...
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