blob: 06313a8b4a06e8410b7d73617787be09d2e01b24 [file] [log] [blame]
/// Copyright 2019 The Fuchsia Authors. All rights reserved.
/// Use of this source code is governed by a BSD-style license that can be
/// found in the LICENSE file.
// ignore_for_file: implementation_imports
import 'package:test/test.dart';
import 'package:fuchsia_inspect_flutter/src/inspect_flutter.dart';
import 'package:flutter/foundation.dart';
import 'package:fuchsia_inspect/inspect.dart';
import 'package:test_vmo_reader/vmo_reader.dart' show VmoReader;
import 'package:fuchsia_inspect/src/vmo/vmo_holder.dart';
import 'package:fuchsia_inspect/src/inspect/internal/_inspect_impl.dart';
import 'package:fuchsia_inspect/src/vmo/vmo_writer.dart';
import 'package:fuchsia_services/services.dart';
import 'package:test_vmo_reader/util.dart';
// This class was made to test the InspectFlutter class
// The FakeDiagnosticsNode allows properties and children
// to be added to the node.
class FakeDiagnosticsNode extends DiagnosticsNode {
List<FakeDiagnosticsNode> properties = <FakeDiagnosticsNode>[];
List<FakeDiagnosticsNode> children = <FakeDiagnosticsNode>[];
@override
String value;
FakeDiagnosticsNode(String newName)
: super(name: newName, style: DiagnosticsTreeStyle.dense);
@override
List<FakeDiagnosticsNode> getChildren() {
return children;
}
@override
List<FakeDiagnosticsNode> getProperties() {
return properties;
}
void addProperty(String propertyName, String propertyValue) {
var fakeNode =
(FakeDiagnosticsNode(propertyName)..value = propertyValue);
properties.add(fakeNode);
}
void addChild(String childName, String childValue) {
var fakeNode =
(FakeDiagnosticsNode(childName)..value = childValue);
children.add(fakeNode);
}
@override
String toDescription({TextTreeConfiguration parentConfiguration}) {
return '$value';
}
}
void main() {
VmoHolder vmo;
Node root;
const defaultVmoSize = 256 * 1024;
setUp(() {
var context = StartupContext.fromStartupInfo();
vmo = FakeVmo(defaultVmoSize);
var writer = VmoWriter.withVmo(vmo);
Inspect inspect =
InspectImpl(context.outgoing.debugDir(), 'root.inspect', writer);
root = inspect.root;
});
test('Widget Tree Output is correct', () {
FakeDiagnosticsNode fakeNode = (FakeDiagnosticsNode('IGNORED')
..addProperty('widget', 'node1')
..addProperty('prop1', 'value1')
..addProperty('prop2', 'value2')
..addProperty('prop3', 'value3')
..addChild('widget', 'node2')
..children[0].addProperty('widget', 'node2'));
InspectFlutter.inspectFromDiagnostic(fakeNode, root);
expect(VmoReader(vmo).toString(), matches(RegExp(
r'<> Node: "root"\n'
r'<> >> Node: "node1_\d+"\n'
r'<> >> >> StringProperty "prop3": "value3"\n'
r'<> >> >> StringProperty "prop2": "value2"\n'
r'<> >> >> StringProperty "prop1": "value1"\n'
r'<> >> >> StringProperty "widget": "node1"\n'
r'<> >> >> Node: "node2_\d+"\n'
r'<> >> >> >> StringProperty "widget": "node2"\n'
)));
});
test('Widget Tree Output does not display null properties', () {
FakeDiagnosticsNode fakeNode = (FakeDiagnosticsNode('IGNORED')
..addProperty('widget', 'node1')
..addProperty('prop1', 'value1')
..addProperty('prop2', 'value2')
..addProperty('prop3', 'value3')
..addProperty(null, null));
InspectFlutter.inspectFromDiagnostic(fakeNode, root);
expect(VmoReader(vmo).toString(), matches(RegExp(
r'<> Node: "root"\n'
r'<> >> Node: "node1_\d+"\n'
r'<> >> >> StringProperty "prop3": "value3"\n'
r'<> >> >> StringProperty "prop2": "value2"\n'
r'<> >> >> StringProperty "prop1": "value1"\n'
r'<> >> >> StringProperty "widget": "node1"\n'
''
)));
});
test('Widget Tree Output does not display a node with no widget property', () {
FakeDiagnosticsNode fakeNode = (FakeDiagnosticsNode('IGNORED')
..addProperty('prop1', 'value1')
..addProperty('prop2', 'value2')
..addProperty('prop3', 'value3'));
InspectFlutter.inspectFromDiagnostic(fakeNode, root);
expect(VmoReader(vmo).toString(),(
'<> Node: "root"\n'
''
));
});
}