// Copyright (c) 2018, 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 'add_type_annotation_test.dart' as add_type_annotation;
import 'assign_to_local_variable_test.dart' as assign_to_local_variable;
import 'convert_class_to_mixin_test.dart' as convert_class_to_mixin;
import 'convert_documentation_into_block_test.dart'
    as convert_documentation_into_block;
import 'convert_documentation_into_line_test.dart'
    as convert_documentation_into_line;
import 'convert_into_async_body_test.dart' as convert_into_async_body;
import 'convert_into_block_body_test.dart' as convert_into_block_body;
import 'convert_into_expression_body_test.dart' as convert_into_expression_body;
import 'convert_into_final_field_test.dart' as convert_into_final_field;
import 'convert_into_for_index_test.dart' as convert_into_for_index;
import 'convert_into_generic_function_syntax_test.dart'
    as convert_into_generic_function_syntax;
import 'convert_into_getter_test.dart' as convert_into_getter;
import 'convert_into_is_not_empty_test.dart' as convert_into_is_not_empty;
import 'convert_into_is_not_test.dart' as convert_into_is_not;
import 'convert_part_of_to_uri_test.dart' as convert_part_of_to_uri;
import 'convert_to_double_quoted_string_test.dart'
    as convert_to_double_quoted_string;
import 'convert_to_field_parameter_test.dart' as convert_to_field_parameter;
import 'convert_to_if_element_test.dart' as convert_to_if_element;
import 'convert_to_int_literal_test.dart' as convert_to_int_literal;
import 'convert_to_list_literal_test.dart' as convert_to_list_literal;
import 'convert_to_map_literal_test.dart' as convert_to_map_literal;
import 'convert_to_multiline_string_test.dart' as convert_to_multiline_string;
import 'convert_to_normal_parameter_test.dart' as convert_to_normal_parameter;
import 'convert_to_set_literal_test.dart' as convert_to_set_literal;
import 'convert_to_single_quoted_string_test.dart'
    as convert_to_single_quoted_string;
import 'convert_to_spread_test.dart' as convert_to_spread;
import 'encapsulate_field_test.dart' as encapsulate_field;
import 'exchange_operands_test.dart' as exchange_operands;
import 'flutter_convert_to_children_test.dart' as flutter_convert_to_children;
import 'flutter_convert_to_stateful_widget_test.dart'
    as flutter_convert_to_stateful_widget;
import 'flutter_move_down_test.dart' as flutter_move_down;
import 'flutter_move_up_test.dart' as flutter_move_up;
import 'flutter_remove_widget_test.dart' as flutter_remove_widget;
import 'flutter_swap_with_child_test.dart' as flutter_swap_with_child;
import 'flutter_swap_with_parent_test.dart' as flutter_swap_with_parent;
import 'flutter_wrap_center_test.dart' as flutter_wrap_center;
import 'flutter_wrap_column_test.dart' as flutter_wrap_column;
import 'flutter_wrap_container_test.dart' as flutter_wrap_container;
import 'flutter_wrap_generic_test.dart' as flutter_wrap_generic;
import 'flutter_wrap_padding_test.dart' as flutter_wrap_padding;
import 'flutter_wrap_row_test.dart' as flutter_wrap_row;
import 'flutter_wrap_stream_builder_test.dart' as flutter_wrap_stream_builder;
import 'import_add_show_test.dart' as import_add_show;
import 'introduce_local_cast_type_test.dart' as introduce_local_cast_type;
import 'invert_if_statement_test.dart' as invert_if_statement;
import 'join_if_with_inner_test.dart' as join_if_with_inner;
import 'join_if_with_outer_test.dart' as join_if_with_outer;
import 'join_variable_declaration_test.dart' as join_variable_declaration;
import 'remove_type_annotation_test.dart' as remove_type_annotation;
import 'replace_conditional_with_if_else_test.dart'
    as replace_conditional_with_if_else;
import 'replace_if_else_with_conditional_test.dart'
    as replace_if_else_with_conditional;
import 'split_and_condition_test.dart' as split_and_condition;
import 'split_variable_declaration_test.dart' as split_variable_declaration;
import 'surround_with_block_test.dart' as surround_with_block;
import 'surround_with_do_while_test.dart' as surround_with_do_while;
import 'surround_with_for_in_test.dart' as surround_with_for_in;
import 'surround_with_for_test.dart' as surround_with_for;
import 'surround_with_if_test.dart' as surround_with_if;
import 'surround_with_try_catch_test.dart' as surround_with_try_catch;
import 'surround_with_try_finally_test.dart' as surround_with_try_finally;
import 'surround_with_while_test.dart' as surround_with_while;

main() {
  defineReflectiveSuite(() {
    add_type_annotation.main();
    assign_to_local_variable.main();
    convert_class_to_mixin.main();
    convert_documentation_into_block.main();
    convert_documentation_into_line.main();
    convert_into_async_body.main();
    convert_into_block_body.main();
    convert_into_expression_body.main();
    convert_into_final_field.main();
    convert_into_for_index.main();
    convert_into_generic_function_syntax.main();
    convert_into_getter.main();
    convert_into_is_not.main();
    convert_into_is_not_empty.main();
    convert_part_of_to_uri.main();
    convert_to_double_quoted_string.main();
    convert_to_field_parameter.main();
    convert_to_if_element.main();
    convert_to_int_literal.main();
    convert_to_list_literal.main();
    convert_to_map_literal.main();
    convert_to_multiline_string.main();
    convert_to_normal_parameter.main();
    convert_to_set_literal.main();
    convert_to_single_quoted_string.main();
    convert_to_spread.main();
    encapsulate_field.main();
    exchange_operands.main();
    flutter_convert_to_children.main();
    flutter_convert_to_stateful_widget.main();
    flutter_move_down.main();
    flutter_move_up.main();
    flutter_remove_widget.main();
    flutter_swap_with_child.main();
    flutter_swap_with_parent.main();
    flutter_wrap_center.main();
    flutter_wrap_column.main();
    flutter_wrap_container.main();
    flutter_wrap_generic.main();
    flutter_wrap_padding.main();
    flutter_wrap_row.main();
    flutter_wrap_stream_builder.main();
    import_add_show.main();
    introduce_local_cast_type.main();
    invert_if_statement.main();
    join_if_with_inner.main();
    join_if_with_outer.main();
    join_variable_declaration.main();
    remove_type_annotation.main();
    replace_conditional_with_if_else.main();
    replace_if_else_with_conditional.main();
    split_and_condition.main();
    split_variable_declaration.main();
    surround_with_block.main();
    surround_with_do_while.main();
    surround_with_for.main();
    surround_with_for_in.main();
    surround_with_if.main();
    surround_with_try_catch.main();
    surround_with_try_finally.main();
    surround_with_while.main();
  }, name: 'assist');
}
