/** Composability Test. Test network component with single base component */
  @Test
  public void testModelSingleNetworkComponent() {
    String path = UNIT_BASEDIR + "comp_single_network/";

    Configuration c = flatten(SpaceExImporter.importModels(path + "sys.cfg", path + "sys.xml"));

    ToolPrinter tp = new FlowPrinter();

    tp.setOutputNone();
    tp.print(c, "", "");
  }
  /** Models with variables should not be rejected */
  @Test
  public void testModelHasVarsAcceptance() {
    String path = UNIT_BASEDIR + "no_vars_check/";

    Configuration c =
        flatten(SpaceExImporter.importModels(path + "has_vars.cfg", path + "has_vars.xml"));

    ToolPrinter tp = new FlowPrinter();

    tp.setOutputNone();
    tp.print(c, "", "");
  }
  /**
   * Models with blank forbidden states should be allowed (spaceex includes examples of these, like
   * heli)
   */
  @Test
  public void testModelBlankForbidden() {
    String path = UNIT_BASEDIR + "blank_forbidden/";

    Configuration c =
        flatten(
            SpaceExImporter.importModels(
                path + "blank_forbidden.cfg", path + "blank_forbidden.xml"));

    ToolPrinter tp = new FlowPrinter();

    tp.setOutputNone();
    tp.print(c, "", "");
  }
  @Test
  public void testOpenIntervalPrintFail() {
    // printing models with nondeterministic assignments to open intervals
    // should fail

    String path = UNIT_BASEDIR + "nondeterm_reset_open/";

    try {
      Configuration c = flatten(SpaceExImporter.importModels(path + "sys.cfg", path + "sys.xml"));

      ToolPrinter tp = new SpaceExPrinter();

      tp.setOutputNone();
      tp.print(c, "", "");

      Assert.fail("AutomatonExportException not thrown");
    } catch (AutomatonExportException e) {
      // expected
    }
  }
  /**
   * For Flow*, models require at least one variable. Thus, printing such models with a tool like
   * Flow* should raise a precondition error
   */
  @Test
  public void testModelNoVars() {
    String path = UNIT_BASEDIR + "no_vars_check/";

    Configuration c =
        flatten(SpaceExImporter.importModels(path + "discrete.cfg", path + "discrete.xml"));

    // use flow* as an example printer that needs at least one variable,
    // which should raise an error
    ToolPrinter tp = new FlowPrinter();

    tp.setOutputNone();

    try {
      tp.print(c, "", "");

      Assert.fail("precondition exception not raised for model with no variables");
    } catch (PreconditionsFailedException e) {
      // expected
    }
  }