Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build_runner/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 2.9.1-wip

- Internal changes for `build_test`.

## 2.9.0

- Watch mode: handle builder code and config changes without recompiling or
Expand Down
8 changes: 5 additions & 3 deletions build_runner/lib/src/build/build.dart
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,11 @@ class Build {
}

_resolvers.reset();
buildLog.finishBuild(
result: result.status == BuildStatus.success,
outputs: result.outputs.length,
result = result.copyWith(
errors: buildLog.finishBuild(
result: result.status == BuildStatus.success,
outputs: result.outputs.length,
),
);
return result;
}
Expand Down
25 changes: 17 additions & 8 deletions build_runner/lib/src/build/build_result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ class BuildResult {
/// The type of failure.
final FailureType? failureType;

/// Errors reported.
final BuiltList<String> errors;

/// All outputs created/updated during this build.
final BuiltList<AssetId> outputs;

Expand All @@ -30,6 +33,7 @@ class BuildResult {

BuildResult({
required this.status,
BuiltList<String>? errors,
BuiltList<AssetId>? outputs,
required this.buildOutputReader,
this.performance,
Expand All @@ -38,16 +42,21 @@ class BuildResult {
failureType == null && status == BuildStatus.failure
? FailureType.general
: failureType,
errors = errors ?? BuiltList(),
outputs = outputs ?? BuiltList();

BuildResult copyWith({BuildStatus? status, FailureType? failureType}) =>
BuildResult(
status: status ?? this.status,
outputs: outputs,
buildOutputReader: buildOutputReader,
performance: performance,
failureType: failureType ?? this.failureType,
);
BuildResult copyWith({
BuildStatus? status,
FailureType? failureType,
BuiltList<String>? errors,
}) => BuildResult(
status: status ?? this.status,
errors: errors ?? this.errors,
outputs: outputs,
buildOutputReader: buildOutputReader,
performance: performance,
failureType: failureType ?? this.failureType,
);

@override
String toString() {
Expand Down
14 changes: 13 additions & 1 deletion build_runner/lib/src/logging/build_log.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import 'dart:math';

import 'package:build/build.dart' show AssetId;
import 'package:built_collection/built_collection.dart';

import '../bootstrap/build_process_state.dart';
import '../build_plan/phase.dart';
Expand Down Expand Up @@ -67,6 +68,9 @@ class BuildLog {
/// The messages logged, bucketed by build phase.
final BuildLogMessages _messages = BuildLogMessages();

/// Errors logged.
final ListBuilder<String> _errors = ListBuilder();

/// Progress by build phase.
final Map<String, _PhaseProgress> _phaseProgress = {};

Expand Down Expand Up @@ -167,6 +171,7 @@ class BuildLog {

/// Logs an `build_runner` error.
void error(String message) {
_errors.add(message);
if (_display.displayingBlocks) {
_messages.add(severity: Severity.error, message);
_display.block(render());
Expand All @@ -182,6 +187,7 @@ class BuildLog {
String? phaseName,
String? context,
}) {
if (severity == Severity.error) _errors.add(message);
if (_display.displayingBlocks) {
_messages.add(
severity: severity,
Expand Down Expand Up @@ -339,7 +345,9 @@ class BuildLog {
}

/// Logs that the build has finished with [result] and the count of [outputs].
void finishBuild({required bool result, required int outputs}) {
///
/// Returns the list of errors logged.
BuiltList<String> finishBuild({required bool result, required int outputs}) {
_tick();
final displayingBlocks = _display.displayingBlocks;
_status = [
Expand All @@ -362,6 +370,10 @@ class BuildLog {
AnsiBufferLine(_status).toString(),
);
}

final errors = _errors.build();
_errors.clear();
return errors;
}

/// Renders [message] with optional [error] and [stackTrace].
Expand Down
2 changes: 1 addition & 1 deletion build_runner/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: build_runner
version: 2.9.0
version: 2.9.1-wip
description: A build system for Dart code generation and modular compilation.
repository: https://github.com/dart-lang/build/tree/master/build_runner
resolution: workspace
Expand Down
42 changes: 22 additions & 20 deletions build_runner/test/build/build_error_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import 'dart:async';

import 'package:build/build.dart';
import 'package:build_runner/src/build/build_result.dart';
import 'package:build_test/build_test.dart';
import 'package:logging/logging.dart';
import 'package:test/test.dart';
Expand All @@ -14,14 +13,13 @@ import '../common/common.dart';

void main() {
test('should fail if a severe logged', () async {
expect(
(await testBuilders(
[_LoggingBuilder(Level.SEVERE)],
{'a|lib/a.dart': ''},
outputs: {'a|lib/a.dart.empty': ''},
)).buildResult.status,
BuildStatus.failure,
final result = await testBuilders(
[_LoggingBuilder(Level.SEVERE)],
{'a|lib/a.dart': ''},
outputs: {'a|lib/a.dart.empty': ''},
);
expect(result.succeeded, false);
expect(result.errors, ['Log message for a|lib/a.dart.']);
});

test('should fail if a severe was logged on a previous build', () async {
Expand All @@ -30,7 +28,8 @@ void main() {
{'a|lib/a.dart': ''},
outputs: {'a|lib/a.dart.empty': ''},
);
expect(result.buildResult.status, BuildStatus.failure);
expect(result.succeeded, false);
expect(result.errors, ['Log message for a|lib/a.dart.']);

final builder = _LoggingBuilder(Level.SEVERE);
result = await testBuilders(
Expand All @@ -40,7 +39,8 @@ void main() {
readerWriter: result.readerWriter,
outputs: {'a|lib/a.dart.empty': ''},
);
expect(result.buildResult.status, BuildStatus.failure);
expect(result.succeeded, false);
expect(result.errors, ['Log message for a|lib/a.dart.']);
// Should have failed without actually building again.
expect(builder.built, false);
});
Expand All @@ -53,7 +53,8 @@ void main() {
{'a|lib/a.dart': ''},
outputs: {'a|lib/a.dart.empty': ''},
);
expect(result.buildResult.status, BuildStatus.failure);
expect(result.succeeded, false);
expect(result.errors, ['Log message for a|lib/a.dart.']);

result = await testBuilders(
[_LoggingBuilder(Level.WARNING)],
Expand All @@ -62,18 +63,18 @@ void main() {
readerWriter: result.readerWriter,
outputs: {'a|lib/a.dart.empty': ''},
);
expect(result.buildResult.status, BuildStatus.success);
expect(result.succeeded, true);
expect(result.errors, isEmpty);
},
);

test('should fail if an exception is thrown', () async {
expect(
(await testBuilders(
[TestBuilder(build: (_, _) => throw Exception('Some build failure'))],
{'a|lib/a.txt': ''},
)).buildResult.status,
BuildStatus.failure,
final result = await testBuilders(
[TestBuilder(build: (_, _) => throw Exception('Some build failure'))],
{'a|lib/a.txt': ''},
);
expect(result.succeeded, false);
expect(result.errors, ['Exception: Some build failure']);
});

test(
Expand Down Expand Up @@ -110,7 +111,8 @@ void main() {
],
{'a|lib/a.txt': ''},
);
expect(result.buildResult.status, BuildStatus.failure);
expect(result.succeeded, false);
expect(result.errors, ['Wrote an output then failed']);
},
);
}
Expand All @@ -124,7 +126,7 @@ class _LoggingBuilder implements Builder {
@override
Future<void> build(BuildStep buildStep) async {
built = true;
log.log(level, buildStep.inputId.toString());
log.log(level, 'Log message for ${buildStep.inputId}.');
await buildStep.canRead(buildStep.inputId);
await buildStep.writeAsString(buildStep.inputId.addExtension('.empty'), '');
}
Expand Down
4 changes: 2 additions & 2 deletions build_runner/test/build/build_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -889,8 +889,8 @@ targets:
(await testBuilders(
[TestBuilder(build: copyFrom(makeAssetId('a|.dart_tool/any_file')))],
{'a|lib/a.txt': 'a', 'a|.dart_tool/any_file': 'content'},
)).buildResult.status,
BuildStatus.failure,
)).succeeded,
false,
);
});

Expand Down
7 changes: 3 additions & 4 deletions build_runner/test/build/write_cache_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import 'dart:async';

import 'package:build/build.dart';
import 'package:build_runner/src/build/build_result.dart';
import 'package:build_test/build_test.dart';
import 'package:test/test.dart';

Expand All @@ -25,7 +24,7 @@ void main() {
readerWriter: readerWriter,
enableLowResourceMode: true,
);
expect(result.buildResult.status, BuildStatus.success);
expect(result.succeeded, true);
});

test('with caching writes wait until build completion', () async {
Expand All @@ -40,7 +39,7 @@ void main() {
readerWriter: readerWriter,
enableLowResourceMode: false,
);
expect(result.buildResult.status, BuildStatus.success);
expect(result.succeeded, true);
expect(
readerWriter.testing.assets,
containsAll([
Expand All @@ -66,7 +65,7 @@ void main() {
readerWriter: readerWriter,
enableLowResourceMode: false,
);
expect(result.buildResult.status, BuildStatus.success);
expect(result.succeeded, true);
});
}

Expand Down
5 changes: 2 additions & 3 deletions build_runner/test/build_plan/build_triggers_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:analyzer/dart/analysis/utilities.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:build/build.dart';
import 'package:build_config/build_config.dart';
import 'package:build_runner/src/build/build_result.dart';
import 'package:build_runner/src/build_plan/build_triggers.dart';
import 'package:build_test/build_test.dart';
import 'package:test/test.dart';
Expand Down Expand Up @@ -250,7 +249,7 @@ triggers:
outputs: {},
testingBuilderConfig: false,
);
expect(result.buildResult.status, BuildStatus.success);
expect(result.succeeded, true);
});

test('trigger builder in same file', () async {
Expand Down Expand Up @@ -295,7 +294,7 @@ triggers:
outputs: {},
testingBuilderConfig: false,
);
expect(result.buildResult.status, BuildStatus.success);
expect(result.succeeded, true);
});

test('trigger builder in part file', () async {
Expand Down
7 changes: 7 additions & 0 deletions build_test/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
## 3.5.0-wip

- Improve `TestBuilderResult`: add `succeeded`, `outputs` and `errors`.
Deprecate `buildResult` in favor of these new members.
- Add `verbose` to `testBuilders` and related methods. Like the command line
flag it enables info logging from builders.

## 3.4.1

- Use `build_runner` 2.9.0.
Expand Down
Loading