[flutter_conductor] pretty-print state JSON file (#87756)

This commit is contained in:
Christopher Fujino 2021-08-05 15:59:56 -07:00 committed by GitHub
parent 6b32482b93
commit 6dfa53b048
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 2 deletions

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:convert' show jsonDecode, jsonEncode;
import 'dart:convert' show JsonEncoder, jsonDecode;
import 'package:file/file.dart' show File;
import 'package:platform/platform.dart';
@ -230,10 +230,13 @@ ReleasePhase getNextPhase(ReleasePhase currentPhase) {
return nextPhase;
}
// Indent two spaces.
const JsonEncoder _encoder = JsonEncoder.withIndent(' ');
void writeStateToFile(File file, pb.ConductorState state, List<String> logs) {
state.logs.addAll(logs);
file.writeAsStringSync(
jsonEncode(state.toProto3Json()),
_encoder.convert(state.toProto3Json()),
flush: true,
);
}

View File

@ -0,0 +1,68 @@
// 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:conductor/proto/conductor_state.pb.dart' as pb;
import 'package:conductor/state.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
import './common.dart';
void main() {
test('writeStateToFile() pretty-prints JSON with 2 spaces', () {
final MemoryFileSystem fileSystem = MemoryFileSystem.test();
final File stateFile = fileSystem.file('/path/to/statefile.json')
..createSync(recursive: true);
const String candidateBranch = 'flutter-2.3-candidate.0';
final pb.ConductorState state = pb.ConductorState(
releaseChannel: 'stable',
releaseVersion: '2.3.4',
incrementLevel: 'z',
engine: pb.Repository(
candidateBranch: candidateBranch,
upstream: pb.Remote(
name: 'upstream',
url: 'https://github.com/flutter/engine.git',
),
),
framework: pb.Repository(
candidateBranch: candidateBranch,
upstream: pb.Remote(
name: 'upstream',
url: 'https://github.com/flutter/flutter.git',
),
),
);
writeStateToFile(
stateFile,
state,
<String>['[status] hello world'],
);
final String serializedState = stateFile.readAsStringSync();
const String expectedString = '''
{
"releaseChannel": "stable",
"releaseVersion": "2.3.4",
"engine": {
"candidateBranch": "flutter-2.3-candidate.0",
"upstream": {
"name": "upstream",
"url": "https://github.com/flutter/engine.git"
}
},
"framework": {
"candidateBranch": "flutter-2.3-candidate.0",
"upstream": {
"name": "upstream",
"url": "https://github.com/flutter/flutter.git"
}
},
"logs": [
"[status] hello world"
],
"incrementLevel": "z"
}''';
expect(serializedState, expectedString);
});
}