Browse Source

Improve coverage of manifest unit tests

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271308 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 23 years ago
parent
commit
bbf5ec8b44
4 changed files with 145 additions and 14 deletions
  1. +25
    -0
      src/etc/testcases/taskdefs/manifest.xml
  2. +55
    -5
      src/main/org/apache/tools/ant/taskdefs/Manifest.java
  3. +9
    -0
      src/testcases/org/apache/tools/ant/BuildFileTest.java
  4. +56
    -9
      src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java

+ 25
- 0
src/etc/testcases/taskdefs/manifest.xml View File

@@ -6,10 +6,16 @@


<target name="test1"> <target name="test1">
<jar file="mftest1.jar" manifest="manifests/test1.mf"/> <jar file="mftest1.jar" manifest="manifests/test1.mf"/>
<unjar src="mftest1.jar" dest="manifests">
<include name="META-INF/MANIFEST.MF"/>
</unjar>
</target> </target>
<target name="test2"> <target name="test2">
<jar file="mftest2.jar" manifest="manifests/test2.mf"/> <jar file="mftest2.jar" manifest="manifests/test2.mf"/>
<unjar src="mftest2.jar" dest="manifests">
<include name="META-INF/MANIFEST.MF"/>
</unjar>
</target> </target>
<target name="test3"> <target name="test3">
@@ -41,6 +47,9 @@
</section> </section>
</manifest> </manifest>
</jar> </jar>
<unjar src="mftest8.jar" dest="manifests">
<include name="META-INF/MANIFEST.MF"/>
</unjar>
</target> </target>


<target name="test9"> <target name="test9">
@@ -98,12 +107,27 @@
<attribute name="class-Path" value="Test4"/> <attribute name="class-Path" value="Test4"/>
</manifest> </manifest>
</jar> </jar>
<unjar src="mftest14.jar" dest="manifests">
<include name="META-INF/MANIFEST.MF"/>
</unjar>
</target> </target>


<target name="testNoFile"> <target name="testNoFile">
<manifest /> <manifest />
</target> </target>


<target name="testLongLine">
<jar file="mftestLongLine.jar">
<manifest>
<attribute name="Class-path"
value="${test.longline}"/>
</manifest>
</jar>
<unjar src="mftestLongLine.jar" dest="manifests">
<include name="META-INF/MANIFEST.MF"/>
</unjar>
</target>

<target name="testReplace"> <target name="testReplace">
<copy file="manifests/test2.mf" toFile="mftest.mf" /> <copy file="manifests/test2.mf" toFile="mftest.mf" />
<manifest file="mftest.mf" /> <manifest file="mftest.mf" />
@@ -120,5 +144,6 @@
<delete> <delete>
<fileset dir="." includes="mftest*"/> <fileset dir="." includes="mftest*"/>
</delete> </delete>
<delete dir="manifests/META-INF"/>
</target> </target>
</project> </project>

+ 55
- 5
src/main/org/apache/tools/ant/taskdefs/Manifest.java View File

@@ -391,6 +391,18 @@ public class Manifest extends Task {
writer.println(); writer.println();
} }


