cmake_minimum_required(VERSION 2.6)
cmake_policy(VERSION 2.6.4)

project(test_parsers)

message("-- Configuring test_parsers")

add_definitions(-DFREEORION_BUILD_SERVER)

add_executable(test_parsers
    ../../combat/CombatSystem.cpp
    ../../network/ServerNetworking.cpp
    ../../server/SaveLoad.cpp
    ../../server/ServerApp.cpp
    ../../server/ServerFSM.cpp
    ../../universe/UniverseServer.cpp
    ../../universe/Universe.cpp
    test.cpp
    lexer_test_rules.cpp
)

target_link_libraries(test_parsers
    freeorioncommon
    freeorionparse
    log4cpp
    ${CMAKE_THREAD_LIBS_INIT}
)

install(
    TARGETS test_parsers
    RUNTIME DESTINATION .
    COMPONENT COMPONENT_FREEORION
)

macro (add_test_and_data_files name)
    set(suffix "")
    set(args "")
    foreach (arg ${ARGN})
        if (EXISTS ${CMAKE_SOURCE_DIR}/parse/test/${arg})
            get_filename_component(filename_without_path ${arg} NAME)
            set(suffix ${suffix}-${filename_without_path})
            set(args "${args};${CMAKE_CURRENT_SOURCE_DIR}/${filename_without_path}")
        else ()
            set(suffix ${suffix}-${arg})
            set(args "${args};${arg}")
        endif ()
    endforeach ()
    add_test (${name}${suffix} ${CMAKE_BINARY_DIR}/${name} ${args})
endmacro ()

add_test_and_data_files(test_parsers lexer -f lexer_tokens)
add_test_and_data_files(test_parsers capture_result_enum_parser -f capture_result_enumerators)
add_test_and_data_files(test_parsers combat_fighter_type_enum_parser -f combat_fighter_type_enumerators)
add_test_and_data_files(test_parsers empire_affiliation_type_enum_parser -f empire_affiliation_type_enumerators)
add_test_and_data_files(test_parsers non_ship_part_meter_type_enum_parser -f non_ship_part_meter_type_enumerators)
add_test_and_data_files(test_parsers planet_environment_enum_parser -f planet_environment_enumerators)
add_test_and_data_files(test_parsers planet_size_enum_parser -f planet_size_enumerators)
add_test_and_data_files(test_parsers planet_type_enum_parser -f planet_type_enumerators)
add_test_and_data_files(test_parsers ship_part_class_enum_parser -f ship_part_class_enumerators)
add_test_and_data_files(test_parsers ship_slot_type_enum_parser -f ship_slot_type_enumerators)
add_test_and_data_files(test_parsers star_type_enum_parser -f star_type_enumerators)
add_test_and_data_files(test_parsers value_ref_statistic_type_enum_parser -f statistic_type_enumerators)
add_test_and_data_files(test_parsers tech_type_enum_parser -f tech_type_enumerators)
add_test_and_data_files(test_parsers universe_object_type_enum_parser -f universe_object_type_enumerators)
add_test_and_data_files(test_parsers unlockable_item_type_enum_parser -f unlockable_item_type_enumerators)
add_test_and_data_files(test_parsers int_value_ref_parser -f int_arithmetic)
add_test_and_data_files(test_parsers int_value_ref_parser -f int_variable)
add_test_and_data_files(test_parsers int_value_ref_parser -f int_variable_arithmetic)
add_test_and_data_files(test_parsers int_value_ref_parser -f int_statistic)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_arithmetic)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_variable)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_variable_arithmetic)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_statistic)
add_test_and_data_files(test_parsers double_value_ref_parser -f int_arithmetic)
add_test_and_data_files(test_parsers double_value_ref_parser -f int_variable)
add_test_and_data_files(test_parsers double_value_ref_parser -f int_variable_arithmetic)
add_test_and_data_files(test_parsers double_value_ref_parser -f int_statistic)
add_test_and_data_files(test_parsers string_value_ref_parser -f string_constant)
add_test_and_data_files(test_parsers string_value_ref_parser -f string_variable)
add_test_and_data_files(test_parsers string_value_ref_parser -f int_variable)
add_test_and_data_files(test_parsers string_value_ref_parser -f int_statistic)
add_test_and_data_files(test_parsers string_value_ref_parser -f double_variable)
add_test_and_data_files(test_parsers string_value_ref_parser -f double_statistic)
add_test_and_data_files(test_parsers planet_size_value_ref_parser -f planet_size_constant)
add_test_and_data_files(test_parsers planet_size_value_ref_parser -f planet_size_variable)
add_test_and_data_files(test_parsers planet_size_value_ref_parser -f planet_size_statistic)
add_test_and_data_files(test_parsers planet_type_value_ref_parser -f planet_type_constant)
add_test_and_data_files(test_parsers planet_type_value_ref_parser -f planet_type_variable)
add_test_and_data_files(test_parsers planet_type_value_ref_parser -f planet_type_statistic)
add_test_and_data_files(test_parsers planet_environment_value_ref_parser -f planet_environment_constant)
add_test_and_data_files(test_parsers planet_environment_value_ref_parser -f planet_environment_variable)
add_test_and_data_files(test_parsers planet_environment_value_ref_parser -f planet_environment_statistic)
add_test_and_data_files(test_parsers universe_object_type_value_ref_parser -f universe_object_type_constant)
add_test_and_data_files(test_parsers universe_object_type_value_ref_parser -f universe_object_type_variable)
add_test_and_data_files(test_parsers universe_object_type_value_ref_parser -f universe_object_type_statistic)
add_test_and_data_files(test_parsers star_type_value_ref_parser -f star_type_constant)
add_test_and_data_files(test_parsers star_type_value_ref_parser -f star_type_variable)
add_test_and_data_files(test_parsers star_type_value_ref_parser -f star_type_statistic)
add_test_and_data_files(test_parsers int_value_ref_evaluation -f int_arithmetic_evaluated)
add_test_and_data_files(test_parsers double_value_ref_evaluation -f double_arithmetic_evaluated)
add_test_and_data_files(test_parsers condition_parser -f condition_parser_1)
add_test_and_data_files(test_parsers condition_parser -f condition_parser_2)
add_test_and_data_files(test_parsers condition_parser -f condition_parser_3)
add_test_and_data_files(test_parsers effect_parser -f effect_parser)
add_test_and_data_files(test_parsers buildings_parser -f buildings)
add_test_and_data_files(test_parsers buildings_parser -f buildings_permutations)
add_test_and_data_files(test_parsers specials_parser -f specials)
add_test_and_data_files(test_parsers specials_parser -f specials_permutations)
add_test_and_data_files(test_parsers species_parser -f species)
add_test_and_data_files(test_parsers species_parser -f species_permutations)
add_test_and_data_files(test_parsers techs_parser -f techs)
add_test_and_data_files(test_parsers techs_parser -f techs_permutations)
add_test_and_data_files(test_parsers items_parser -f items)
add_test_and_data_files(test_parsers items_parser -f items_permutations)
add_test_and_data_files(test_parsers ship_parts_parser -f ship_parts)
add_test_and_data_files(test_parsers ship_hulls_parser -f ship_hulls)
add_test_and_data_files(test_parsers ship_designs_parser -f ship_designs)
add_test_and_data_files(test_parsers ship_designs_parser -f ship_designs_permutations)
add_test_and_data_files(test_parsers fleet_plans_parser -f fleet_plans)
add_test_and_data_files(test_parsers fleet_plans_parser -f fleet_plans_permutations)
add_test_and_data_files(test_parsers monster_fleet_plans_parser -f monster_fleet_plans)
add_test_and_data_files(test_parsers monster_fleet_plans_parser -f monster_fleet_plans_permutations)

