aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.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/ManifestTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java477
1 files changed, 477 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java
new file mode 100644
index 00000000..6e794327
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java
@@ -0,0 +1,477 @@
+/*
+ * 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.IOException;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.Project;
+import org.junit.After;
+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.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Testcase for the Manifest class used in the jar task.
+ *
+ */
+public class ManifestTest {
+
+ @Rule
+ public final BuildFileRule buildRule = new BuildFileRule();
+
+ private File expandedManifest;
+ private File outDir;
+
+ public static final String LONG_LINE
+ = "AReallyLongLineToTestLineBreakingInManifests-ACapabilityWhich" +
+ "IsSureToLeadToHundredsOfQuestionsAboutWhyAntMungesManifests" +
+ "OfCourseTheAnswerIsThatIsWhatTheSpecRequiresAndIfAnythingHas" +
+ "AProblemWithThatItIsNotABugInAnt";
+
+ public static final String LONG_70_NAME
+ = "ThisNameIsJustSeventyCharactersWhichIsAllowedAccordingToTheSpecsFiller";
+ public static final String LONG_68_NAME
+ = "ThisNameIsJustSixtyEightCharactersWhichIsAllowedAccordingToTheSpecsX";
+ public static final String NOT_LONG_NAME
+ = "NameIsJustUnderSeventyCharactersWhichIsAllowedAccordingTheSpec";
+
+ public static final String VALUE = "NOT_LONG";
+
+
+ @Before
+ public void setUp() {
+ buildRule.configureProject("src/etc/testcases/taskdefs/manifest.xml");
+ outDir = new File(buildRule.getProject().getProperty("output"));
+ expandedManifest = new File(outDir, "manifests/META-INF/MANIFEST.MF");
+ }
+
+ @After
+ public void tearDown() {
+ buildRule.executeTarget("tearDown");
+ }
+
+ /**
+ * Empty manifest - is OK
+ */
+ @Test
+ public void test1() throws ManifestException, IOException {
+ buildRule.executeTarget("test1");
+ Manifest manifest = getManifest(expandedManifest);
+ String version = manifest.getManifestVersion();
+ assertEquals("Manifest was not created with correct version - ", "1.0", version);
+ }
+
+ /**
+ * Simple Manifest with version 2.0
+ */
+ @Test
+ public void test2() throws ManifestException, IOException {
+ buildRule.executeTarget("test2");
+ Manifest manifest = getManifest(expandedManifest);
+ String version = manifest.getManifestVersion();
+ assertEquals("Manifest was not created with correct version - ", "2.0", version);
+ }
+
+ /**
+ * Malformed manifest - no : on the line
+ */
+ @Test
+ public void test3() {
+ try {
+ buildRule.executeTarget("test3");
+ fail("BuildException expected: Manifest is invalid - no colon on header line");
+ } catch (BuildException ex) {
+ assertContains("Invalid Manifest", ex.getMessage());
+ }
+ }
+
+ /**
+ * Malformed manifest - starts with continuation line
+ */
+ @Test
+ public void test4() {
+ try {
+ buildRule.executeTarget("test4");
+ fail("BuildException expected: Manifest is invalid - section starts with continuation line");
+ } catch (BuildException ex) {
+ assertContains("Invalid Manifest", ex.getMessage());
+ }
+ }
+
+ /**
+ * Malformed manifest - Name attribute in main section
+ */
+ @Test
+ public void test5() {
+ buildRule.executeTarget("test5");
+ String output = buildRule.getLog();
+ boolean hasWarning = output.indexOf("Manifest warning: \"Name\" attributes should not occur in the main section") != -1;
+ assertTrue("Expected warning about Name in main section", hasWarning);
+ }
+
+ /**
+ * New Section not starting with Name attribute.
+ */
+ @Test
+ public void test6() {
+ try {
+ buildRule.executeTarget("test6");
+ fail("BuildException expected: Manifest is invalid - section starts with incorrect attribute");
+ } catch (BuildException ex) {
+ assertContains("Invalid Manifest", ex.getMessage());
+ }
+ String output = buildRule.getLog();
+ boolean hasWarning = output.indexOf("Manifest sections should start with a \"Name\" attribute") != -1;
+ assertTrue("Expected warning about section not starting with Name: attribute", hasWarning);
+ }
+
+
+ /**
+ * From attribute is illegal
+ */
+ @Test
+ public void test7() {
+ buildRule.executeTarget("test7");
+
+ boolean hasWarning = buildRule.getLog().indexOf(Manifest.ERROR_FROM_FORBIDDEN) != -1;
+ assertTrue("Expected warning about From: attribute", hasWarning);
+ }
+
+ /**
+ * Inline manifest - OK
+ */
+ @Test
+ public void test8() throws IOException, ManifestException {
+ buildRule.executeTarget("test8");
+ Manifest manifest = getManifest(expandedManifest);
+ Manifest.Section mainSection = manifest.getMainSection();
+ String classpath = mainSection.getAttributeValue("class-path");
+ assertEquals("Class-Path attribute was not set correctly - ", "fubar", classpath);
+
+ Manifest.Section testSection = manifest.getSection("Test");
+ String testAttr = testSection.getAttributeValue("TestAttr");
+ assertEquals("TestAttr attribute was not set correctly - ", "Test", testAttr);
+ }
+
+ /**
+ * Inline manifest - Invalid since has a Name attribute in the section element
+ */
+ @Test
+ public void test9() {
+ try {
+ buildRule.executeTarget("test9");
+ fail("BuildException expected: Construction is invalid - Name attribute should not be used");
+ } catch (BuildException ex) {
+ assertContains("Specify the section name using the \"name\" attribute of the <section> element",
+ ex.getMessage());
+ }
+ }
+
+ /**
+ * Inline manifest - Invalid attribute without name
+ */
+ @Test
+ public void test10() {
+ try {
+ buildRule.executeTarget("test10");
+ fail("BuildException expected: Attribute has no name");
+ } catch (BuildException ex) {
+ assertContains("Attributes must have name and value", ex.getMessage());
+ }
+ }
+
+ /**
+ * Inline manifest - Invalid attribute without value
+ */
+ @Test
+ public void test11() {
+ try {
+ buildRule.executeTarget("test11");
+ fail("BuildException expected: Attribute has no value");
+ } catch (BuildException ex) {
+ assertContains("Attributes must have name and value", ex.getMessage());
+ }
+ }
+
+ /**
+ * Inline manifest - Invalid attribute without value
+ */
+ @Test
+ public void test12() {
+ try {
+ buildRule.executeTarget("test12");
+ fail("BuildException expected: Section with no name");
+ } catch (BuildException ex) {
+ assertContains("Sections must have a name", ex.getMessage());
+ }
+ }
+
+ /**
+ * Inline manifest - Duplicate attribute
+ */
+ @Test
+ public void test13() {
+ try {
+ buildRule.executeTarget("test13");
+ fail("BuildException expected: Duplicate Attribute");
+ } catch (BuildException ex) {
+ assertContains("The attribute \"Test\" may not occur more than once in the same section", ex.getMessage());
+ }
+ }
+
+ /**
+ * Inline manifest - OK since classpath entries can be duplicated.
+ */
+ @Test
+ public void test14() throws IOException, ManifestException {
+ buildRule.executeTarget("test14");
+ Manifest manifest = getManifest(expandedManifest);
+ Manifest.Section mainSection = manifest.getMainSection();
+ String classpath = mainSection.getAttributeValue("class-path");
+ assertEquals("Class-Path attribute was not set correctly - ",
+ "Test1 Test2 Test3 Test4", classpath);
+ }
+
+ /**
+ * Tets long line wrapping
+ */
+ @Test
+ public void testLongLine() throws IOException, ManifestException {
+ Project p = buildRule.getProject();
+ p.setUserProperty("test.longline", LONG_LINE);
+ p.setUserProperty("test.long68name" , LONG_68_NAME);
+ p.setUserProperty("test.long70name" , LONG_70_NAME);
+ p.setUserProperty("test.notlongname" , NOT_LONG_NAME);
+ p.setUserProperty("test.value", VALUE);
+ buildRule.executeTarget("testLongLine");
+
+ Manifest manifest = getManifest(expandedManifest);
+ Manifest.Section mainSection = manifest.getMainSection();
+ String classpath = mainSection.getAttributeValue("class-path");
+ assertEquals("Class-Path attribute was not set correctly - ",
+ LONG_LINE, classpath);
+
+ String value = mainSection.getAttributeValue(LONG_68_NAME);
+ assertEquals("LONG_68_NAME_VALUE_MISMATCH", VALUE, value);
+ value = mainSection.getAttributeValue(LONG_70_NAME);
+ assertEquals("LONG_70_NAME_VALUE_MISMATCH", VALUE, value);
+ value = mainSection.getAttributeValue(NOT_LONG_NAME);
+ assertEquals("NOT_LONG_NAME_VALUE_MISMATCH", VALUE, value);
+
+ Set set = new HashSet();
+ FileReader fin = new FileReader(expandedManifest);
+ try {
+ BufferedReader in = new BufferedReader(fin);
+
+ String read = in.readLine();
+ while (read != null) {
+ set.add(read);
+ read = in.readLine();
+ }
+ in.close();
+ } finally {
+ fin.close();
+ }
+
+ assertTrue("Manifest file should have contained string ", set
+ .remove(" NOT_LONG"));
+ assertTrue("Manifest file should have contained string ", set
+ .remove(" NG"));
+ assertTrue("Manifest file should have contained string ", set
+ .remove(LONG_70_NAME + ": "));
+ assertTrue("Manifest file should have contained string ", set
+ .remove(NOT_LONG_NAME + ": NOT_LO"));
+ }
+
+ /**
+ * Tests ordering of sections
+ */
+ @Test
+ public void testOrder1() throws IOException, ManifestException {
+ buildRule.executeTarget("testOrder1");
+
+ Manifest manifest = getManifest(expandedManifest);
+ Enumeration e = manifest.getSectionNames();
+ String section1 = (String)e.nextElement();
+ String section2 = (String)e.nextElement();
+ assertEquals("First section name unexpected", "Test1", section1);
+ assertEquals("Second section name unexpected", "Test2", section2);
+
+ Manifest.Section section = manifest.getSection("Test1");
+ e = section.getAttributeKeys();
+ String attr1Key = (String)e.nextElement();
+ String attr2Key = (String)e.nextElement();
+ String attr1 = section.getAttribute(attr1Key).getName();
+ String attr2 = section.getAttribute(attr2Key).getName();
+ assertEquals("First attribute name unexpected", "TestAttr1", attr1);
+ assertEquals("Second attribute name unexpected", "TestAttr2", attr2);
+ }
+
+ /**
+ * Tests ordering of sections
+ */
+ @Test
+ public void testOrder2() throws IOException, ManifestException {
+ buildRule.executeTarget("testOrder2");
+
+ Manifest manifest = getManifest(expandedManifest);
+ Enumeration e = manifest.getSectionNames();
+ String section1 = (String)e.nextElement();
+ String section2 = (String)e.nextElement();
+ assertEquals("First section name unexpected", "Test2", section1);
+ assertEquals("Second section name unexpected", "Test1", section2);
+
+ Manifest.Section section = manifest.getSection("Test1");
+ e = section.getAttributeKeys();
+ String attr1Key = (String)e.nextElement();
+ String attr2Key = (String)e.nextElement();
+ String attr1 = section.getAttribute(attr1Key).getName();
+ String attr2 = section.getAttribute(attr2Key).getName();
+ assertEquals("First attribute name unexpected", "TestAttr2", attr1);
+ assertEquals("Second attribute name unexpected", "TestAttr1", attr2);
+ }
+
+ /**
+ * file attribute for manifest task is required.
+ */
+ @Test
+ public void testNoFile() {
+ try {
+ buildRule.executeTarget("testNoFile");
+ fail("BuildException expected: file is required");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ /**
+ * replace changes Manifest-Version from 2.0 to 1.0
+ */
+ @Test
+ public void testReplace() throws IOException, ManifestException {
+ buildRule.executeTarget("testReplace");
+ Manifest mf = getManifest(new File(outDir, "mftest.mf"));
+ assertNotNull(mf);
+ assertEquals(Manifest.getDefaultManifest(), mf);
+ }
+
+ /**
+ * update keeps the Manifest-Version and adds a new attribute Foo
+ */
+ @Test
+ public void testUpdate() throws IOException, ManifestException {
+ buildRule.executeTarget("testUpdate");
+ Manifest mf = getManifest(new File(outDir, "mftest.mf"));
+ assertNotNull(mf);
+ assertTrue(!Manifest.getDefaultManifest().equals(mf));
+ String mfAsString = mf.toString();
+ assertNotNull(mfAsString);
+ assertTrue(mfAsString.startsWith("Manifest-Version: 2.0"));
+ assertTrue(mfAsString.indexOf("Foo: Bar") > -1);
+
+ mf = getManifest(new File(outDir, "mftest2.mf"));
+ assertNotNull(mf);
+ mfAsString = mf.toString();
+ assertNotNull(mfAsString);
+ assertEquals(-1, mfAsString.indexOf("Foo: Bar"));
+ assertTrue(mfAsString.indexOf("Foo: Baz") > -1);
+ }
+
+ @Test
+ public void testFrom() {
+ buildRule.executeTarget("testFrom");
+ assertContains(Manifest.ERROR_FROM_FORBIDDEN, buildRule.getLog());
+ }
+
+ @Test
+ public void testIllegalName() {
+ try {
+ buildRule.executeTarget("testIllegalName");
+ fail("BuildException expected: Manifest attribute names must not contain ' '");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ @Test
+ public void testIllegalNameInSection() {
+ try {
+ buildRule.executeTarget("testIllegalNameInSection");
+ fail("BuildException expected: Manifest attribute names must not contain ' '");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ @Test
+ public void testIllegalNameBegin() {
+ try {
+ buildRule.executeTarget("testIllegalNameInSection");
+ fail("BuildException expected: Manifest attribute names must not start with '-' at the begin.");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ @Test
+ public void testIllegalName2() {
+ try {
+ buildRule.executeTarget("testIllegalName");
+ fail("BuildException expected: Manifest attribute names must not contain '.'");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ @Test
+ public void testIllegalName3() {
+ try {
+ buildRule.executeTarget("testIllegalName");
+ fail("BuildException expected: Manifest attribute names must not contain '*'");
+ } catch (BuildException ex) {
+ //TODO assert value
+ }
+ }
+
+ /**
+ * Reads mftest.mf.
+ */
+ private Manifest getManifest(File file) throws IOException, ManifestException {
+ FileReader r = new FileReader(file);
+ try {
+ return new Manifest(r);
+ } finally {
+ r.close();
+ }
+ }
+}