build_test.dart 3.3 KB
Newer Older
1 2 3 4
// 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.

5 6
// @dart = 2.8

7
import 'package:args/args.dart';
8
import 'package:flutter_tools/src/build_info.dart';
9
import 'package:flutter_tools/src/commands/attach.dart';
10
import 'package:flutter_tools/src/commands/build.dart';
11 12 13 14 15
import 'package:flutter_tools/src/commands/build_aar.dart';
import 'package:flutter_tools/src/commands/build_apk.dart';
import 'package:flutter_tools/src/commands/build_appbundle.dart';
import 'package:flutter_tools/src/commands/build_fuchsia.dart';
import 'package:flutter_tools/src/commands/build_ios.dart';
16
import 'package:flutter_tools/src/commands/build_ios_framework.dart';
17 18 19 20
import 'package:flutter_tools/src/commands/build_linux.dart';
import 'package:flutter_tools/src/commands/build_macos.dart';
import 'package:flutter_tools/src/commands/build_web.dart';
import 'package:flutter_tools/src/commands/build_windows.dart';
21
import 'package:flutter_tools/src/globals.dart' as globals;
22
import 'package:flutter_tools/src/runner/flutter_command.dart';
23 24 25 26 27 28

import '../../src/common.dart';
import '../../src/context.dart';

void main() {
  testUsingContext('All build commands support null safety options', () {
29
    final List<FlutterCommand> commands = <FlutterCommand>[
30 31 32 33 34 35
      BuildWindowsCommand(verboseHelp: false),
      BuildLinuxCommand(verboseHelp: false),
      BuildMacosCommand(verboseHelp: false),
      BuildWebCommand(verboseHelp: false),
      BuildApkCommand(verboseHelp: false),
      BuildIOSCommand(verboseHelp: false),
36
      BuildIOSArchiveCommand(verboseHelp: false),
37 38 39
      BuildAppBundleCommand(verboseHelp: false),
      BuildFuchsiaCommand(verboseHelp: false),
      BuildAarCommand(verboseHelp: false),
40
      BuildIOSFrameworkCommand(verboseHelp: false, buildSystem: globals.buildSystem),
41
      AttachCommand(verboseHelp: false),
42 43
    ];

44
    for (final FlutterCommand command in commands) {
45 46 47 48 49 50 51 52 53
      final ArgResults results = command.argParser.parse(<String>[
        '--sound-null-safety',
        '--enable-experiment=non-nullable',
      ]);

      expect(results.wasParsed('sound-null-safety'), true);
      expect(results.wasParsed('enable-experiment'), true);
    }
  });
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

  testUsingContext('BuildSubCommand displays current null safety mode', () async {
    const BuildInfo unsound = BuildInfo(
      BuildMode.debug,
      '',
      trackWidgetCreation: false,
      nullSafetyMode: NullSafetyMode.unsound,
      treeShakeIcons: false,
    );
    const BuildInfo sound = BuildInfo(
      BuildMode.debug,
      '',
      trackWidgetCreation: false,
      nullSafetyMode: NullSafetyMode.sound,
      treeShakeIcons: false,
    );

    FakeBuildSubCommand().test(unsound);
72
    expect(testLogger.statusText, contains('Building without sound null safety'));
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94

    testLogger.clear();
    FakeBuildSubCommand().test(sound);
    expect(testLogger.statusText, contains('💪 Building with sound null safety 💪'));
  });
}

class FakeBuildSubCommand extends BuildSubCommand {
  @override
  String get description => throw UnimplementedError();

  @override
  String get name => throw UnimplementedError();

  void test(BuildInfo buildInfo) {
    displayNullSafetyMode(buildInfo);
  }

  @override
  Future<FlutterCommandResult> runCommand() {
    throw UnimplementedError();
  }
95
}