From f4ae74158891ed593e8dc19005a2394c574088ef Mon Sep 17 00:00:00 2001 From: Arne Deutsch Date: Thu, 4 Apr 2019 16:07:14 +0200 Subject: [PATCH] [eclipse/xtext-extras#406] Fix missing newline, add test. Signed-off-by: Arne Deutsch --- .../xtext/util/MergeableManifest2Test.java | 56 +++++++++++++++++++ .../xtext/util/MergeableManifest2.java | 22 ++++---- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/util/MergeableManifest2Test.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/util/MergeableManifest2Test.java index 50c5fa9e3..27f8d9f83 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/util/MergeableManifest2Test.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/util/MergeableManifest2Test.java @@ -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: diff --git a/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest2.java b/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest2.java index 5ae345b68..220a9683e 100644 --- a/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest2.java +++ b/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest2.java @@ -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;