// See LICENSE for license details.

package firrtlTests.stage

import firrtl.stage.RunFirrtlTransformAnnotation
import firrtl.options.Shell
import firrtl.stage.FirrtlCli
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class FirrtlCliSpec extends AnyFlatSpec with Matchers {

  behavior.of("FirrtlCli for RunFirrtlTransformAnnotation / -fct / --custom-transforms")

  it should "preserver transform order" in {
    val shell = new Shell("foo") with FirrtlCli
    val args = Array(
      "--custom-transforms",
      "firrtl.transforms.BlackBoxSourceHelper,firrtl.transforms.CheckCombLoops",
      "--custom-transforms",
      "firrtl.transforms.CombineCats",
      "--custom-transforms",
      "firrtl.transforms.ConstantPropagation"
    )
    val expected = Seq(
      classOf[firrtl.transforms.BlackBoxSourceHelper],
      classOf[firrtl.transforms.CheckCombLoops],
      classOf[firrtl.transforms.CombineCats],
      classOf[firrtl.transforms.ConstantPropagation]
    )

    shell
      .parse(args)
      .collect { case a: RunFirrtlTransformAnnotation => a }
      .zip(expected)
      .map { case (RunFirrtlTransformAnnotation(a), b) => a.getClass should be(b) }
  }

}
