// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
// for details. 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:test_reflective_loader/test_reflective_loader.dart';

import 'convert_getter_to_method_test.dart' as convert_getter_to_method_test;
import 'convert_method_to_getter_test.dart' as convert_method_to_getter_test;
import 'extract_local_test.dart' as extract_local_test;
import 'extract_method_test.dart' as extract_method_test;
import 'extract_widget_test.dart' as extract_widget_test;
import 'inline_local_test.dart' as inline_local_test;
import 'inline_method_test.dart' as inline_method_test;
import 'move_file_test.dart' as move_file_test;
import 'naming_conventions_test.dart' as naming_conventions_test;
import 'rename_class_member_test.dart' as rename_class_member_test;
import 'rename_constructor_test.dart' as rename_constructor_test;
import 'rename_import_test.dart' as rename_import_test;
import 'rename_label_test.dart' as rename_label_test;
import 'rename_library_test.dart' as rename_library_test;
import 'rename_local_test.dart' as rename_local_test;
import 'rename_unit_member_test.dart' as rename_unit_member_test;

/// Utility for manually running all tests.
main() {
  defineReflectiveSuite(() {
    convert_getter_to_method_test.main();
    convert_method_to_getter_test.main();
    extract_local_test.main();
    extract_method_test.main();
    extract_widget_test.main();
    inline_local_test.main();
    inline_method_test.main();
    move_file_test.main();
    naming_conventions_test.main();
    rename_class_member_test.main();
    rename_constructor_test.main();
    rename_import_test.main();
    rename_label_test.main();
    rename_library_test.main();
    rename_local_test.main();
    rename_unit_member_test.main();
  }, name: 'refactoring');
}
