blob: f5269b5a92bb0295d5f450c78232cbc9acffb996 [file] [log] [blame]
// 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.
/// @docImport 'package:flutter/widgets.dart';
library;
import 'enum_util.dart';
import 'find.dart';
import 'message.dart';
/// [DiagnosticsNode] tree types that can be requested by [GetDiagnosticsTree].
enum DiagnosticsType {
/// The [DiagnosticsNode] tree formed by [RenderObject]s.
renderObject,
/// The [DiagnosticsNode] tree formed by [Widget]s.
widget,
}
EnumIndex<DiagnosticsType> _diagnosticsTypeIndex = EnumIndex<DiagnosticsType>(
DiagnosticsType.values,
);
/// A Flutter Driver command to retrieve the JSON-serialized [DiagnosticsNode]
/// tree of the object identified by [finder].
///
/// The [DiagnosticsType] of the [DiagnosticsNode] tree returned is specified by
/// [diagnosticsType].
class GetDiagnosticsTree extends CommandWithTarget {
/// Creates a [GetDiagnosticsTree] Flutter Driver command.
GetDiagnosticsTree(
super.finder,
this.diagnosticsType, {
this.subtreeDepth = 0,
this.includeProperties = true,
super.timeout,
});
/// Deserializes this command from the value generated by [serialize].
///
/// The [path] is the current path to the [json] object from the parent object.
GetDiagnosticsTree.deserialize(super.json, super.finderFactory, {super.path})
: subtreeDepth = json.containsKey('subtreeDepth') ? int.parse(json['subtreeDepth']!) : 0,
includeProperties = json['includeProperties'] != 'false',
diagnosticsType = json.containsKey('diagnosticsType')
? _diagnosticsTypeIndex.lookupBySimpleName(
json['diagnosticsType']!,
path: path == null ? 'diagnosticsType' : '$path.diagnosticsType',
)
: throw ArgumentError.notNull(path == null ? 'diagnosticsType' : '$path.diagnosticsType'),
super.deserialize();
/// How many levels of children to include in the JSON result.
///
/// Defaults to zero, which will only return the [DiagnosticsNode] information
/// of the object identified by [finder].
final int subtreeDepth;
/// Whether the properties of a [DiagnosticsNode] should be included.
final bool includeProperties;
/// The type of [DiagnosticsNode] tree that is requested.
final DiagnosticsType diagnosticsType;
@override
Map<String, String> serialize() => super.serialize()
..addAll(<String, String>{
'subtreeDepth': subtreeDepth.toString(),
'includeProperties': includeProperties.toString(),
'diagnosticsType': _diagnosticsTypeIndex.toSimpleName(diagnosticsType),
});
@override
String get kind => 'get_diagnostics_tree';
}
/// The result of a [GetDiagnosticsTree] command.
class DiagnosticsTreeResult extends Result {
/// Creates a [DiagnosticsTreeResult].
const DiagnosticsTreeResult(this.json);
/// The JSON encoded [DiagnosticsNode] tree requested by the
/// [GetDiagnosticsTree] command.
final Map<String, dynamic> json;
@override
Map<String, dynamic> toJson() => json;
}