// 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 'dart:developer';

import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';

class TestWidget extends LeafRenderObjectWidget {
  const TestWidget({
    super.key,
  });

  @override
  RenderObject createRenderObject(BuildContext context) => RenderTest();

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    // This string is searched for verbatim by dev/bots/test.dart:
    properties.add(MessageProperty('test', 'TestWidget.debugFillProperties called'));
  }
}

class RenderTest extends RenderBox {
  @override
  bool get sizedByParent => true;

  @override
  void performResize() {
    Timeline.instantSync('RenderTest.performResize called');
    size = constraints.biggest;
  }

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    // This string is searched for verbatim by dev/bots/test.dart:
    properties.add(MessageProperty('test', 'RenderTest.debugFillProperties called'));
  }
}


Future<void> main() async {
  // This section introduces strings that we can search for in dev/bots/test.dart
  // as a sanity check:
  if (kDebugMode) {
    print('BUILT IN DEBUG MODE');
  }
  if (kProfileMode) {
    print('BUILT IN PROFILE MODE');
  }
  if (kReleaseMode) {
    print('BUILT IN RELEASE MODE');
  }

  // The point of this file is to make sure that toTimelineArguments is not
  // called when we have debugProfileBuildsEnabled (et al) turned on. If that
  // method is not called then the debugFillProperties methods above should also
  // not get called and we should end up tree-shaking the entire Diagnostics
  // logic out of the app. The dev/bots/test.dart test checks for this by
  // looking for the strings in the methods above.

  debugProfileBuildsEnabled = true;
  debugProfileLayoutsEnabled = true;
  debugProfilePaintsEnabled = true;
  runApp(const TestWidget());
}