xcode_validator_test.dart 4.01 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
import 'package:flutter_tools/src/base/user_messages.dart';
6 7 8 9 10 11
import 'package:flutter_tools/src/doctor.dart';
import 'package:flutter_tools/src/macos/xcode.dart';
import 'package:flutter_tools/src/macos/xcode_validator.dart';
import 'package:mockito/mockito.dart';
import 'package:process/process.dart';

12 13
import '../../src/common.dart';
import '../../src/context.dart';
14 15 16 17 18 19 20 21 22 23 24 25

class MockProcessManager extends Mock implements ProcessManager {}
class MockXcode extends Mock implements Xcode {}

void main() {
  group('Xcode validation', () {
    MockXcode xcode;

    setUp(() {
      xcode = MockXcode();
    });

26
    testWithoutContext('Emits missing status when Xcode is not installed', () async {
27 28
      when(xcode.isInstalled).thenReturn(false);
      when(xcode.xcodeSelectPath).thenReturn(null);
29
      final XcodeValidator validator = XcodeValidator(xcode: xcode, userMessages: UserMessages());
30 31 32 33
      final ValidationResult result = await validator.validate();
      expect(result.type, ValidationType.missing);
    });

34
    testWithoutContext('Emits missing status when Xcode installation is incomplete', () async {
35 36
      when(xcode.isInstalled).thenReturn(false);
      when(xcode.xcodeSelectPath).thenReturn('/Library/Developer/CommandLineTools');
37
      final XcodeValidator validator = XcodeValidator(xcode: xcode, userMessages: UserMessages());
38 39 40 41
      final ValidationResult result = await validator.validate();
      expect(result.type, ValidationType.missing);
    });

42
    testWithoutContext('Emits partial status when Xcode version too low', () async {
43 44 45 46 47 48
      when(xcode.isInstalled).thenReturn(true);
      when(xcode.versionText)
          .thenReturn('Xcode 7.0.1\nBuild version 7C1002\n');
      when(xcode.isInstalledAndMeetsVersionCheck).thenReturn(false);
      when(xcode.eulaSigned).thenReturn(true);
      when(xcode.isSimctlInstalled).thenReturn(true);
49
      final XcodeValidator validator = XcodeValidator(xcode: xcode, userMessages: UserMessages());
50 51 52 53
      final ValidationResult result = await validator.validate();
      expect(result.type, ValidationType.partial);
    });

54
    testWithoutContext('Emits partial status when Xcode EULA not signed', () async {
55 56 57 58 59 60
      when(xcode.isInstalled).thenReturn(true);
      when(xcode.versionText)
          .thenReturn('Xcode 8.2.1\nBuild version 8C1002\n');
      when(xcode.isInstalledAndMeetsVersionCheck).thenReturn(true);
      when(xcode.eulaSigned).thenReturn(false);
      when(xcode.isSimctlInstalled).thenReturn(true);
61
      final XcodeValidator validator = XcodeValidator(xcode: xcode, userMessages: UserMessages());
62 63 64 65
      final ValidationResult result = await validator.validate();
      expect(result.type, ValidationType.partial);
    });

66
    testWithoutContext('Emits partial status when simctl is not installed', () async {
67 68 69 70 71 72
      when(xcode.isInstalled).thenReturn(true);
      when(xcode.versionText)
          .thenReturn('Xcode 8.2.1\nBuild version 8C1002\n');
      when(xcode.isInstalledAndMeetsVersionCheck).thenReturn(true);
      when(xcode.eulaSigned).thenReturn(true);
      when(xcode.isSimctlInstalled).thenReturn(false);
73
      final XcodeValidator validator = XcodeValidator(xcode: xcode, userMessages: UserMessages());
74 75 76 77 78
      final ValidationResult result = await validator.validate();
      expect(result.type, ValidationType.partial);
    });


79
    testWithoutContext('Succeeds when all checks pass', () async {
80 81 82 83 84 85
      when(xcode.isInstalled).thenReturn(true);
      when(xcode.versionText)
          .thenReturn('Xcode 8.2.1\nBuild version 8C1002\n');
      when(xcode.isInstalledAndMeetsVersionCheck).thenReturn(true);
      when(xcode.eulaSigned).thenReturn(true);
      when(xcode.isSimctlInstalled).thenReturn(true);
86
      final XcodeValidator validator = XcodeValidator(xcode: xcode, userMessages: UserMessages());
87 88 89 90 91
      final ValidationResult result = await validator.validate();
      expect(result.type, ValidationType.installed);
    });
  });
}