/*
* Copyright (c) Mark Derricutt 2010.
*
* The use and distribution terms for this software are covered by the Eclipse Public License 1.0
* (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10.html
* at the root of this distribution.
*
* By using this software in any fashion, you are agreeing to be bound by the terms of this license.
*
* You must not remove this notice, or any other, from this software.
*/
package com.theoryinpractise.clojure;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.junit.Test;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@RunWith(Theories.class)
public class NamespaceDiscoveryTest {
@Test
public void testNamespaceDiscovery() throws MojoExecutionException {
final NamespaceDiscovery namespaceDiscovery = new NamespaceDiscovery(mock(Log.class), new File("target/test-classes"), "UTF-8", true);
List<String> namespaces =
new ArrayList<String>() {
{
for (NamespaceInFile s : namespaceDiscovery.discoverNamespacesInPath(new File("src/test/resources"))) {
System.out.println(s.getName());
add(s.getName());
}
}
};
assertThat(namespaces)
.isNotNull()
.isNotEmpty()
.hasSize(5)
.contains("test1")
.contains("test2")
.contains("test.test3")
.contains("nsmeta")
.contains("charset")
.doesNotContain("test.test4");
}
public static class NamespaceData {
public String[] namespaces;
public File[] sourceDirectories;
public boolean compileDeclaredNamespaceOnly;
public int expectedSize;
public NamespaceData(String[] namespaces, File[] sourceDirectories, boolean compileDeclaredNamespaceOnly, int expectedSize) {
this.namespaces = namespaces;
this.sourceDirectories = sourceDirectories;
this.compileDeclaredNamespaceOnly = compileDeclaredNamespaceOnly;
this.expectedSize = expectedSize;
}
}
@DataPoint public static NamespaceData ns1 = new NamespaceData(new String[] {"test.*"}, new File[] {new File("src/test/resources")}, true, 3);
@DataPoint public static NamespaceData ns2 = new NamespaceData(new String[] {"!test\\..*"}, new File[] {new File("src/test/resources")}, false, 4);
@DataPoint public static NamespaceData ns3 = new NamespaceData(new String[] {"test1"}, new File[] {new File("src/test/resources")}, true, 1);
@DataPoint public static NamespaceData ns4 = new NamespaceData(new String[] {"test\\..*"}, new File[] {new File("src/test/resources")}, true, 1);
@DataPoint public static NamespaceData ns5 = new NamespaceData(new String[] {"!test\\..*", "test.*"}, new File[] {new File("src/test/resources")}, true, 2);
@DataPoint
public static NamespaceData ns6 =
new NamespaceData(new String[] {"!test\\..*", "test.*"}, new File[] {new File("src/test/resources"), new File("src/test/resources")}, true, 2);
@DataPoint public static NamespaceData ns7 = new NamespaceData(new String[] {"charset.*"}, new File[] {new File("src/test/resources")}, true, 1);
@Theory
public void testNamespaceFiltering(NamespaceData ns) throws MojoExecutionException {
NamespaceDiscovery namespaceDiscovery = new NamespaceDiscovery(mock(Log.class), new File("target/test-classes"), "UTF-8", ns.compileDeclaredNamespaceOnly);
assertThat(namespaceDiscovery.discoverNamespacesIn(ns.namespaces, ns.sourceDirectories))
.describedAs("Discovered Namespaces")
.isNotNull()
.isNotEmpty()
.hasSize(ns.expectedSize);
}
}