aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java375
1 files changed, 375 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java
new file mode 100644
index 00000000..9b8ff155
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java
@@ -0,0 +1,375 @@
+/*
+ * 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.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.FileUtilities;
+import org.apache.tools.ant.util.FileUtils;
+import org.junit.After;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.apache.tools.ant.AntAssert.assertContains;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ */
+public class JarTest {
+
+ @Rule
+ public final BuildFileRule buildRule = new BuildFileRule();
+
+ private static String tempJar = "tmp.jar";
+ private static String tempDir = "jartmp/";
+ private Reader r1, r2;
+
+
+ @Before
+ public void setUp() {
+ buildRule.configureProject("src/etc/testcases/taskdefs/jar.xml");
+ buildRule.executeTarget("setUp");
+ }
+
+ @After
+ public void tearDown() {
+ if (r1 != null) {
+ try {
+ r1.close();
+ } catch (IOException e) {
+ }
+ }
+ if (r2 != null) {
+ try {
+ r2.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ @Test
+ public void test1() {
+ try {
+ buildRule.executeTarget("test1");
+ fail("BuildException expected: required argument not specified");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ @Test
+ public void test2() {
+ try {
+ buildRule.executeTarget("test2");
+ fail("BuildException expected: manifest file does not exist");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ @Test
+ public void test3() {
+ try {
+ buildRule.executeTarget("test3");
+ fail("BuildException expected: Unrecognized whenempty attribute: format C: /y");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ private File getOutputDir() {
+ return new File(buildRule.getProject().getProperty("output"));
+ }
+
+ @Test
+ public void test4() {
+ buildRule.executeTarget("test4");
+ File jarFile = new File(getOutputDir(), tempJar);
+
+ assertTrue(jarFile.exists());
+ }
+
+ @Test
+ public void testNoRecreateWithoutUpdate() {
+ testNoRecreate("test4");
+ }
+
+ @Test
+ public void testNoRecreateWithUpdate() {
+ testNoRecreate("testNoRecreateWithUpdate");
+ }
+
+ private void testNoRecreate(String secondTarget) {
+ buildRule.executeTarget("test4");
+ File jarFile = new File(getOutputDir(), tempJar);
+
+ // move the modified date back a couple of seconds rather than delay the test on each run
+ Assume.assumeTrue(jarFile.setLastModified(jarFile.lastModified()
+ - (FileUtils.getFileUtils().getFileTimestampGranularity() * 3)));
+ long jarModifiedDate = jarFile.lastModified();
+
+ buildRule.executeTarget(secondTarget);
+ assertEquals("jar has not been recreated in " + secondTarget,
+ jarModifiedDate, jarFile.lastModified());
+ }
+
+ @Test
+ public void testRecreateWithoutUpdateAdditionalFiles() {
+ testRecreate("test4", "testRecreateWithoutUpdateAdditionalFiles");
+ }
+
+ @Test
+ public void testRecreateWithUpdateAdditionalFiles() {
+ testRecreate("test4", "testRecreateWithUpdateAdditionalFiles");
+ }
+
+ @Test
+ public void testRecreateWithoutUpdateNewerFile() {
+ testRecreate("testRecreateNewerFileSetup",
+ "testRecreateWithoutUpdateNewerFile");
+ }
+
+ @Test
+ public void testRecreateWithUpdateNewerFile() {
+ testRecreate("testRecreateNewerFileSetup",
+ "testRecreateWithUpdateNewerFile");
+ }
+
+ private void testRecreate(String firstTarget, String secondTarget) {
+ //Move the modified date on all input back a couple of seconds rather then delay the test to achieve a similar effect
+ FileUtilities.rollbackTimetamps(buildRule.getProject().getBaseDir(), 5);
+
+ buildRule.executeTarget(firstTarget);
+ File jarFile = new File(getOutputDir(), tempJar);
+
+ //Move the modified date back a couple of seconds rather then delay the test to achieve a similar effect
+ FileUtilities.rollbackTimetamps(buildRule.getOutputDir(), 5);
+
+ long jarModifiedDate = jarFile.lastModified();
+ buildRule.executeTarget(secondTarget);
+ jarFile = new File(getOutputDir(), tempJar);
+ assertTrue("jar has been recreated in " + secondTarget,
+ jarModifiedDate < jarFile.lastModified());
+ }
+
+ @Test
+ public void testManifestStaysIntact()
+ throws IOException, ManifestException {
+ buildRule.executeTarget("testManifestStaysIntact");
+
+ r1 = new FileReader(new File(getOutputDir(),
+ tempDir + "manifest"));
+ r2 = new FileReader(new File(getOutputDir(),
+ tempDir + "META-INF/MANIFEST.MF"));
+
+ Manifest mf1 = new Manifest(r1);
+ Manifest mf2 = new Manifest(r2);
+ assertEquals(mf1, mf2);
+ }
+
+ @Test
+ public void testNoRecreateBasedirExcludesWithUpdate() {
+ testNoRecreate("testNoRecreateBasedirExcludesWithUpdate");
+ }
+
+ @Test
+ public void testNoRecreateBasedirExcludesWithoutUpdate() {
+ testNoRecreate("testNoRecreateBasedirExcludesWithoutUpdate");
+ }
+
+ @Test
+ public void testNoRecreateZipfilesetExcludesWithUpdate() {
+ testNoRecreate("testNoRecreateZipfilesetExcludesWithUpdate");
+ }
+
+ @Test
+ public void testNoRecreateZipfilesetExcludesWithoutUpdate() {
+ testNoRecreate("testNoRecreateZipfilesetExcludesWithoutUpdate");
+ }
+
+ @Test
+ public void testRecreateZipfilesetWithoutUpdateAdditionalFiles() {
+ testRecreate("test4",
+ "testRecreateZipfilesetWithoutUpdateAdditionalFiles");
+ }
+
+ @Test
+ public void testRecreateZipfilesetWithUpdateAdditionalFiles() {
+ testRecreate("test4",
+ "testRecreateZipfilesetWithUpdateAdditionalFiles");
+ }
+
+ @Test
+ public void testRecreateZipfilesetWithoutUpdateNewerFile() {
+ testRecreate("testRecreateNewerFileSetup",
+ "testRecreateZipfilesetWithoutUpdateNewerFile");
+ }
+
+ @Test
+ public void testRecreateZipfilesetWithUpdateNewerFile() {
+ testRecreate("testRecreateNewerFileSetup",
+ "testRecreateZipfilesetWithUpdateNewerFile");
+ }
+
+ @Test
+ public void testCreateWithEmptyFileset() {
+ buildRule.executeTarget("testCreateWithEmptyFilesetSetUp");
+ buildRule.executeTarget("testCreateWithEmptyFileset");
+ buildRule.executeTarget("testCreateWithEmptyFileset");
+ }
+
+ @Test
+ public void testUpdateIfOnlyManifestHasChanged() {
+ buildRule.executeTarget("testUpdateIfOnlyManifestHasChanged");
+ File jarXml = new File(getOutputDir(), tempDir + "jar.xml");
+ assertTrue(jarXml.exists());
+ }
+
+ // bugzilla report 10262
+ @Test
+ public void testNoDuplicateIndex() throws IOException {
+ ZipFile archive = null;
+ try {
+ buildRule.executeTarget("testIndexTests");
+ archive = new ZipFile(new File(getOutputDir(), 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
+ @Test
+ public void testRootFilesInIndex() throws IOException {
+ ZipFile archive = null;
+ try {
+ buildRule.executeTarget("testIndexTests");
+ archive = new ZipFile(new File(getOutputDir(), 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();
+ }
+ }
+ }
+ @Test
+ public void testManifestOnlyJar() {
+
+ buildRule.executeTarget("testManifestOnlyJar");
+ assertContains("Building MANIFEST-only jar: ", buildRule.getLog());
+ File manifestFile = new File(getOutputDir(), tempDir + "META-INF" + File.separator + "MANIFEST.MF");
+ assertTrue(manifestFile.exists());
+ }
+
+ @Test
+ public void testIndexJarsPlusJarMarker() {
+ buildRule.executeTarget("testIndexJarsPlusJarMarker");
+ }
+
+ @Test
+ public void testNoVersionInfoFail() {
+ try {
+ buildRule.executeTarget("testNoVersionInfoFail");
+ fail("BuildException expected: Manifest Implemention information missing.");
+ } catch (BuildException ex) {
+ assertContains("No Implementation-Title set.", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testNoVersionInfoIgnore() {
+ buildRule.executeTarget("testNoVersionInfoIgnore");
+ assertTrue(buildRule.getFullLog().indexOf("No Implementation-Title set.") > -1 );
+ assertTrue(buildRule.getFullLog().indexOf("No Implementation-Version set.") > -1 );
+ assertTrue(buildRule.getFullLog().indexOf("No Implementation-Vendor set.") > -1 );
+ }
+
+ @Test
+ public void testNoVersionInfoWarn() {
+ buildRule.executeTarget("testNoVersionInfoWarn");
+ assertTrue(buildRule.getLog().indexOf("No Implementation-Title set.") > -1 );
+ assertTrue(buildRule.getLog().indexOf("No Implementation-Version set.") > -1 );
+ assertTrue(buildRule.getLog().indexOf("No Implementation-Vendor set.") > -1 );
+ }
+
+ @Test
+ public void testNoVersionInfoNoStrict() {
+ buildRule.executeTarget("testNoVersionInfoNoStrict");
+ assertFalse(buildRule.getLog().indexOf("No Implementation-Title set.") > -1 );
+ assertFalse(buildRule.getLog().indexOf("No Implementation-Version set.") > -1 );
+ assertFalse(buildRule.getLog().indexOf("No Implementation-Vendor set.") > -1 );
+ }
+
+ @Test
+ public void testHasVersionInfo() {
+ buildRule.executeTarget("testHasVersionInfo");
+ assertFalse(buildRule.getLog().indexOf("No Implementation-Title set.") > -1 );
+ assertFalse(buildRule.getLog().indexOf("No Implementation-Version set.") > -1 );
+ assertFalse(buildRule.getLog().indexOf("No Implementation-Vendor set.") > -1 );
+ }
+
+}