add_test_and_data_files(test_parsers int_value_ref_parser -f int_arithmetic_errors --fail)
add_test_and_data_files(test_parsers int_value_ref_parser -f int_variable_errors --fail)
add_test_and_data_files(test_parsers int_value_ref_parser -f int_statistic_errors --fail)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_arithmetic_errors --fail)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_variable_errors --fail)
add_test_and_data_files(test_parsers double_value_ref_parser -f double_statistic_errors --fail)
add_test_and_data_files(test_parsers string_value_ref_parser -f string_constant_errors --fail)
add_test_and_data_files(test_parsers string_value_ref_parser -f string_variable_errors --fail)
add_test_and_data_files(test_parsers string_value_ref_parser -f string_statistic_errors --fail)
add_test_and_data_files(test_parsers planet_size_value_ref_parser -f planet_size_variable_errors --fail)
add_test_and_data_files(test_parsers planet_size_value_ref_parser -f planet_size_statistic_errors --fail)
add_test_and_data_files(test_parsers planet_type_value_ref_parser -f planet_type_variable_errors --fail)
add_test_and_data_files(test_parsers planet_type_value_ref_parser -f planet_type_statistic_errors --fail)
add_test_and_data_files(test_parsers planet_environment_value_ref_parser -f planet_environment_variable_errors --fail)
add_test_and_data_files(test_parsers planet_environment_value_ref_parser -f planet_environment_statistic_errors --fail)
add_test_and_data_files(test_parsers universe_object_type_value_ref_parser -f universe_object_type_variable_errors --fail)
add_test_and_data_files(test_parsers universe_object_type_value_ref_parser -f universe_object_type_statistic_errors --fail)
add_test_and_data_files(test_parsers star_type_value_ref_parser -f star_type_variable_errors --fail)
add_test_and_data_files(test_parsers star_type_value_ref_parser -f star_type_statistic_errors --fail)
add_test_and_data_files(test_parsers condition_parser -f condition_parser_1_errors --fail)
add_test_and_data_files(test_parsers condition_parser -f condition_parser_2_errors --fail)
add_test_and_data_files(test_parsers condition_parser -f condition_parser_3_errors --fail)
add_test_and_data_files(test_parsers effect_parser -f effect_parser_errors --fail)
add_test_and_data_files(test_parsers buildings_parser -f buildings_errors --fail)
add_test_and_data_files(test_parsers specials_parser -f specials_errors --fail)
add_test_and_data_files(test_parsers species_parser -f species_errors --fail)
add_test_and_data_files(test_parsers techs_parser -f techs_errors --fail)
add_test_and_data_files(test_parsers items_parser -f items_errors --fail)
add_test_and_data_files(test_parsers ship_parts_parser -f ship_parts_errors --fail)
add_test_and_data_files(test_parsers ship_hulls_parser -f ship_hulls_errors --fail)
add_test_and_data_files(test_parsers ship_designs_parser -f ship_designs_errors --fail)
add_test_and_data_files(test_parsers fleet_plans_parser -f fleet_plans_errors --fail)
add_test_and_data_files(test_parsers monster_fleet_plans_parser -f monster_fleet_plans_errors --fail)
