Skip to content

Commit ca67701

Browse files
authored
Fix flutter tools packages_test when run off bots (flutter#14692)
* Fix packages tests when run off bots * Tweak dependencies to make bots happy * Review comment
1 parent 24efb55 commit ca67701

File tree

5 files changed

+66
-17
lines changed

5 files changed

+66
-17
lines changed

packages/flutter_tools/lib/runner.dart

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ Future<int> run(
7373
context.putIfAbsent(Config, () => new Config());
7474

7575
// Order-independent context entries
76+
context.putIfAbsent(BotDetector, () => const BotDetector());
7677
context.putIfAbsent(DeviceManager, () => new DeviceManager());
7778
context.putIfAbsent(DevFSConfig, () => new DevFSConfig());
7879
context.putIfAbsent(Doctor, () => new Doctor());

packages/flutter_tools/lib/src/base/utils.dart

+29-16
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,40 @@ import 'context.dart';
1515
import 'file_system.dart';
1616
import 'platform.dart';
1717

18-
bool get isRunningOnBot {
19-
return
20-
platform.environment['BOT'] == 'true' ||
18+
final BotDetector _kBotDetector = const BotDetector();
19+
20+
class BotDetector {
21+
const BotDetector();
2122

22-
// https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables
23-
platform.environment['TRAVIS'] == 'true' ||
24-
platform.environment['CONTINUOUS_INTEGRATION'] == 'true' ||
25-
platform.environment.containsKey('CI') || // Travis and AppVeyor
23+
bool get isRunningOnBot {
24+
return
25+
platform.environment['BOT'] == 'true' ||
2626

27-
// https://www.appveyor.com/docs/environment-variables/
28-
platform.environment.containsKey('APPVEYOR') ||
27+
// https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables
28+
platform.environment['TRAVIS'] == 'true' ||
29+
platform.environment['CONTINUOUS_INTEGRATION'] == 'true' ||
30+
platform.environment.containsKey('CI') || // Travis and AppVeyor
2931

30-
// https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
31-
(platform.environment.containsKey('AWS_REGION') && platform.environment.containsKey('CODEBUILD_INITIATOR')) ||
32+
// https://www.appveyor.com/docs/environment-variables/
33+
platform.environment.containsKey('APPVEYOR') ||
3234

33-
// https://wiki.jenkins.io/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-belowJenkinsSetEnvironmentVariables
34-
platform.environment.containsKey('JENKINS_URL') ||
35+
// https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
36+
(platform.environment.containsKey('AWS_REGION') && platform.environment.containsKey('CODEBUILD_INITIATOR')) ||
3537

36-
// Properties on Flutter's Chrome Infra bots.
37-
platform.environment['CHROME_HEADLESS'] == '1' ||
38-
platform.environment.containsKey('BUILDBOT_BUILDERNAME');
38+
// https://wiki.jenkins.io/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-belowJenkinsSetEnvironmentVariables
39+
platform.environment.containsKey('JENKINS_URL') ||
40+
41+
// Properties on Flutter's Chrome Infra bots.
42+
platform.environment['CHROME_HEADLESS'] == '1' ||
43+
platform.environment.containsKey('BUILDBOT_BUILDERNAME');
44+
}
45+
}
46+
47+
bool get isRunningOnBot {
48+
if (context == null) {
49+
return _kBotDetector.isRunningOnBot;
50+
}
51+
return context[BotDetector].isRunningOnBot;
3952
}
4053

4154
String hex(List<int> bytes) {

packages/flutter_tools/lib/src/context_runner.dart

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'base/io.dart';
1313
import 'base/logger.dart';
1414
import 'base/os.dart';
1515
import 'base/platform.dart';
16+
import 'base/utils.dart';
1617
import 'cache.dart';
1718
import 'disabled_usage.dart';
1819
import 'usage.dart';
@@ -25,6 +26,7 @@ Future<Null> runInContext(List<String> args, Runner runner) {
2526
return executableContext.runInZone(() {
2627
// Initialize the context with some defaults.
2728
// This list must be kept in sync with lib/executable.dart.
29+
context.putIfAbsent(BotDetector, () => const BotDetector());
2830
context.putIfAbsent(Stdio, () => const Stdio());
2931
context.putIfAbsent(Platform, () => const LocalPlatform());
3032
context.putIfAbsent(FileSystem, () => const LocalFileSystem());

packages/flutter_tools/test/commands/packages_test.dart

+32-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:async';
77
import 'package:args/command_runner.dart';
88
import 'package:flutter_tools/src/base/file_system.dart' hide IOSink;
99
import 'package:flutter_tools/src/base/io.dart';
10+
import 'package:flutter_tools/src/base/utils.dart';
1011
import 'package:flutter_tools/src/cache.dart';
1112
import 'package:flutter_tools/src/commands/packages.dart';
1213
import 'package:process/process.dart';
@@ -16,6 +17,22 @@ import '../src/common.dart';
1617
import '../src/context.dart';
1718
import '../src/mocks.dart' show MockProcessManager, MockStdio, PromptingProcess;
1819

20+
class AlwaysTrueBotDetector implements BotDetector {
21+
const AlwaysTrueBotDetector();
22+
23+
@override
24+
bool get isRunningOnBot => true;
25+
}
26+
27+
28+
class AlwaysFalseBotDetector implements BotDetector {
29+
const AlwaysFalseBotDetector();
30+
31+
@override
32+
bool get isRunningOnBot => false;
33+
}
34+
35+
1936
void main() {
2037
Cache.disableLocking();
2138
group('packages get/upgrade', () {
@@ -221,7 +238,20 @@ void main() {
221238
mockStdio = new MockStdio();
222239
});
223240

224-
testUsingContext('test', () async {
241+
testUsingContext('test without bot', () async {
242+
await createTestCommandRunner(new PackagesCommand()).run(<String>['packages', 'test']);
243+
final List<String> commands = mockProcessManager.commands;
244+
expect(commands, hasLength(3));
245+
expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub'));
246+
expect(commands[1], 'run');
247+
expect(commands[2], 'test');
248+
}, overrides: <Type, Generator>{
249+
ProcessManager: () => mockProcessManager,
250+
Stdio: () => mockStdio,
251+
BotDetector: () => const AlwaysFalseBotDetector(),
252+
});
253+
254+
testUsingContext('test with bot', () async {
225255
await createTestCommandRunner(new PackagesCommand()).run(<String>['packages', 'test']);
226256
final List<String> commands = mockProcessManager.commands;
227257
expect(commands, hasLength(4));
@@ -232,6 +262,7 @@ void main() {
232262
}, overrides: <Type, Generator>{
233263
ProcessManager: () => mockProcessManager,
234264
Stdio: () => mockStdio,
265+
BotDetector: () => const AlwaysTrueBotDetector(),
235266
});
236267

237268
testUsingContext('run', () async {

packages/flutter_tools/test/src/context.dart

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:flutter_tools/src/base/logger.dart';
1313
import 'package:flutter_tools/src/base/os.dart';
1414
import 'package:flutter_tools/src/base/platform.dart';
1515
import 'package:flutter_tools/src/base/port_scanner.dart';
16+
import 'package:flutter_tools/src/base/utils.dart';
1617
import 'package:flutter_tools/src/cache.dart';
1718
import 'package:flutter_tools/src/devfs.dart';
1819
import 'package:flutter_tools/src/device.dart';
@@ -91,6 +92,7 @@ void testUsingContext(String description, dynamic testMethod(), {
9192

9293
// The context always starts with these value since others depend on them.
9394
testContext
95+
..putIfAbsent(BotDetector, () => const BotDetector())
9496
..putIfAbsent(Stdio, () => const Stdio())
9597
..putIfAbsent(Platform, () => const LocalPlatform())
9698
..putIfAbsent(FileSystem, () => const LocalFileSystem())

0 commit comments

Comments
 (0)