[] Fix missing newline, add test.

Signed-off-by: Arne Deutsch <Arne.Deutsch@itemis.de>
This commit is contained in:
Arne Deutsch 2019-04-04 16:07:14 +02:00
parent 3ce424ea8d
commit f4ae741588
2 changed files with 67 additions and 11 deletions
org.eclipse.xtext.tests/src/org/eclipse/xtext/util
org.eclipse.xtext.util/src/org/eclipse/xtext/util

View file

@ -1409,6 +1409,62 @@ public class MergeableManifest2Test {
assertEquals(expected, write(manifest));
}
@Test
public void readWrite_addRequiredBundle_newVersion() throws Exception {
// @formatter:off
String content =
"Manifest-Version: 1.0" + NL +
"Bundle-ManifestVersion: 2" + NL +
"Require-Bundle: org.eclipse.xtext," + NL +
" org.eclipse.xtext.xbase," + NL +
" org.eclipse.xtext.util," + NL +
" org.antlr.runtime;bundle-version=\"[3.2.0,3.2.1)\"," + NL +
" org.eclipse.xtext.common.types," + NL +
"Automatic-Module-Name: org.eclipse.xtext.example.homeautomation" + NL;
String expected =
"Manifest-Version: 1.0" + NL +
"Bundle-ManifestVersion: 2" + NL +
"Require-Bundle: org.eclipse.xtext," + NL +
" org.eclipse.xtext.xbase," + NL +
" org.eclipse.xtext.util;bundle-version=\"1.0\"," + NL +
" org.antlr.runtime;bundle-version=\"[3.2.0,3.2.1)\"," + NL +
" org.eclipse.xtext.common.types" + NL +
"Automatic-Module-Name: org.eclipse.xtext.example.homeautomation" + NL;
// @formatter:on
MergeableManifest2 manifest = newManifest(content);
manifest.addRequiredBundles("org.eclipse.xtext.util;bundle-version=\"1.0\"");
assertEquals(expected, write(manifest));
}
@Test
public void readWrite_addRequiredBundle_newVersion_firstEntry() throws Exception {
// @formatter:off
String content =
"Manifest-Version: 1.0" + NL +
"Bundle-ManifestVersion: 2" + NL +
"Require-Bundle: org.eclipse.xtext," + NL +
" org.eclipse.xtext.xbase," + NL +
" org.eclipse.xtext.util," + NL +
" org.antlr.runtime;bundle-version=\"[3.2.0,3.2.1)\"," + NL +
" org.eclipse.xtext.common.types," + NL +
"Automatic-Module-Name: org.eclipse.xtext.example.homeautomation" + NL;
String expected =
"Manifest-Version: 1.0" + NL +
"Bundle-ManifestVersion: 2" + NL +
"Require-Bundle: org.eclipse.xtext;bundle-version=\"1.0\"," + NL +
" org.eclipse.xtext.xbase," + NL +
" org.eclipse.xtext.util," + NL +
" org.antlr.runtime;bundle-version=\"[3.2.0,3.2.1)\"," + NL +
" org.eclipse.xtext.common.types" + NL +
"Automatic-Module-Name: org.eclipse.xtext.example.homeautomation" + NL;
// @formatter:on
MergeableManifest2 manifest = newManifest(content);
manifest.addRequiredBundles("org.eclipse.xtext;bundle-version=\"1.0\"");
assertEquals(expected, write(manifest));
}
/**
* In this final test we read all "META-INF/MANIFEST.MF" files from
* classpath. We the:

View file

@ -693,21 +693,17 @@ public class MergeableManifest2 implements Cloneable {
for (int i = 0; i < list.size(); i++) {
Bundle oldBundle = list.get(i);
if (oldBundle.hasSameName(newBundle)) {
String oldBundleName = oldBundle.getName();
String oldBundleNameIncludingWhitespacePrefix = oldBundle.getNameIncludingWhitespacePrefix();
String oldBundleVersion = oldBundle.getVersion();
String oldBundleSuffix = oldBundle.getSuffix();
String bundleVersion = oldBundleVersion == null ? newBundle.getVersion() : oldBundleVersion;
merged = true;
if (oldBundleSuffix == null) {
if (bundleVersion != null) {
list.set(i, Bundle.fromNameVersion(oldBundleName, bundleVersion));
}
} else {
if (bundleVersion != null) {
if (oldBundleVersion == null) {
list.set(i,
Bundle.fromNameVersionSuffix(oldBundleName, bundleVersion, oldBundleSuffix));
}
if (bundleVersion != null) {
if (oldBundleSuffix == null) {
list.set(i, Bundle.fromNameVersion(oldBundleNameIncludingWhitespacePrefix, bundleVersion));
} else if (oldBundleVersion == null) {
list.set(i, Bundle.fromNameVersionSuffix(oldBundleNameIncludingWhitespacePrefix,
bundleVersion, oldBundleSuffix));
}
}
}
@ -775,6 +771,10 @@ public class MergeableManifest2 implements Cloneable {
return split.get(0).trim();
}
public String getNameIncludingWhitespacePrefix() {
return split.get(0);
}
public String getSuffix() {
return split.size() > 1 ? split.subList(1, split.size()).stream().reduce((a, b) -> a + ";" + b).get()
: null;