// SPDX-License-Identifier: Apache-2.0 package firrtlTests import firrtl._ import org.scalatest.freespec.AnyFreeSpec import org.scalatest.matchers.should.Matchers class ExecutionOptionsManagerSpec extends AnyFreeSpec with Matchers { "ExecutionOptionsManager is a container for one more more ComposableOptions Block" - { "It has a default CommonOptionsBlock" in { val manager = new ExecutionOptionsManager("test") manager.topName should be("") manager.targetDirName should be(".") manager.commonOptions.topName should be("") manager.commonOptions.targetDirName should be(".") } "But can override defaults like this" in { val manager = new ExecutionOptionsManager("test") { commonOptions = CommonOptions(topName = "dog", targetDirName = "a/b/c") } manager.commonOptions shouldBe a[CommonOptions] manager.topName should be("dog") manager.targetDirName should be("a/b/c") manager.commonOptions.topName should be("dog") manager.commonOptions.targetDirName should be("a/b/c") } "The add method should put a new version of a given type the manager" in { val manager = new ExecutionOptionsManager("test") { commonOptions = CommonOptions(topName = "dog", targetDirName = "a/b/c") } val initialCommon = manager.commonOptions initialCommon.topName should be("dog") initialCommon.targetDirName should be("a/b/c") manager.commonOptions = CommonOptions(topName = "cat", targetDirName = "d/e/f") val afterCommon = manager.commonOptions afterCommon.topName should be("cat") afterCommon.targetDirName should be("d/e/f") initialCommon.topName should be("dog") initialCommon.targetDirName should be("a/b/c") } "multiple composable blocks should be separable" in { val manager = new ExecutionOptionsManager("test") with HasFirrtlOptions { commonOptions = CommonOptions(topName = "spoon") firrtlOptions = FirrtlExecutionOptions(inputFileNameOverride = "fork") } manager.firrtlOptions.inputFileNameOverride should be("fork") manager.commonOptions.topName should be("spoon") } } }