blob: 5d3939aa7d67f185e04e17ff70a3516cfe37fe86 [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.FileOutputStream;
import java.io.FileWriter;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.io.File;
import java.io.IOException;
import org.apache.tools.ant.types.Parameter;
/** Check behaviour of ModuleSelector.
*
* @author Jaroslav Tulach
*/
public class ModuleSelectorTest extends TestBase {
private ModuleSelector selector;
public ModuleSelectorTest(String testName) {
super(testName);
}
protected @Override void setUp() throws Exception {
super.setUp();
selector = new ModuleSelector();
}
public void testIsSelectedForNotAModule() throws IOException {
File noModule = generateJar(new String[0], createManifest ());
assertFalse("Not acceptable", selector.isSelected(getWorkDir(), noModule.toString(), noModule));
}
public void testIncludesAllModulesByDefault() throws Exception {
Manifest m = createManifest ();
m.getMainAttributes().putValue("OpenIDE-Module", "org.my.module");
File aModule = generateJar(new String[0], m);
assertTrue("Accepted", selector.isSelected(getWorkDir(), aModule.toString(), aModule));
}
public void testCanExcludeAModule() throws Exception {
Parameter p = new Parameter();
p.setName("excludeModules");
p.setValue("org.my.module");
selector.setParameters(new Parameter[] { p });
Manifest m = createManifest ();
m.getMainAttributes().putValue("OpenIDE-Module", "org.my.module");
File aModule = generateJar(new String[0], m);
assertFalse("Refused", selector.isSelected(getWorkDir(), aModule.toString(), aModule));
}
public void testCanExcludeOSGiWithAttributes() throws Exception {
Parameter p = new Parameter();
p.setName("excludeModules");
p.setValue("org.eclipse.core.jobs");
selector.setParameters(new Parameter[] { p });
Manifest m = createManifest ();
m.getMainAttributes().putValue("Bundle-SymbolicName", "org.eclipse.core.jobs; singleton:=true");
File aModule = generateJar(new String[0], m);
assertFalse("Refused", selector.isSelected(getWorkDir(), aModule.toString(), aModule));
}
public void testCanShowOnlyExcludedModules() throws Exception {
Parameter p = new Parameter();
p.setName("excluded");
p.setValue("true");
Parameter p2 = new Parameter();
p2.setName("excludeModules");
p2.setValue("org.my.module");
selector.setParameters(new Parameter[] { p, p2 });
Manifest m = createManifest ();
m.getMainAttributes().putValue("OpenIDE-Module", "org.my.module");
File aModule = generateJar(new String[0], m);
assertTrue("Now we are accepting only excluded modules", selector.isSelected(getWorkDir(), aModule.toString(), aModule));
}
public void testIsSelectedForNotAModuleIsStillFalseEvenWeAcceptOnlyExcludedModules() throws IOException {
Parameter p = new Parameter();
p.setName("excluded");
p.setValue("true");
Parameter p2 = new Parameter();
p2.setName("excludeModules");
p2.setValue("org.my.module");
selector.setParameters(new Parameter[] { p, p2 });
File noModule = generateJar(new String[0], createManifest ());
assertFalse("Not acceptable", selector.isSelected(getWorkDir(), noModule.toString(), noModule));
}
public void testCanExcludeACluster() throws Exception {
Parameter p = new Parameter();
p.setName("includeClusters");
p.setValue("nonexistent");
selector.setParameters(new Parameter[] { p });
Manifest m = createManifest ();
m.getMainAttributes().putValue("OpenIDE-Module", "org.my.module");
File aModule = generateJar(new String[0], m);
new File(getWorkDir(), "update_tracking").mkdir();
assertFalse("Refused", selector.isSelected(getWorkDir().getParentFile(), aModule.toString(), aModule));
}
public void testWhatItDoesOnADirectory() throws Exception {
assertFalse("Refused", selector.isSelected(getWorkDir().getParentFile(), getWorkDir().getName(), getWorkDir()));
}
public void testNoManifest() throws Exception {
File aModule = generateJar(new String[] { "some/fake/entry.txt" }, null);
assertFalse("Refused", selector.isSelected(getWorkDir().getParentFile(), aModule.toString(), aModule));
}
public void testParsingOfUpdateTrackingFiles() throws Exception {
doParsingOfUpdateTrackingFiles(1);
}
public void testParsingOfUpdateTrackingFilesOnMoreDirs() throws Exception {
doParsingOfUpdateTrackingFiles(2);
}
private void doParsingOfUpdateTrackingFiles(int parents) throws Exception {
File updateTracking = new File(getWorkDir(), "update-tracking");
updateTracking.mkdirs();
assertTrue("Created", updateTracking.isDirectory());
Manifest m = createManifest ();
m.getMainAttributes().putValue("OpenIDE-Module", "org.my.module");
File aModule = generateJar(new String[0], m);
File trackingFile = new File(updateTracking, "org-my-module.xml");
try (FileWriter w = new FileWriter(trackingFile)) {
w.write(
"<?xml version='1.0' encoding='UTF-8'?>\n" +
"<module codename='org.apache.tools.ant.module/3'>\n" +
"<module_version specification_version='3.22' origin='installer' last='true' install_time='1124194231878'>\n" +
"<file name='ant/bin/ant' crc='1536373800'/>\n" +
"<file name='ant/bin/ant.bat' crc='3245456472'/>\n" +
"<file name='ant/bin/ant.cmd' crc='3819623376'/>\n" +
"<file name='ant/bin/antRun' crc='2103827286'/>\n" +
"<file name='ant/bin/antRun.bat' crc='2739687679'/>\n" +
"<file name='ant/bin/antRun.pl' crc='3955456526'/>\n" +
" </module_version>\n" +
"</module>\n"
);
}
StringBuilder sb = new StringBuilder();
sb.append(trackingFile.getPath());
while (--parents > 0) {
File x = new File(getWorkDir(), parents + ".xml");
try (FileWriter xw = new FileWriter(x)) {
xw.write(
"<?xml version='1.0' encoding='UTF-8'?>\n" +
"<module codename='" + x + "/3'>\n" +
"<module_version specification_version='3.22' origin='installer' last='true' install_time='1124194231878'>\n" +
" </module_version>\n" +
"</module>\n"
);
}
sb.insert(0, File.pathSeparator);
sb.insert(0, x.getPath());
}
Parameter p = new Parameter();
p.setName("updateTrackingFiles");
p.setValue(sb.toString());
selector.setParameters(new Parameter[] { p });
assertTrue("module accepted", selector.isSelected(getWorkDir(), aModule.toString(), aModule));
assertTrue("its file as well", selector.isSelected(getWorkDir(), "ant/bin/ant.bat", new File(aModule.getParent(), "ant/bin/ant.bat")));
assertTrue("also the tracking file is accepted", selector.isSelected(getWorkDir(), "update-tracking/" + trackingFile.getName(), trackingFile));
}
private File createNewJarFile() throws IOException {
int i = 0;
for (;;) {
File f = new File (this.getWorkDir(), i++ + ".jar");
if (!f.exists ()) {
return f;
}
}
}
protected final File generateJar (String[] content, Manifest manifest) throws IOException {
File f = createNewJarFile ();
JarOutputStream os;
if (manifest != null) {
os = new JarOutputStream (new FileOutputStream (f), manifest);
} else {
os = new JarOutputStream (new FileOutputStream (f));
}
for (int i = 0; i < content.length; i++) {
os.putNextEntry(new JarEntry (content[i]));
os.closeEntry();
}
os.closeEntry ();
os.close();
return f;
}
}