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

import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/codegen.dart';
import 'package:flutter_tools/src/commands/generate.dart';
import 'package:flutter_tools/src/convert.dart';
import 'package:mockito/mockito.dart';
10
import 'package:flutter_tools/src/globals.dart' as globals;
11 12

import '../../src/common.dart';
13
import '../../src/context.dart';
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
import '../../src/mocks.dart';
import '../../src/testbed.dart';

void main() {
  Testbed testbed;
  MockCodeGenerator mockCodeGenerator;
  MockCodegenDaemon mockCodegenDaemon;

  setUpAll(() {
    Cache.disableLocking();
  });

  tearDownAll(() {
    Cache.enableLocking();
  });

  setUp(() {
    mockCodegenDaemon = MockCodegenDaemon();
    mockCodeGenerator = MockCodeGenerator();
    when(mockCodegenDaemon.buildResults).thenAnswer((Invocation invocation) {
      return Stream<CodegenStatus>.fromIterable(<CodegenStatus>[
        CodegenStatus.Started,
        CodegenStatus.Succeeded,
      ]);
    });
    when(mockCodeGenerator.daemon(any)).thenAnswer((Invocation invocation) async {
      return mockCodegenDaemon;
    });
    testbed = Testbed(overrides: <Type, Generator>{
      CodeGenerator: () => mockCodeGenerator,
    });
  });

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
  test('Outputs deprecation warning from flutter generate', () => testbed.run(() async {
    final GenerateCommand command = GenerateCommand();
    applyMocksToCommand(command);
    globals.fs.file(globals.fs.path.join('lib', 'main.dart'))
      .createSync(recursive: true);
    globals.fs.currentDirectory
      .childDirectory('.dart_tool')
      .childDirectory('build')
      .childDirectory('abcdefg')
      .createSync(recursive: true);

    await createTestCommandRunner(command)
      .run(const <String>['generate']);

    expect(testLogger.errorText, contains(
      '"flutter generate" is deprecated, use "dart pub run build_runner" instead.'
    ));
    expect(testLogger.errorText, contains(
      'build_runner: 1.10.0'
    ));
  }));

69 70 71
  test('Outputs error information from flutter generate', () => testbed.run(() async {
    final GenerateCommand command = GenerateCommand();
    applyMocksToCommand(command);
72
    globals.fs.file(globals.fs.path.join('lib', 'main.dart'))
73
      .createSync(recursive: true);
74

75
    globals.fs.currentDirectory
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
      .childDirectory('.dart_tool')
      .childDirectory('build')
      .childDirectory('abcdefg')
      .childDirectory('error_cache')
      .childFile('foo_error')
      ..createSync(recursive: true)
      ..writeAsStringSync(json.encode(<dynamic>[
        'foo builder',
        <dynamic>[
          'a',
          'b',
          StackTrace.current.toString(),
        ]
      ]));

    await createTestCommandRunner(command)
      .run(const <String>['generate']);

94 95 96 97
    expect(testLogger.errorText, contains('a'));
    expect(testLogger.errorText, contains('b'));
    expect(testLogger.errorText, contains('foo builder'));
    expect(testLogger.errorText, isNot(contains('Error reading error')));
98 99 100 101 102
  }));
}

class MockCodeGenerator extends Mock implements CodeGenerator { }
class MockCodegenDaemon extends Mock implements CodegenDaemon { }