From 6dfa53b0484cc03deed7e5fac43b341820f3a186 Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Thu, 5 Aug 2021 15:59:56 -0700 Subject: [PATCH] [flutter_conductor] pretty-print state JSON file (#87756) --- dev/conductor/lib/state.dart | 7 ++- dev/conductor/test/state_test.dart | 68 ++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 dev/conductor/test/state_test.dart diff --git a/dev/conductor/lib/state.dart b/dev/conductor/lib/state.dart index e0eabab44f4..9af4e8f16b9 100644 --- a/dev/conductor/lib/state.dart +++ b/dev/conductor/lib/state.dart @@ -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 logs) { state.logs.addAll(logs); file.writeAsStringSync( - jsonEncode(state.toProto3Json()), + _encoder.convert(state.toProto3Json()), flush: true, ); } diff --git a/dev/conductor/test/state_test.dart b/dev/conductor/test/state_test.dart new file mode 100644 index 00000000000..e5db587a8f7 --- /dev/null +++ b/dev/conductor/test/state_test.dart @@ -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, + ['[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); + }); +}