/**
* Get a attribute of the section
*
* @param attributeName the name of the attribute
* @return a Manifest.Attribute instance if the attribute is
* single-valued, otherwise a Vector of Manifest.Attribute
* instances.
*/
public Object getAttribute(String attributeName) {
return attributes.get(attributeName.toLowerCase());
}
/** /**
* Get the value of the attribute with the name given. * Get the value of the attribute with the name given.
* *
@@ -497,8 +509,8 @@ public class Manifest extends Task {
for (Enumeration e = attributes.keys(); e.hasMoreElements();) { for (Enumeration e = attributes.keys(); e.hasMoreElements();) {
String attributeName = (String)e.nextElement(); String attributeName = (String)e.nextElement();
Object attributeValue = attributes.get(attributeName); Object attributeValue = attributes.get(attributeName);
Object rshAttributeValue = rhsSection.attributes.get(attributeName);
if (!attributeValue.equals(rshAttributeValue)) {
Object rhsAttributeValue = rhsSection.attributes.get(attributeName);
if (!attributeValue.equals(rhsAttributeValue)) {
return false; return false;
} }
} }
@@ -599,7 +611,7 @@ public class Manifest extends Task {
if (section.getName() == null) { if (section.getName() == null) {
throw new BuildException("Sections must have a name"); throw new BuildException("Sections must have a name");
} }
sections.put(section.getName().toLowerCase(), section);
sections.put(section.getName(), section);
} }


public void addConfiguredAttribute(Attribute attribute) throws ManifestException { public void addConfiguredAttribute(Attribute attribute) throws ManifestException {
@@ -624,7 +636,7 @@ public class Manifest extends Task {
Section ourSection = (Section)sections.get(sectionName); Section ourSection = (Section)sections.get(sectionName);
Section otherSection = (Section)other.sections.get(sectionName); Section otherSection = (Section)other.sections.get(sectionName);
if (ourSection == null) { if (ourSection == null) {
sections.put(sectionName.toLowerCase(), otherSection);
sections.put(sectionName, otherSection);
} }
else { else {
ourSection.merge(otherSection); ourSection.merge(otherSection);
@@ -725,7 +737,7 @@ public class Manifest extends Task {


for (Enumeration e = sections.elements(); e.hasMoreElements();) { for (Enumeration e = sections.elements(); e.hasMoreElements();) {
Section section = (Section)e.nextElement(); Section section = (Section)e.nextElement();
Section rhsSection = (Section)rhsManifest.sections.get(section.getName().toLowerCase());
Section rhsSection = (Section)rhsManifest.sections.get(section.getName());
if (!section.equals(rhsSection)) { if (!section.equals(rhsSection)) {
return false; return false;
} }
@@ -752,6 +764,44 @@ public class Manifest extends Task {
mode = m; mode = m;
} }


/**
* Get the version of the manifest
*
* @return the manifest's version string
*/
public String getManifestVersion() {
return manifestVersion;
}
/**
* Get the main section of the manifest
*
* @return the main section of the manifest
*/
public Section getMainSection() {
return mainSection;
}

/**
* Get a particular section from the manifest
*
* @param name the name of the section desired.
* @return the specified section or null if that section
* does not exist in the manifest
*/
public Section getSection(String name) {
return (Section)sections.get(name);
}
/**
* Get the section names in this manifest.
*
* @return an Enumeration of section names
*/
public Enumeration getSectionNames() {
return sections.keys();
}
/** /**
* Create or update the Manifest when used as a task. * Create or update the Manifest when used as a task.
*/ */


+ 9
- 0
src/testcases/org/apache/tools/ant/BuildFileTest.java View File

@@ -243,6 +243,15 @@ public abstract class BuildFileTest extends TestCase {
} }
/**
* Get the project which has been configured for a test.
*
* @return the Project instance for this test.
*/
protected Project getProject() {
return project;
}
protected File getProjectDir() { protected File getProjectDir() {
return project.getBaseDir(); return project.getBaseDir();
} }


+ 56
- 9
src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java View File

@@ -58,7 +58,9 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.Vector;
import org.apache.tools.ant.BuildFileTest; import org.apache.tools.ant.BuildFileTest;
import org.apache.tools.ant.Project;


