add_executable(migrateconfig migrateconfig.cpp)
target_link_libraries(migrateconfig powerdevilcore)
ecm_mark_as_test(migrateconfig)

function(add_migrateconfig_test)
    set(options MOBILE VM CANNOT_SUSPEND ASSERT_NO_POWERDEVILRC_AFTER_MIGRATION)
    set(oneValueArgs NAME INPUT_POWERDEVILRC INPUT_PROFILESRC EXPECTED_POWERDEVILRC EXPECTED_PROFILESRC)
    cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "" ${ARGN})

    set(migrateconfig_args "")
    set(diff_cmds "")

    if (ARG_INPUT_POWERDEVILRC)
        set(migrateconfig_args "${migrateconfig_args} --src-powerdevilrc \"${CMAKE_CURRENT_SOURCE_DIR}/${ARG_INPUT_POWERDEVILRC}\"")
    endif()
    if (ARG_INPUT_PROFILESRC)
        set(migrateconfig_args "${migrateconfig_args} --src-profilesrc \"${CMAKE_CURRENT_SOURCE_DIR}/${ARG_INPUT_PROFILESRC}\"")
    endif()

    if (ARG_ASSERT_NO_POWERDEVILRC_AFTER_MIGRATION)
        set(migrateconfig_args "${migrateconfig_args} --assert-no-powerdevilrc-after-migration")
    endif()
    if (ARG_EXPECTED_POWERDEVILRC)
        set(out_powerdevilrc "${CMAKE_CURRENT_BINARY_DIR}/${ARG_EXPECTED_POWERDEVILRC}")
        set(migrateconfig_args "${migrateconfig_args} --dest-powerdevilrc \"${out_powerdevilrc}\"")
        set(expected_powerdevilrc "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_EXPECTED_POWERDEVILRC}")
        set(diff_cmds "${diff_cmds} && echo \"powerdevilrc diff (should be empty):\"")
        set(diff_cmds "${diff_cmds} && diff -u \"${expected_powerdevilrc}\" \"${out_powerdevilrc}\"")
    endif()
    if (ARG_EXPECTED_PROFILESRC)
        set(out_profilesrc "${CMAKE_CURRENT_BINARY_DIR}/${ARG_EXPECTED_PROFILESRC}")
        set(migrateconfig_args "${migrateconfig_args} --dest-profilesrc \"${out_profilesrc}\"")
        set(expected_profilesrc "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_EXPECTED_PROFILESRC}")
        set(diff_cmds "${diff_cmds} && echo \"powermanagementprofilesrc diff (should be empty):\"")
        set(diff_cmds "${diff_cmds} && diff -u \"${expected_profilesrc}\" \"${out_profilesrc}\"")
    endif()

    if (ARG_MOBILE)
        set(migrateconfig_args "${helper_args} --mobile")
    endif()
    if (ARG_VM)
        set(migrateconfig_args "${helper_args} --vm")
    endif()
    if (ARG_CANNOT_SUSPEND)
        set(migrateconfig_args "${helper_args} --cannot-suspend")
    endif()

    add_test(
        NAME ${ARG_NAME}
        COMMAND bash -c "$<TARGET_FILE:migrateconfig> ${migrateconfig_args} ${diff_cmds}"
    )
endfunction()

add_migrateconfig_test(
    NAME migrateconfig_test1_default_configs_can_suspend_to_ram
    INPUT_PROFILESRC test1_initial_powermanagementprofilesrc  # as generated by Plasma 5 profile generator
    EXPECTED_PROFILESRC test1_migrated_powermanagementprofilesrc  # same, except with profiles-migrated flag
    ASSERT_NO_POWERDEVILRC_AFTER_MIGRATION
)

add_migrateconfig_test(
    NAME migrateconfig_test2_activities
    INPUT_POWERDEVILRC test2_initial_powerdevilrc
    INPUT_PROFILESRC test2_initial_powermanagementprofilesrc  # with some extra activity settings
    EXPECTED_POWERDEVILRC test2_migrated_powerdevilrc
    EXPECTED_PROFILESRC test2_migrated_powermanagementprofilesrc
)

add_migrateconfig_test(
    NAME migrateconfig_test2a_activities_no_double_migration
    INPUT_POWERDEVILRC test2_migrated_powerdevilrc
    INPUT_PROFILESRC test2_migrated_powermanagementprofilesrc
    EXPECTED_POWERDEVILRC test2_migrated_powerdevilrc
    EXPECTED_PROFILESRC test2_migrated_powermanagementprofilesrc
)

add_migrateconfig_test(
    NAME migrateconfig_test3_profiles
    INPUT_PROFILESRC test3_initial_powermanagementprofilesrc  # with varied non-default profile settings
    EXPECTED_POWERDEVILRC test3_migrated_powerdevilrc
    EXPECTED_PROFILESRC test3_migrated_powermanagementprofilesrc
)
