blob: 1fb1f5b6209ecf1fbe966172b168a2d40ff1dab0 [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.apache.tools.ant.taskdefs;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.tools.ant.BuildFileTest;
import org.apache.tools.ant.util.FileUtils;
/**
*/
public class JarTest extends BuildFileTest {
/** Utilities used for file operations */
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
private static String tempJar = "tmp.jar";
private static String tempDir = "jartmp/";
private Reader r1, r2;
public JarTest(String name) {
super(name);
}
public void setUp() {
configureProject("src/etc/testcases/taskdefs/jar.xml");
}
public void tearDown() {
if (r1 != null) {
try {
r1.close();
} catch (IOException e) {
}
}
if (r2 != null) {
try {
r2.close();
} catch (IOException e) {
}
}
executeTarget("cleanup");
}
public void test1() {
expectBuildException("test1", "required argument not specified");
}
public void test2() {
expectBuildException("test2", "manifest file does not exist");
}
public void test3() {
expectBuildException("test3", "Unrecognized whenempty attribute: format C: /y");
}
public void test4() {
executeTarget("test4");
File jarFile = new File(getProjectDir(), tempJar);
assertTrue(jarFile.exists());
}
public void testNoRecreateWithoutUpdate() {
testNoRecreate("test4");
}
public void testNoRecreateWithUpdate() {
testNoRecreate("testNoRecreateWithUpdate");
}
private void testNoRecreate(String secondTarget) {
executeTarget("test4");
File jarFile = new File(getProjectDir(), tempJar);
long jarModifiedDate = jarFile.lastModified();
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
} // end of try-catch
executeTarget(secondTarget);
assertEquals("jar has not been recreated in " + secondTarget,
jarModifiedDate, jarFile.lastModified());
}
public void testRecreateWithoutUpdateAdditionalFiles() {
testRecreate("test4", "testRecreateWithoutUpdateAdditionalFiles");
}
public void testRecreateWithUpdateAdditionalFiles() {
testRecreate("test4", "testRecreateWithUpdateAdditionalFiles");
}
public void testRecreateWithoutUpdateNewerFile() {
testRecreate("testRecreateNewerFileSetup",
"testRecreateWithoutUpdateNewerFile");
}
public void testRecreateWithUpdateNewerFile() {
testRecreate("testRecreateNewerFileSetup",
"testRecreateWithUpdateNewerFile");
}
private void testRecreate(String firstTarget, String secondTarget) {
executeTarget(firstTarget);
long sleeptime = 3000
+ FILE_UTILS.getFileTimestampGranularity();
try {
Thread.sleep(sleeptime);
} catch (InterruptedException e) {
} // end of try-catch
File jarFile = new File(getProjectDir(), tempJar);
long jarModifiedDate = jarFile.lastModified();
executeTarget(secondTarget);
jarFile = new File(getProjectDir(), tempJar);
assertTrue("jar has been recreated in " + secondTarget,
jarModifiedDate < jarFile.lastModified());
}
public void testManifestStaysIntact()
throws IOException, ManifestException {
executeTarget("testManifestStaysIntact");
r1 = new FileReader(getProject()
.resolveFile(tempDir + "manifest"));
r2 = new FileReader(getProject()
.resolveFile(tempDir + "META-INF/MANIFEST.MF"));
Manifest mf1 = new Manifest(r1);
Manifest mf2 = new Manifest(r2);
assertEquals(mf1, mf2);
}
public void testNoRecreateBasedirExcludesWithUpdate() {
testNoRecreate("testNoRecreateBasedirExcludesWithUpdate");
}
public void testNoRecreateBasedirExcludesWithoutUpdate() {
testNoRecreate("testNoRecreateBasedirExcludesWithoutUpdate");
}
public void testNoRecreateZipfilesetExcludesWithUpdate() {
testNoRecreate("testNoRecreateZipfilesetExcludesWithUpdate");
}
public void testNoRecreateZipfilesetExcludesWithoutUpdate() {
testNoRecreate("testNoRecreateZipfilesetExcludesWithoutUpdate");
}
public void testRecreateZipfilesetWithoutUpdateAdditionalFiles() {
testRecreate("test4",
"testRecreateZipfilesetWithoutUpdateAdditionalFiles");
}
public void testRecreateZipfilesetWithUpdateAdditionalFiles() {
testRecreate("test4",
"testRecreateZipfilesetWithUpdateAdditionalFiles");
}
public void testRecreateZipfilesetWithoutUpdateNewerFile() {
testRecreate("testRecreateNewerFileSetup",
"testRecreateZipfilesetWithoutUpdateNewerFile");
}
public void testRecreateZipfilesetWithUpdateNewerFile() {
testRecreate("testRecreateNewerFileSetup",
"testRecreateZipfilesetWithUpdateNewerFile");
}
public void testCreateWithEmptyFileset() {
executeTarget("testCreateWithEmptyFilesetSetUp");
executeTarget("testCreateWithEmptyFileset");
executeTarget("testCreateWithEmptyFileset");
}
public void testUpdateIfOnlyManifestHasChanged() {
executeTarget("testUpdateIfOnlyManifestHasChanged");
File jarXml = getProject().resolveFile(tempDir + "jar.xml");
assertTrue(jarXml.exists());
}
// bugzilla report 10262
public void testNoDuplicateIndex() throws IOException {
ZipFile archive = null;
try {
executeTarget("testIndexTests");
archive = new ZipFile(getProject().resolveFile(tempJar));
Enumeration e = archive.entries();
int numberOfIndexLists = 0;
while (e.hasMoreElements()) {
ZipEntry ze = (ZipEntry) e.nextElement();
if (ze.getName().equals("META-INF/INDEX.LIST")) {
numberOfIndexLists++;
}
}
assertEquals(1, numberOfIndexLists);
} finally {
if (archive != null) {
archive.close();
}
}
}
// bugzilla report 16972
public void testRootFilesInIndex() throws IOException {
ZipFile archive = null;
try {
executeTarget("testIndexTests");
archive = new ZipFile(getProject().resolveFile(tempJar));
ZipEntry ze = archive.getEntry("META-INF/INDEX.LIST");
InputStream is = archive.getInputStream(ze);
BufferedReader r = new BufferedReader(new InputStreamReader(is,
"UTF8"));
boolean foundSub = false;
boolean foundSubFoo = false;
boolean foundFoo = false;
String line = r.readLine();
while (line != null) {
if (line.equals("foo")) {
foundFoo = true;
} else if (line.equals("sub")) {
foundSub = true;
} else if (line.equals("sub/foo")) {
foundSubFoo = true;
}
line = r.readLine();
}
assertTrue(foundSub);
assertTrue(!foundSubFoo);
assertTrue(foundFoo);
} finally {
if (archive != null) {
archive.close();
}
}
}
public void testManifestOnlyJar() {
expectLogContaining("testManifestOnlyJar", "Building MANIFEST-only jar: ");
File manifestFile = getProject().resolveFile(tempDir + "META-INF" + File.separator + "MANIFEST.MF");
assertTrue(manifestFile.exists());
}
public void testIndexJarsPlusJarMarker() {
executeTarget("testIndexJarsPlusJarMarker");
}
public void testNoVersionInfoFail() {
expectBuildExceptionContaining("testNoVersionInfoFail", "Manifest Implemention information missing.", "No Implementation-Title set.");
}
public void testNoVersionInfoIgnore() {
executeTarget("testNoVersionInfoIgnore");
assertTrue( getFullLog().indexOf("No Implementation-Title set.") > -1 );
assertTrue( getFullLog().indexOf("No Implementation-Version set.") > -1 );
assertTrue( getFullLog().indexOf("No Implementation-Vendor set.") > -1 );
}
public void testNoVersionInfoWarn() {
executeTarget("testNoVersionInfoWarn");
assertTrue( getLog().indexOf("No Implementation-Title set.") > -1 );
assertTrue( getLog().indexOf("No Implementation-Version set.") > -1 );
assertTrue( getLog().indexOf("No Implementation-Vendor set.") > -1 );
}
public void testNoVersionInfoNoStrict() {
executeTarget("testNoVersionInfoNoStrict");
assertFalse( getLog().indexOf("No Implementation-Title set.") > -1 );
assertFalse( getLog().indexOf("No Implementation-Version set.") > -1 );
assertFalse( getLog().indexOf("No Implementation-Vendor set.") > -1 );
}
public void testHasVersionInfo() {
executeTarget("testHasVersionInfo");
assertFalse( getLog().indexOf("No Implementation-Title set.") > -1 );
assertFalse( getLog().indexOf("No Implementation-Version set.") > -1 );
assertFalse( getLog().indexOf("No Implementation-Vendor set.") > -1 );
}
}