You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by di...@apache.org on 2021/07/05 07:38:32 UTC
[sling-org-apache-sling-sitemap] branch master updated:
SLING-10581: properly implement Closeable#close() contract for SitemapImpl
This is an automated email from the ASF dual-hosted git repository.
diru pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-sitemap.git
The following commit(s) were added to refs/heads/master by this push:
new 7713444 SLING-10581: properly implement Closeable#close() contract for SitemapImpl
7713444 is described below
commit 7713444018106e96cc81f1454ffa6efb9680d397
Author: Dirk Rudolph <dr...@adobe.com>
AuthorDate: Mon Jul 5 09:38:16 2021 +0200
SLING-10581: properly implement Closeable#close() contract for SitemapImpl
---
.../sling/sitemap/impl/builder/SitemapImpl.java | 4 +++-
.../sitemap/impl/builder/SitemapImplTest.java | 25 +++++++++++++++++-----
.../sling/sitemap/impl/builder/UrlImplTest.java | 4 +---
3 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/src/main/java/org/apache/sling/sitemap/impl/builder/SitemapImpl.java b/src/main/java/org/apache/sling/sitemap/impl/builder/SitemapImpl.java
index d034ee0..ce590a3 100644
--- a/src/main/java/org/apache/sling/sitemap/impl/builder/SitemapImpl.java
+++ b/src/main/java/org/apache/sling/sitemap/impl/builder/SitemapImpl.java
@@ -75,8 +75,10 @@ public class SitemapImpl implements Sitemap, Closeable {
@Override
public void close() throws IOException {
+ if (closed) {
+ return;
+ }
try {
- ensureNotClosed();
closed = true;
writePendingUrl();
out.write("</urlset>");
diff --git a/src/test/java/org/apache/sling/sitemap/impl/builder/SitemapImplTest.java b/src/test/java/org/apache/sling/sitemap/impl/builder/SitemapImplTest.java
index f0a8057..c7e320b 100644
--- a/src/test/java/org/apache/sling/sitemap/impl/builder/SitemapImplTest.java
+++ b/src/test/java/org/apache/sling/sitemap/impl/builder/SitemapImplTest.java
@@ -18,21 +18,21 @@
*/
package org.apache.sling.sitemap.impl.builder;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
import org.apache.sling.sitemap.SitemapException;
import org.apache.sling.sitemap.impl.builder.extensions.ExtensionProviderManager;
import org.apache.sling.testing.mock.sling.junit5.SlingContext;
import org.apache.sling.testing.mock.sling.junit5.SlingContextExtension;
-import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.instanceOf;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -142,4 +142,19 @@ class SitemapImplTest extends AbstractBuilderTest {
SitemapException ex = assertThrows(SitemapException.class, () -> sitemap.addUrl("http://localhost:4503"));
assertThat(ex.getCause(), instanceOf(IOException.class));
}
+
+
+ @Test
+ void testWritingToClosedSitemapThrows() throws IOException {
+ // given
+ StringWriter writer = new StringWriter();
+ SitemapImpl subject = new SitemapImpl(writer, extensionManager);
+
+ // when
+ subject.close();
+
+ assertThrows(IllegalStateException.class, () -> subject.addUrl("http://localhost:4502"));
+ assertThrows(IllegalStateException.class, () -> subject.flush());
+ assertDoesNotThrow(() -> subject.close());
+ }
}
diff --git a/src/test/java/org/apache/sling/sitemap/impl/builder/UrlImplTest.java b/src/test/java/org/apache/sling/sitemap/impl/builder/UrlImplTest.java
index d2496b5..43a7137 100644
--- a/src/test/java/org/apache/sling/sitemap/impl/builder/UrlImplTest.java
+++ b/src/test/java/org/apache/sling/sitemap/impl/builder/UrlImplTest.java
@@ -148,7 +148,7 @@ class UrlImplTest extends AbstractBuilderTest {
}
@Test
- void testWritingUrlOrExtensionTwiceFails() throws SitemapException, IOException {
+ void testWritingToWrittenUrlThrows() throws SitemapException, IOException {
// given
StringWriter writer = new StringWriter();
SitemapImpl subject = new SitemapImpl(writer, extensionManager);
@@ -164,8 +164,6 @@ class UrlImplTest extends AbstractBuilderTest {
assertThrows(IllegalStateException.class, () -> url.setChangeFrequency(Url.ChangeFrequency.ALWAYS));
assertThrows(IllegalStateException.class, () -> url.setLastModified(now));
assertThrows(IllegalStateException.class, () -> url.addExtension(TestExtension.class));
- assertThrows(IllegalStateException.class, () -> subject.addUrl("http://foo.bar"));
- assertThrows(IllegalStateException.class, subject::close);
}
interface TestExtension2 extends Extension {