mainTests = [
    ("multiple_console_mode", return (), return (), False, [],
     opts { consmode = [Quiet, Terminal] }),
    ("multiple_xml_report", return (), return (), False, [],
     opts { xmlreport = ["report1.xml", "report2.xml"] }),
    ("multiple_txt_report", return (), return (), False, [],
     opts { txtreport = ["report1.txt", "report2.txt"] }),
    ("multiple_xml_txt_report", return (), return (), False, [],
     opts { xmlreport = ["report1.xml", "report2.xml"],
            txtreport = ["report1.txt", "report2.txt"] }),
    ("nonexistent_xml_report", makeTestDir, delTestDir, False, [],
     opts { xmlreport = ["TestDir/nonexistent/report.xml"] }),
    ("nonexistent_txt_report", makeTestDir, delTestDir, False, [],
     opts { txtreport = ["TestDir/nonexistent/report.txt"] }),
    ("nonexistent_txt_xml_report", makeTestDir, delTestDir, False, [],
     opts { txtreport = ["TestDir/nonexistent/report.txt"],
            xmlreport = ["TestDir/nonexistent/report.xml"] }),
    ("nonexistent_testlist", makeTestDir, delTestDir, False, [],
     opts { xmlreport = ["TestDir/nonexistent/testlist"] }),
    ("run_quiet_no_xml_no_txt", return (), return (), True, [], quietOpts),
    ("run_terminal_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Terminal] }),
    ("run_text_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Text] }),
    ("run_verbose_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Verbose] }),
    ("run_quiet_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Quiet], xmlreport = ["TestDir/report.xml"] }),
    ("run_terminal_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Terminal], xmlreport = ["TestDir/report.xml"] }),
    ("run_text_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Text], xmlreport = ["TestDir/report.xml"] }),
    ("run_verbose_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Verbose], xmlreport = ["TestDir/report.xml"] }),
    ("run_quiet_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Quiet], txtreport = ["TestDir/report.txt"] }),
    ("run_terminal_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Terminal], txtreport = ["TestDir/report.txt"] }),
    ("run_text_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Text], txtreport = ["TestDir/report.txt"] }),
    ("run_verbose_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Verbose], txtreport = ["TestDir/report.txt"] }),
    ("run_quiet_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Quiet], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_terminal_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Terminal], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_text_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Text], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_verbose_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Verbose], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] })
  ] ++
  map makeCmdOptTest suiteCombos ++
  map makeTestlistTest suiteCombos ++
  map makeCmdOptTestlistTest suitePairCombos ++
  map makeDualTestlistTest suitePairCombos
mainTests = [
    ("multiple_console_mode", return (), return (), False, [],
     opts { consmode = [Quiet, Terminal] }),
    ("multiple_xml_report", return (), return (), False, [],
     opts { xmlreport = ["report1.xml", "report2.xml"] }),
    ("multiple_txt_report", return (), return (), False, [],
     opts { txtreport = ["report1.txt", "report2.txt"] }),
    ("multiple_xml_txt_report", return (), return (), False, [],
     opts { xmlreport = ["report1.xml", "report2.xml"],
            txtreport = ["report1.txt", "report2.txt"] }),
    ("nonexistent_xml_report", makeTestDir, delTestDir, False, [],
     opts { xmlreport = ["TestDir/nonexistent/report.xml"] }),
    ("nonexistent_txt_report", makeTestDir, delTestDir, False, [],
     opts { txtreport = ["TestDir/nonexistent/report.txt"] }),
    ("nonexistent_txt_xml_report", makeTestDir, delTestDir, False, [],
     opts { txtreport = ["TestDir/nonexistent/report.txt"],
            xmlreport = ["TestDir/nonexistent/report.xml"] }),
    ("nonexistent_testlist", makeTestDir, delTestDir, False, [],
     opts { xmlreport = ["TestDir/nonexistent/testlist"] }),
    ("run_quiet_no_xml_no_txt", return (), return (), True, [], quietOpts),
    ("run_terminal_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Terminal] }),
    ("run_text_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Text] }),
    ("run_verbose_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Verbose] }),
    ("run_quiet_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Quiet], xmlreport = ["TestDir/report.xml"] }),
    ("run_terminal_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Terminal], xmlreport = ["TestDir/report.xml"] }),
    ("run_text_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Text], xmlreport = ["TestDir/report.xml"] }),
    ("run_verbose_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Verbose], xmlreport = ["TestDir/report.xml"] }),
    ("run_quiet_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Quiet], txtreport = ["TestDir/report.txt"] }),
    ("run_terminal_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Terminal], txtreport = ["TestDir/report.txt"] }),
    ("run_text_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Text], txtreport = ["TestDir/report.txt"] }),
    ("run_verbose_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Verbose], txtreport = ["TestDir/report.txt"] }),
    ("run_quiet_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Quiet], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_terminal_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Terminal], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_text_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Text], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_verbose_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Verbose], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] })
  ] ++
  map makeCmdOptTest suiteCombos ++
  map makeTestlistTest suiteCombos ++
  map makeCmdOptTestlistTest suitePairCombos ++
  map makeDualTestlistTest suitePairCombos
mainTests = [
    ("multiple_console_mode", return (), return (), False, [],
     opts { consmode = [Quiet, Terminal] }),
    ("multiple_xml_report", return (), return (), False, [],
     opts { xmlreport = ["report1.xml", "report2.xml"] }),
    ("multiple_txt_report", return (), return (), False, [],
     opts { txtreport = ["report1.txt", "report2.txt"] }),
    ("multiple_xml_txt_report", return (), return (), False, [],
     opts { xmlreport = ["report1.xml", "report2.xml"],
            txtreport = ["report1.txt", "report2.txt"] }),
    ("nonexistent_xml_report", makeTestDir, delTestDir, False, [],
     opts { xmlreport = ["TestDir/nonexistent/report.xml"] }),
    ("nonexistent_txt_report", makeTestDir, delTestDir, False, [],
     opts { txtreport = ["TestDir/nonexistent/report.txt"] }),
    ("nonexistent_txt_xml_report", makeTestDir, delTestDir, False, [],
     opts { txtreport = ["TestDir/nonexistent/report.txt"],
            xmlreport = ["TestDir/nonexistent/report.xml"] }),
    ("nonexistent_testlist", makeTestDir, delTestDir, False, [],
     opts { xmlreport = ["TestDir/nonexistent/testlist"] }),
    ("run_quiet_no_xml_no_txt", return (), return (), True, [], quietOpts),
    ("run_terminal_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Terminal] }),
    ("run_text_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Text] }),
    ("run_verbose_no_xml_no_txt", return (), return (), True, [],
     opts { consmode = [Verbose] }),
    ("run_quiet_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Quiet], xmlreport = ["TestDir/report.xml"] }),
    ("run_terminal_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Terminal], xmlreport = ["TestDir/report.xml"] }),
    ("run_text_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Text], xmlreport = ["TestDir/report.xml"] }),
    ("run_verbose_xml_no_txt", makeTestDir, delXMLReport, True, [],
     opts { consmode = [Verbose], xmlreport = ["TestDir/report.xml"] }),
    ("run_quiet_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Quiet], txtreport = ["TestDir/report.txt"] }),
    ("run_terminal_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Terminal], txtreport = ["TestDir/report.txt"] }),
    ("run_text_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Text], txtreport = ["TestDir/report.txt"] }),
    ("run_verbose_no_xml_txt", makeTestDir, delTxtReport, True, [],
     opts { consmode = [Verbose], txtreport = ["TestDir/report.txt"] }),
    ("run_quiet_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Quiet], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_terminal_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Terminal], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_text_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Text], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] }),
    ("run_verbose_xml_no_txt", makeTestDir, delTxtXMLReport, True, [],
     opts { consmode = [Verbose], xmlreport = ["TestDir/report.xml"],
            txtreport = ["TestDir/report.txt"] })
  ] ++
  map makeCmdOptTest suiteCombos ++
  map makeTestlistTest suiteCombos ++
  map makeCmdOptTestlistTest suitePairCombos ++
  map makeDualTestlistTest suitePairCombos