blob: 310c706ec8f0d09a8a3a7d10ca340383440ae6f8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.nbbuild;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.selectors.FilenameSelector;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.netbeans.junit.NbTestCase;
import static org.junit.Assert.*;
/**
*
* @author Richard Michalsky
*/
public class PathFileSetTest extends NbTestCase {
private PathFileSet pfs;
private Project fakeproj;
private ClusterRecord cl1;
private ClusterRecord cl2;
public PathFileSetTest(String testName) {
super(testName);
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
// @Before
@Override
protected void setUp() throws IOException {
clearWorkDir();
pfs = new PathFileSet();
fakeproj = new Project();
fakeproj.setBaseDir(getWorkDir());
fakeproj.addBuildListener(new BuildListener() {
public void messageLogged(BuildEvent buildEvent) {
if (buildEvent.getPriority() <= Project.MSG_VERBOSE) {
System.err.println(buildEvent.getMessage());
}
}
public void taskStarted(BuildEvent buildEvent) {
}
public void taskFinished(BuildEvent buildEvent) {
}
public void targetStarted(BuildEvent buildEvent) {
}
public void targetFinished(BuildEvent buildEvent) {
}
public void buildStarted(BuildEvent buildEvent) {
}
public void buildFinished(BuildEvent buildEvent) {
}
});
pfs.setProject(fakeproj);
cl1 = new ClusterRecord("cl1").create().addModule("org-m1", true, true, true);
cl2 = new ClusterRecord("cl2").create().addModule("org-m2", true, false, false);
pfs.addPath(new Path(fakeproj, "cl1" + File.pathSeparator + "cl2"));
}
// @After
@Override
protected void tearDown() {
}
private void executeAndCheckResults(String[] expected) throws BuildException, IOException {
String[] output = new String[pfs.size()];
int j = 0;
for (Iterator it = pfs.iterator(); it.hasNext(); j++) {
FileResource fileResource = (FileResource) it.next();
String path = fileResource.getFile().getAbsolutePath().replace('\\', '/');
output[j] = path;
}
Arrays.sort(output);
String wd = getWorkDir().getPath().replace('\\', '/').concat("/");
for (int i = 0; i < expected.length; i++) {
expected[i] = wd + expected[i];
}
assertArrayEquals(expected, output);
}
private class ClusterRecord {
File ut;
File cm;
File m;
private String clusterName;
public ClusterRecord(String clusterName) {
this.clusterName = clusterName;
}
public ClusterRecord create() throws IOException {
ut = new File(getWorkDir(), clusterName + "/update_tracking");
ut.mkdirs();
assertTrue(ut.isDirectory());
cm = new File(getWorkDir(), clusterName + "/config/Modules");
cm.mkdirs();
assertTrue(cm.isDirectory());
m = new File(getWorkDir(), clusterName + "/modules");
m.mkdirs();
assertTrue(m.isDirectory());
return this;
}
public ClusterRecord addModule(String dashedCNB, boolean jar, boolean config, boolean updateTracking) throws IOException {
if (updateTracking) {
assertTrue(new File(ut, dashedCNB + ".xml").createNewFile());
}
if (jar) {
assertTrue(new File(m, dashedCNB + ".jar").createNewFile());
}
if (config) {
assertTrue(new File(cm, dashedCNB + ".xml").createNewFile());
}
return this;
}
}
@Test
public void testFindAllFiles() throws IOException {
executeAndCheckResults(new String[]{"cl1/config/Modules/org-m1.xml",
"cl1/modules/org-m1.jar",
"cl1/update_tracking/org-m1.xml",
"cl2/modules/org-m2.jar"});
}
@Test
public void testWildcardIncludes() throws IOException {
pfs.setInclude("**/*.jar");
executeAndCheckResults(new String[]{"cl1/modules/org-m1.jar", "cl2/modules/org-m2.jar"});
}
@Test
public void testSimpleIncludes() throws IOException {
pfs.setInclude("modules/org-m1.jar");
executeAndCheckResults(new String[]{"cl1/modules/org-m1.jar"});
}
@Test
/** Cluster name is part of the basedir and thus WON'T match. */
public void testWrongRelativeIncludes() throws IOException {
pfs.setInclude("cl1/modules/org-m1.jar");
assertEquals(pfs.size(), 0);
}
@Test
public void testEmptySet() throws IOException {
pfs.setInclude("pattern not present");
assertEquals(pfs.size(), 0);
}
@Test
public void testFileNameSelector() throws IOException {
FilenameSelector sel = new FilenameSelector();
sel.setCasesensitive(false);
sel.setName("**/config/**/*.xml");
pfs.add(sel);
executeAndCheckResults(new String[]{"cl1/config/Modules/org-m1.xml"});
}
@Test
public void testPathAttribute() throws IOException {
new ClusterRecord("cl3").create().addModule("org-m3", true, false, false);
new ClusterRecord("cl4").create().addModule("org-m4", true, false, false);
Path path = new Path(fakeproj, getWorkDir().getPath() + File.separator + "cl3"
+ File.pathSeparator
+ getWorkDir().getPath() + File.separator + "cl4");
pfs.setPath(path);
pfs.setInclude("**/*.jar");
executeAndCheckResults(new String[] {
"cl1/modules/org-m1.jar", "cl2/modules/org-m2.jar",
"cl3/modules/org-m3.jar", "cl4/modules/org-m4.jar"
});
}
}