/** /**
* Testcase for the Manifest class used in the jar task. * Testcase for the Manifest class used in the jar task.
@@ -67,6 +69,15 @@ import org.apache.tools.ant.BuildFileTest;
*/ */
public class ManifestTest extends BuildFileTest { public class ManifestTest extends BuildFileTest {


public static final String EXPANDED_MANIFEST
= "src/etc/testcases/taskdefs/manifests/META-INF/MANIFEST.MF";

public static final String LONG_LINE
= "AReallyLongLineToTestLineBreakingInManifests-ACapabilityWhich" +
"IsSureToLeadToHundredsOfQuestionsAboutWhyAntMungesManifests" +
"OfCourseTheAnswerIsThatIsWhatTheSpecRequiresAndIfAnythingHas" +
"AProblemWithThatItIsNotABugInAnt";
public ManifestTest(String name) { public ManifestTest(String name) {
super(name); super(name);
} }
@@ -78,19 +89,25 @@ public class ManifestTest extends BuildFileTest {
public void tearDown() { public void tearDown() {
executeTarget("clean"); executeTarget("clean");
} }
/** /**
* Empty manifest - is OK * Empty manifest - is OK
*/ */
public void test1() {
public void test1() throws ManifestException, IOException {
executeTarget("test1"); executeTarget("test1");
Manifest manifest = getManifest(EXPANDED_MANIFEST);
String version = manifest.getManifestVersion();
assertEquals("Manifest was not created with correct version - ", "1.0", version);
} }
/** /**
* Simple Manifest with version 2.0 * Simple Manifest with version 2.0
*/ */
public void test2() {
public void test2() throws ManifestException, IOException {
executeTarget("test2"); executeTarget("test2");
Manifest manifest = getManifest(EXPANDED_MANIFEST);
String version = manifest.getManifestVersion();
assertEquals("Manifest was not created with correct version - ", "2.0", version);
} }
/** /**
@@ -143,8 +160,16 @@ public class ManifestTest extends BuildFileTest {
/** /**
* Inline manifest - OK * Inline manifest - OK
*/ */
public void test8() {
public void test8() throws IOException, ManifestException {
executeTarget("test8"); executeTarget("test8");
Manifest manifest = getManifest(EXPANDED_MANIFEST);
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);
} }
/** /**
@@ -190,8 +215,30 @@ public class ManifestTest extends BuildFileTest {
/** /**
* Inline manifest - OK since classpath entries can be duplicated. * Inline manifest - OK since classpath entries can be duplicated.
*/ */
public void test14() {
public void test14() throws IOException, ManifestException {
executeTarget("test14"); executeTarget("test14");
Manifest manifest = getManifest(EXPANDED_MANIFEST);
Manifest.Section mainSection = manifest.getMainSection();
String classpath = mainSection.getAttributeValue("class-path");
assertEquals("Class-Path attribute was not set correctly - ",
"Test1 Test2 Test3 Test4", classpath);
Object classPathAttr = mainSection.getAttribute("class-PATH");
assertTrue("Class path attribute should be a Vector", classPathAttr instanceof Vector);
}
/**
* Tets long line wrapping
*/
public void testLongLine() throws IOException, ManifestException {
Project project = getProject();
project.setUserProperty("test.longline", LONG_LINE);
executeTarget("testLongLine");

Manifest manifest = getManifest(EXPANDED_MANIFEST);
Manifest.Section mainSection = manifest.getMainSection();
String classpath = mainSection.getAttributeValue("class-path");
assertEquals("Class-Path attribute was not set correctly - ",
LONG_LINE, classpath);
} }
/** /**
@@ -206,7 +253,7 @@ public class ManifestTest extends BuildFileTest {
*/ */
public void testReplace() throws IOException, ManifestException { public void testReplace() throws IOException, ManifestException {
executeTarget("testReplace"); executeTarget("testReplace");
Manifest mf = getManifest();
Manifest mf = getManifest("src/etc/testcases/taskdefs/mftest.mf");
assertNotNull(mf); assertNotNull(mf);
assertEquals(Manifest.getDefaultManifest(), mf); assertEquals(Manifest.getDefaultManifest(), mf);
} }
@@ -216,7 +263,7 @@ public class ManifestTest extends BuildFileTest {
*/ */
public void testUpdate() throws IOException, ManifestException { public void testUpdate() throws IOException, ManifestException {
executeTarget("testUpdate"); executeTarget("testUpdate");
Manifest mf = getManifest();
Manifest mf = getManifest("src/etc/testcases/taskdefs/mftest.mf");
assertNotNull(mf); assertNotNull(mf);
assertTrue(!Manifest.getDefaultManifest().equals(mf)); assertTrue(!Manifest.getDefaultManifest().equals(mf));
String mfAsString = mf.toString(); String mfAsString = mf.toString();
@@ -228,8 +275,8 @@ public class ManifestTest extends BuildFileTest {
/** /**
* Reads mftest.mf. * Reads mftest.mf.
*/ */
private Manifest getManifest() throws IOException, ManifestException {
FileReader r = new FileReader("src/etc/testcases/taskdefs/mftest.mf");
private Manifest getManifest(String filename) throws IOException, ManifestException {
FileReader r = new FileReader(filename);
try { try {
return new Manifest(r); return new Manifest(r);
} finally { } finally {


Loading…
Cancel
Save