// 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:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  test('TextTreeRenderer returns an empty string in release mode', () {
    final renderer = TextTreeRenderer();
    final node = TestDiagnosticsNode();

    expect(renderer.render(node), '');
  });
}

class TestDiagnosticsNode extends DiagnosticsNode {
  TestDiagnosticsNode() : super(name: 'test', style: DiagnosticsTreeStyle.singleLine);

  @override
  List<DiagnosticsNode> getChildren() {
    return <DiagnosticsNode>[];
  }

  @override
  List<DiagnosticsNode> getProperties() {
    return <DiagnosticsNode>[];
  }

  @override
  String toDescription({TextTreeConfiguration? parentConfiguration}) {
    return 'Test Description';
  }

  @override
  final Object? value = Object();
}
