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
ef2879a4
Unverified
Commit
ef2879a4
authored
Jun 15, 2021
by
Jenn Magder
Committed by
GitHub
Jun 15, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Set up iOS native integration_tests in ui example project (#84596)
parent
73df0697
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
344 additions
and
66 deletions
+344
-66
native_ui_tests_ios32.dart
dev/devicelab/bin/tasks/native_ui_tests_ios32.dart
+2
-56
devices.dart
dev/devicelab/lib/framework/devices.dart
+2
-2
framework.dart
dev/devicelab/lib/framework/framework.dart
+1
-2
ios.dart
dev/devicelab/lib/framework/ios.dart
+60
-0
integration_tests.dart
dev/devicelab/lib/tasks/integration_tests.dart
+14
-0
integration_test.dart
...tegration_tests/ui/integration_test/integration_test.dart
+3
-0
Podfile
dev/integration_tests/ui/ios/Podfile
+4
-0
project.pbxproj
...integration_tests/ui/ios/Runner.xcodeproj/project.pbxproj
+205
-0
Runner.xcscheme
...s/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+12
-6
contents.xcworkspacedata
..._tests/ui/ios/Runner.xcworkspace/contents.xcworkspacedata
+3
-0
IDEWorkspaceChecks.plist
.../Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+8
-0
Info.plist
dev/integration_tests/ui/ios/RunnerTests/Info.plist
+22
-0
RunnerTests.m
dev/integration_tests/ui/ios/RunnerTests/RunnerTests.m
+8
-0
No files found.
dev/devicelab/bin/tasks/native_ui_tests_ios32.dart
View file @
ef2879a4
...
...
@@ -4,14 +4,11 @@
// @dart = 2.8
import
'dart:io'
;
import
'package:flutter_devicelab/framework/devices.dart'
;
import
'package:flutter_devicelab/framework/framework.dart'
;
import
'package:flutter_devicelab/framework/
host_agent
.dart'
;
import
'package:flutter_devicelab/framework/
ios
.dart'
;
import
'package:flutter_devicelab/framework/task_result.dart'
;
import
'package:flutter_devicelab/framework/utils.dart'
;
import
'package:path/path.dart'
as
path
;
Future
<
void
>
main
()
async
{
deviceOperatingSystem
=
DeviceOperatingSystem
.
ios
;
...
...
@@ -38,59 +35,8 @@ Future<void> main() async {
});
section
(
'Run platform unit tests'
);
final
Device
device
=
await
devices
.
workingDevice
;
final
Map
<
String
,
String
>
environment
=
Platform
.
environment
;
// If not running on CI, inject the Flutter team code signing properties.
final
String
developmentTeam
=
environment
[
'FLUTTER_XCODE_DEVELOPMENT_TEAM'
]
??
'S8QB4VV633'
;
final
String
codeSignStyle
=
environment
[
'FLUTTER_XCODE_CODE_SIGN_STYLE'
];
final
String
provisioningProfile
=
environment
[
'FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER'
];
final
String
resultBundleTemp
=
Directory
.
systemTemp
.
createTempSync
(
'flutter_native_ui_tests_ios32_xcresult.'
).
path
;
final
String
resultBundlePath
=
path
.
join
(
resultBundleTemp
,
'result'
);
final
int
testResultExit
=
await
exec
(
'xcodebuild'
,
<
String
>[
'-workspace'
,
'Runner.xcworkspace'
,
'-scheme'
,
'Runner'
,
'-configuration'
,
'Release'
,
'-destination'
,
'id=
${device.deviceId}
'
,
'-resultBundlePath'
,
resultBundlePath
,
'test'
,
'COMPILER_INDEX_STORE_ENABLE=NO'
,
'DEVELOPMENT_TEAM=
$developmentTeam
'
,
if
(
codeSignStyle
!=
null
)
'CODE_SIGN_STYLE=
$codeSignStyle
'
,
if
(
provisioningProfile
!=
null
)
'PROVISIONING_PROFILE_SPECIFIER=
$provisioningProfile
'
,
],
workingDirectory:
path
.
join
(
projectDirectory
,
'ios'
),
canFail:
true
,
);
if
(
testResultExit
!=
0
)
{
// Zip the test results to the artifacts directory for upload.
final
String
zipPath
=
path
.
join
(
hostAgent
.
dumpDirectory
.
path
,
'native_ui_tests_ios32-
${DateTime.now().toLocal().toIso8601String()}
.zip'
);
await
exec
(
'zip'
,
<
String
>[
'-r'
,
'-9'
,
zipPath
,
'result.xcresult'
,
],
workingDirectory:
resultBundleTemp
,
canFail:
true
,
// Best effort to get the logs.
);
return
TaskResult
.
failure
(
'Platform unit tests failed'
);
}
await
runNativeIosXcodeTests
(
device
,
projectDirectory
);
return
TaskResult
.
success
(
null
);
});
...
...
dev/devicelab/lib/framework/devices.dart
View file @
ef2879a4
...
...
@@ -879,8 +879,8 @@ class IosDevice extends Device {
Future
<
void
>
stopLoggingToSink
()
async
{
assert
(
_loggingProcess
!=
null
);
_abortedLogging
=
true
;
_loggingProcess
.
kill
();
await
_loggingProcess
.
exitCode
;
_loggingProcess
?
.
kill
();
await
_loggingProcess
?
.
exitCode
;
}
// The methods below are stubs for now. They will need to be expanded.
...
...
dev/devicelab/lib/framework/framework.dart
View file @
ef2879a4
...
...
@@ -161,9 +161,8 @@ class _TaskRunner {
result
=
await
futureResult
;
}
finally
{
if
(
device
!=
null
&&
device
.
canStreamLogs
)
{
assert
(
sink
!=
null
);
await
device
.
stopLoggingToSink
();
await
sink
.
close
();
await
sink
?
.
close
();
}
}
...
...
dev/devicelab/lib/framework/ios.dart
View file @
ef2879a4
...
...
@@ -5,7 +5,13 @@
// @dart = 2.8
import
'dart:convert'
;
import
'dart:io'
;
import
'package:path/path.dart'
as
path
;
import
'devices.dart'
;
import
'host_agent.dart'
;
import
'task_result.dart'
;
import
'utils.dart'
;
typedef
SimulatorFunction
=
Future
<
void
>
Function
(
String
deviceId
);
...
...
@@ -144,3 +150,57 @@ Future<void> removeIOSimulator(String deviceId) async {
);
}
}
Future
<
void
>
runNativeIosXcodeTests
(
Device
device
,
String
projectDirectory
)
async
{
final
Map
<
String
,
String
>
environment
=
Platform
.
environment
;
// If not running on CI, inject the Flutter team code signing properties.
final
String
developmentTeam
=
environment
[
'FLUTTER_XCODE_DEVELOPMENT_TEAM'
]
??
'S8QB4VV633'
;
final
String
codeSignStyle
=
environment
[
'FLUTTER_XCODE_CODE_SIGN_STYLE'
];
final
String
provisioningProfile
=
environment
[
'FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER'
];
final
String
resultBundleTemp
=
Directory
.
systemTemp
.
createTempSync
(
'flutter_native_ios_tests_xcresult.'
).
path
;
final
String
resultBundlePath
=
path
.
join
(
resultBundleTemp
,
'result'
);
final
int
testResultExit
=
await
exec
(
'xcodebuild'
,
<
String
>[
'-workspace'
,
'Runner.xcworkspace'
,
'-scheme'
,
'Runner'
,
'-configuration'
,
'Release'
,
'-destination'
,
'id=
${device.deviceId}
'
,
'-resultBundlePath'
,
resultBundlePath
,
'test'
,
'COMPILER_INDEX_STORE_ENABLE=NO'
,
'DEVELOPMENT_TEAM=
$developmentTeam
'
,
if
(
codeSignStyle
!=
null
)
'CODE_SIGN_STYLE=
$codeSignStyle
'
,
if
(
provisioningProfile
!=
null
)
'PROVISIONING_PROFILE_SPECIFIER=
$provisioningProfile
'
,
],
workingDirectory:
path
.
join
(
projectDirectory
,
'ios'
),
canFail:
true
,
);
if
(
testResultExit
!=
0
)
{
if
(
hostAgent
.
dumpDirectory
!=
null
)
{
// Zip the test results to the artifacts directory for upload.
final
String
zipPath
=
path
.
join
(
hostAgent
.
dumpDirectory
.
path
,
'xcode_test_results_-
${DateTime.now().toLocal().toIso8601String()}
.zip'
);
await
exec
(
'zip'
,
<
String
>[
'-r'
,
'-9'
,
zipPath
,
'result.xcresult'
,
],
workingDirectory:
resultBundleTemp
,
canFail:
true
,
// Best effort to get the logs.
);
}
throw
TaskResult
.
failure
(
'Xcode iOS unit tests failed'
);
}
}
dev/devicelab/lib/tasks/integration_tests.dart
View file @
ef2879a4
...
...
@@ -7,6 +7,7 @@
import
'../framework/devices.dart'
;
import
'../framework/framework.dart'
;
import
'../framework/host_agent.dart'
;
import
'../framework/ios.dart'
;
import
'../framework/task_result.dart'
;
import
'../framework/utils.dart'
;
...
...
@@ -193,6 +194,19 @@ class IntegrationTest {
];
await
flutter
(
'test'
,
options:
options
);
if
(
device
is
IosDevice
)
{
section
(
'Run integration_test from Xcode'
);
final
List
<
String
>
options
=
<
String
>[
'ios'
,
'--config-only'
,
testTarget
,
];
await
flutter
(
'build'
,
options:
options
);
await
runNativeIosXcodeTests
(
device
,
testDirectory
);
}
return
TaskResult
.
success
(
null
);
});
}
...
...
dev/integration_tests/ui/integration_test/integration_test.dart
View file @
ef2879a4
...
...
@@ -3,10 +3,13 @@
// found in the LICENSE file.
import
'package:flutter_test/flutter_test.dart'
;
import
'package:integration_test/integration_test.dart'
;
import
'package:integration_ui/build_mode.dart'
as
app
;
void
main
(
)
{
group
(
'Integration Test'
,
()
{
IntegrationTestWidgetsFlutterBinding
.
ensureInitialized
();
testWidgets
(
'smoke test'
,
(
WidgetTester
tester
)
async
{
app
.
main
();
await
tester
.
pumpAndSettle
();
...
...
dev/integration_tests/ui/ios/Podfile
View file @
ef2879a4
...
...
@@ -29,6 +29,10 @@ flutter_ios_podfile_setup
target
'Runner'
do
flutter_install_all_ios_pods
File
.
dirname
(
File
.
realpath
(
__FILE__
))
target
'RunnerTests'
do
inherit!
:search_paths
end
end
post_install
do
|
installer
|
...
...
dev/integration_tests/ui/ios/Runner.xcodeproj/project.pbxproj
View file @
ef2879a4
This diff is collapsed.
Click to expand it.
dev/integration_tests/ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
View file @
ef2879a4
...
...
@@ -27,8 +27,6 @@
selectedDebuggerIdentifier =
"Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier =
"Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv =
"YES"
>
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier =
"primary"
...
...
@@ -38,8 +36,18 @@
ReferencedContainer =
"container:Runner.xcodeproj"
>
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
<Testables>
<TestableReference
skipped =
"NO"
>
<BuildableReference
BuildableIdentifier =
"primary"
BlueprintIdentifier =
"F708CDE82677EA0F00ABB9ED"
BuildableName =
"RunnerTests.xctest"
BlueprintName =
"RunnerTests"
ReferencedContainer =
"container:Runner.xcodeproj"
>
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration =
"Debug"
...
...
@@ -61,8 +69,6 @@
ReferencedContainer =
"container:Runner.xcodeproj"
>
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration =
"Profile"
...
...
dev/integration_tests/ui/ios/Runner.xcworkspace/contents.xcworkspacedata
View file @
ef2879a4
...
...
@@ -4,4 +4,7 @@
<FileRef
location =
"group:Runner.xcodeproj"
>
</FileRef>
<FileRef
location =
"group:Pods/Pods.xcodeproj"
>
</FileRef>
</Workspace>
dev/integration_tests/ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
0 → 100644
View file @
ef2879a4
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
IDEDidComputeMac32BitWarning
<
/k
e
y
>
<
tru
e
/
>
<
/
d
i
c
t
>
<
/plist
>
dev/integration_tests/ui/ios/RunnerTests/Info.plist
0 → 100644
View file @
ef2879a4
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
CFBundleDevelopmentRegion
<
/k
e
y
>
<
string
>
$
(
DEVELOPMENT_LANGUAGE
)<
/string
>
<
k
e
y
>
CFBundleExecutable
<
/k
e
y
>
<
string
>
$
(
EXECUTABLE_NAME
)<
/string
>
<
k
e
y
>
CFBundleIdentifier
<
/k
e
y
>
<
string
>
$
(
PRODUCT_BUNDLE_IDENTIFIER
)<
/string
>
<
k
e
y
>
CFBundleInfoDictionaryVersion
<
/k
e
y
>
<
string
>
6.0
<
/string
>
<
k
e
y
>
CFBundleName
<
/k
e
y
>
<
string
>
$
(
PRODUCT_NAME
)<
/string
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
string
>
$
(
PRODUCT_BUNDLE_PACKAGE_TYPE
)<
/string
>
<
k
e
y
>
CFBundleShortVersionString
<
/k
e
y
>
<
string
>
1.0
<
/string
>
<
k
e
y
>
CFBundleVersion
<
/k
e
y
>
<
string
>
1
<
/string
>
<
/
d
i
c
t
>
<
/plist
>
dev/integration_tests/ui/ios/RunnerTests/RunnerTests.m
0 → 100644
View file @
ef2879a4
//
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
XCTest
;
@
import
integration
_
test
;
INTEGRATION
_
TEST
_
IOS
_
RUNNER
(
RunnerTests
)
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