private void executeAndCheckForOutputFile(
      final String executableName, final Executable executable, final List<String> failures)
      throws Exception {
    final File testOutputFile =
        File.createTempFile("schemacrawler." + executableName + ".", ".test");
    testOutputFile.delete();

    executable.getOutputOptions().setOutputFileName(testOutputFile.getAbsolutePath());
    executable.execute(testUtility.getConnection());

    failures.addAll(
        TestUtility.compareOutput(executableName + ".txt", testOutputFile, (OutputFormat) null));
  }
 @Test
 public void testExecutables() throws Exception {
   final List<String> failures = new ArrayList<String>();
   for (final String beanDefinitionName : appContext.getBeanDefinitionNames()) {
     final Object bean = appContext.getBean(beanDefinitionName);
     if (bean instanceof Executable) {
       final Executable executable = (Executable) bean;
       if (!"graph".equals(executable.getCommand()) && !(executable instanceof GraphExecutable)) {
         executeAndCheckForOutputFile(beanDefinitionName, executable, failures);
       }
     }
   }
   if (failures.size() > 0) {
     fail(failures.toString());
   }
 }
  @Test
  public void compareInfoLevelOutput() throws Exception {
    final List<String> failures = new ArrayList<String>();
    for (final InfoLevel infoLevel : InfoLevel.values()) {
      if (infoLevel == InfoLevel.unknown) {
        continue;
      }
      for (final SchemaTextDetailType schemaTextDetailType : SchemaTextDetailType.values()) {
        final String referenceFile = schemaTextDetailType + "_" + infoLevel + ".txt";

        final File testOutputFile =
            File.createTempFile("schemacrawler." + referenceFile + ".", ".test");
        testOutputFile.delete();

        final OutputOptions outputOptions =
            new OutputOptions(OutputFormat.text.name(), testOutputFile);
        outputOptions.setNoInfo(false);
        outputOptions.setNoHeader(false);
        outputOptions.setNoFooter(false);

        final Config config =
            Config.load(
                SchemaCrawlerOutputTest.class.getResourceAsStream(
                    "/hsqldb.INFORMATION_SCHEMA.config.properties"));
        final SchemaCrawlerOptions schemaCrawlerOptions = new SchemaCrawlerOptions(config);
        schemaCrawlerOptions.setSchemaInfoLevel(infoLevel.getSchemaInfoLevel());

        final DatabaseConnectionOptions connectionOptions =
            testUtility.getDatabaseConnectionOptions();

        final Executable executable = new SchemaCrawlerExecutable(schemaTextDetailType.name());
        executable.setSchemaCrawlerOptions(schemaCrawlerOptions);
        executable.setOutputOptions(outputOptions);
        executable.execute(connectionOptions.getConnection());

        failures.addAll(
            TestUtility.compareOutput(
                INFO_LEVEL_OUTPUT + referenceFile,
                testOutputFile,
                outputOptions.getOutputFormat()));
      }
    }
    if (failures.size() > 0) {
      fail(failures.toString());
    }
  }
 public void execute() throws Exception {
   final Executable executable = new SchemaCrawlerExecutable(command);
   if (outputOptions != null) {
     executable.setOutputOptions(outputOptions);
   }
   if (schemaCrawlerOptions != null) {
     executable.setSchemaCrawlerOptions(schemaCrawlerOptions);
   }
   if (config != null) {
     executable.setAdditionalConfiguration(config);
   }
   if (connectionOptions != null) {
     executable.execute(connectionOptions.createConnection());
   } else {
     throw new SchemaCrawlerException("No connection options provided");
   }
 }