/** Tests dynamically adding a jar file to the classpath. */
  @Test
  public void addJarToClasspath() throws Exception {
    assertFalse(
        new ClassPathResource("db/migration/V1__Initial_structure.sql.sql", getClassLoader())
            .exists());
    assertFalse(
        ClassUtils.isPresent("org.flywaydb.sample.migration.V1_2__Another_user", getClassLoader()));

    String jar = new ClassPathResource("flyway-sample.jar", getClassLoader()).getLocationOnDisk();
    assertTrue(new File(jar).isFile());
    Main.addJarOrDirectoryToClasspath(jar);

    assertTrue(
        new ClassPathResource("db/migration/V1__Initial_structure.sql", getClassLoader()).exists());
    assertTrue(
        ClassUtils.isPresent("org.flywaydb.sample.migration.V1_2__Another_user", getClassLoader()));

    Resource[] resources =
        new ClassPathScanner(getClassLoader())
            .scanForResources(new Location("classpath:db/migration"), "V1__", ".sql");
    assertEquals("db/migration/V1__Initial_structure.sql", resources[0].getLocation());

    Class<?>[] classes =
        new ClassPathScanner(getClassLoader())
            .scanForClasses(
                new Location("classpath:org/flywaydb/sample/migration"), SpringJdbcMigration.class);
    assertEquals("org.flywaydb.sample.migration.V1_2__Another_user", classes[0].getName());
  }
  /** Tests dynamically adding a directory to the default package of classpath. */
  @Test
  public void addDirectoryToClasspathDefaultPackage() throws Exception {
    assertFalse(new ClassPathResource("runtime.conf", getClassLoader()).exists());

    String folder = new ClassPathResource("dynamic/pkg2", getClassLoader()).getLocationOnDisk();
    Main.addJarOrDirectoryToClasspath(folder);

    assertTrue(new ClassPathResource("funtime.properties", getClassLoader()).exists());

    Resource[] resources =
        new ClassPathScanner(getClassLoader())
            .scanForResources(new Location("classpath:"), "fun", ".properties");
    assertEquals("funtime.properties", resources[1].getLocation());
  }
  /** Tests dynamically adding a directory to the classpath. */
  @Test
  public void addDirectoryToClasspath() throws Exception {
    assertFalse(new ClassPathResource("pkg/runtime.conf", getClassLoader()).exists());

    String folder = new ClassPathResource("dynamic", getClassLoader()).getLocationOnDisk();
    Main.addJarOrDirectoryToClasspath(folder);

    assertTrue(new ClassPathResource("pkg/runtime.conf", getClassLoader()).exists());

    Resource[] resources =
        new ClassPathScanner(getClassLoader())
            .scanForResources(new Location("classpath:pkg"), "run", ".conf");
    assertEquals("pkg/runtime.conf", resources[0].getLocation());
  }