// 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 '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'; import 'package:flutter_tools/src/globals.dart' as globals; import '../../src/common.dart'; import '../../src/context.dart'; 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.fromIterable([ CodegenStatus.Started, CodegenStatus.Succeeded, ]); }); when(mockCodeGenerator.daemon(any)).thenAnswer((Invocation invocation) async { return mockCodegenDaemon; }); testbed = Testbed(overrides: { CodeGenerator: () => mockCodeGenerator, }); }); test('Outputs error information 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') .childDirectory('error_cache') .childFile('foo_error') ..createSync(recursive: true) ..writeAsStringSync(json.encode([ 'foo builder', [ 'a', 'b', StackTrace.current.toString(), ] ])); await createTestCommandRunner(command) .run(const ['generate']); expect(testLogger.errorText, contains('a')); expect(testLogger.errorText, contains('b')); expect(testLogger.errorText, contains('foo builder')); expect(testLogger.errorText, isNot(contains('Error reading error'))); })); } class MockCodeGenerator extends Mock implements CodeGenerator { } class MockCodegenDaemon extends Mock implements CodegenDaemon { }