@file:Suppress("UsePropertyAccessSyntax")
package com.intellij.configurationScript

import com.intellij.execution.application.JvmMainMethodRunConfigurationOptions
import com.intellij.testFramework.ProjectRule
import org.assertj.core.api.Assertions.assertThat
import org.junit.ClassRule
import org.junit.Test

class JavaConfigurationFileTest {
  companion object {
    @JvmField
    @ClassRule
    val projectRule = ProjectRule()
  }

  @Test
   fun `one java`() {
     val result = collectRunConfigurations("""
     runConfigurations:
       java:
         isAlternativeJrePathEnabled: true
     """)
     val options = JvmMainMethodRunConfigurationOptions()
     options.isAlternativeJrePathEnabled = true
     assertThat(result).containsExactly(options)
   }

   @Test
   fun `one java as list`() {
     val result = collectRunConfigurations("""
     runConfigurations:
       java:
         - isAlternativeJrePathEnabled: true
     """)
     val options = JvmMainMethodRunConfigurationOptions()
     options.isAlternativeJrePathEnabled = true
     assertThat(result).containsExactly(options)
   }

   @Test
   fun `one v as list - template`() {
     val result = collectRunConfigurations("""
     runConfigurations:
       templates:
         java:
           - isAlternativeJrePathEnabled: true
     """, isTemplatesOnly = true)
     val options = JvmMainMethodRunConfigurationOptions()
     options.isAlternativeJrePathEnabled = true
     assertThat(result).containsExactly(options)
   }
}