package com.android.build.gradle.integration.application

import com.android.build.gradle.integration.common.fixture.GradleTestProject
import com.android.build.gradle.internal.scope.InternalArtifactType
import com.android.build.gradle.options.BooleanOption
import com.android.utils.FileUtils
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import java.io.File

/**
 * Tests for [MapSourceSetPathsTask]
 */
class MapSourceSetPathsTaskTest {

    @Rule
    @JvmField
    val project = GradleTestProject.builder()
            .fromTestProject("flavors")
            .create()

    @Test
    fun `test should write file map`() {
        project.executor()
                .with(BooleanOption.ENABLE_SOURCE_SET_PATHS_MAP, true)
                .run("assembleF1FaDebug")
        val filePathMapsDir = FileUtils.join(project.intermediatesDir, InternalArtifactType
                .SOURCE_SET_PATH_MAP.getFolderName())
        val sourceSetMap = FileUtils.join(filePathMapsDir, "f1FaDebug", "file-map.txt")
        val projectDir = project.projectDir.absolutePath
        val expectedContents = """
            com.android.tests.flavors-f1Fa-0 $projectDir/build/generated/res/pngs/f1Fa/debug
            com.android.tests.flavors-f1Fa-1 $projectDir/build/generated/res/resValues/f1Fa/debug
            com.android.tests.flavors-f1Fa-2 $projectDir/build/generated/res/rs/f1Fa/debug
            com.android.tests.flavors-mergeF1FaDebugResources-3 $projectDir/build/intermediates/incremental/mergeF1FaDebugResources/merged.dir
            com.android.tests.flavors-mergeF1FaDebugResources-4 $projectDir/build/intermediates/incremental/mergeF1FaDebugResources/stripped.dir
            com.android.tests.flavors-f1Fa-5 $projectDir/build/intermediates/res/merged/f1Fa/debug
            com.android.tests.flavors-debug-6 $projectDir/src/debug/res
            com.android.tests.flavors-f1-7 $projectDir/src/f1/res
            com.android.tests.flavors-f1Fa-8 $projectDir/src/f1Fa/res
            com.android.tests.flavors-f1FaDebug-9 $projectDir/src/f1FaDebug/res
            com.android.tests.flavors-fa-10 $projectDir/src/fa/res
            com.android.tests.flavors-main-11 $projectDir/src/main/res"""
                .trimIndent().replace("/", File.separator)
        assertThat(sourceSetMap.exists()).isTrue()
        assertThat(sourceSetMap.readText()).contains(expectedContents)
    }

    @Test
    fun `test MapSourceSetPathsTask does not run when ENABLE_SOURCE_SET_PATHS_MAP disabled`() {
        val execution = project.executor()
                .with(BooleanOption.ENABLE_SOURCE_SET_PATHS_MAP, false)
                .run("assembleDebug")
        assertThat(execution.didWorkTasks).doesNotContain(":mapDebugSourceSetPaths")
    }
}
