You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/08/05 15:42:57 UTC

[commons-io] branch master updated (3cb5fd7 -> a4373a8)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git.


    from 3cb5fd7  Add tests for PathUtils.newOutputStream() and fix PathUtils.newOutputStream().
     new 6659feb  Fomrat nit.
     new a4373a8  Add UncheckedAppendable.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/changes/changes.xml                            |   3 +
 .../commons/io/output/UncheckedAppendable.java     |  60 +++++++++++++
 .../commons/io/output/UncheckedAppendableImpl.java |  76 ++++++++++++++++
 .../commons/io/output/StringBuilderWriterTest.java |   8 +-
 .../commons/io/output/UncheckedAppendableTest.java | 100 +++++++++++++++++++++
 5 files changed, 243 insertions(+), 4 deletions(-)
 create mode 100644 src/main/java/org/apache/commons/io/output/UncheckedAppendable.java
 create mode 100644 src/main/java/org/apache/commons/io/output/UncheckedAppendableImpl.java
 create mode 100644 src/test/java/org/apache/commons/io/output/UncheckedAppendableTest.java

[commons-io] 01/02: Fomrat nit.

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git

commit 6659feb9ffbd20c1cb1a0f27b0dc6ad7ef195de4
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Aug 5 11:40:57 2021 -0400

    Fomrat nit.
---
 .../org/apache/commons/io/output/StringBuilderWriterTest.java     | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/test/java/org/apache/commons/io/output/StringBuilderWriterTest.java b/src/test/java/org/apache/commons/io/output/StringBuilderWriterTest.java
index 36c92d4..c892c4c 100644
--- a/src/test/java/org/apache/commons/io/output/StringBuilderWriterTest.java
+++ b/src/test/java/org/apache/commons/io/output/StringBuilderWriterTest.java
@@ -122,10 +122,10 @@ public class StringBuilderWriterTest {
     @Test
     public void testWriteCharArrayPortion() throws IOException {
         try (final Writer writer = new StringBuilderWriter()) {
-        writer.write(FOOBAR_CHARS, 3, 3);
-        assertEquals("Bar", writer.toString());
-        writer.write(FOOBAR_CHARS, 0, 3);
-        assertEquals("BarFoo", writer.toString());
+            writer.write(FOOBAR_CHARS, 3, 3);
+            assertEquals("Bar", writer.toString());
+            writer.write(FOOBAR_CHARS, 0, 3);
+            assertEquals("BarFoo", writer.toString());
         }
     }
 

[commons-io] 02/02: Add UncheckedAppendable.

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git

commit a4373a8f286efe498191df3661dbbb4b2afde4c7
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Aug 5 11:42:54 2021 -0400

    Add UncheckedAppendable.
---
 src/changes/changes.xml                            |   3 +
 .../commons/io/output/UncheckedAppendable.java     |  60 +++++++++++++
 .../commons/io/output/UncheckedAppendableImpl.java |  76 ++++++++++++++++
 .../commons/io/output/UncheckedAppendableTest.java | 100 +++++++++++++++++++++
 4 files changed, 239 insertions(+)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0e5c8ca..3aeb2be 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -120,6 +120,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="add" due-to="Gary Gregory">
         Add PathUtils.newOutputStream(Path, boolean).
       </action>
+      <action dev="ggregory" type="add" due-to="Gary Gregory">
+        Add UncheckedAppendable.
+      </action>
       <!-- UPDATE -->
       <action dev="ggregory" type="update" due-to="Dependabot">
         Bump Maven Javadoc plugin from 3.2.0 to 3.3.0.
diff --git a/src/main/java/org/apache/commons/io/output/UncheckedAppendable.java b/src/main/java/org/apache/commons/io/output/UncheckedAppendable.java
new file mode 100644
index 0000000..f91de8f
--- /dev/null
+++ b/src/main/java/org/apache/commons/io/output/UncheckedAppendable.java
@@ -0,0 +1,60 @@
+/*
+ * 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.commons.io.output;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+
+/**
+ * An {@link Appendable} that throws {@link UncheckedIOException} instead of {@link IOException}.
+ *
+ * @see Appendable
+ * @see IOException
+ * @see UncheckedIOException
+ * @since 2.12.0
+ */
+public interface UncheckedAppendable extends Appendable {
+
+    /**
+     * Creates a new instance on the given Appendable.
+     * 
+     * @param appendable The Appendable to uncheck.
+     * @return a new instance.
+     */
+    public static UncheckedAppendable on(final Appendable appendable) {
+        return new UncheckedAppendableImpl(appendable);
+    }
+
+    /**
+     * Rethrows {@link IOException} as {@link UncheckedIOException}.
+     */
+    @Override
+    UncheckedAppendable append(char c);
+
+    /**
+     * Rethrows {@link IOException} as {@link UncheckedIOException}.
+     */
+    @Override
+    UncheckedAppendable append(CharSequence csq);
+
+    /**
+     * Rethrows {@link IOException} as {@link UncheckedIOException}.
+     */
+    @Override
+    UncheckedAppendable append(CharSequence csq, int start, int end);
+}
diff --git a/src/main/java/org/apache/commons/io/output/UncheckedAppendableImpl.java b/src/main/java/org/apache/commons/io/output/UncheckedAppendableImpl.java
new file mode 100644
index 0000000..63fef97
--- /dev/null
+++ b/src/main/java/org/apache/commons/io/output/UncheckedAppendableImpl.java
@@ -0,0 +1,76 @@
+/*
+ * 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.commons.io.output;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Objects;
+
+/**
+ * An {@link Appendable} implementation that throws {@link UncheckedIOException} instead of {@link IOException}.
+ *
+ * @see Appendable
+ * @see IOException
+ * @see UncheckedIOException
+ * @since 2.12.0
+ */
+class UncheckedAppendableImpl implements UncheckedAppendable {
+
+    private final Appendable appendable;
+
+    UncheckedAppendableImpl(final Appendable appendable) {
+        super();
+        this.appendable = Objects.requireNonNull(appendable, "appendable");
+    }
+
+    @Override
+    public UncheckedAppendable append(final char c) {
+        try {
+            appendable.append(c);
+        } catch (final IOException e) {
+            throw new UncheckedIOException(String.valueOf(c), e);
+        }
+        return this;
+    }
+
+    @Override
+    public UncheckedAppendable append(final CharSequence csq) {
+        try {
+            appendable.append(csq);
+        } catch (final IOException e) {
+            throw new UncheckedIOException(Objects.toString(csq), e);
+        }
+        return this;
+    }
+
+    @Override
+    public UncheckedAppendable append(final CharSequence csq, final int start, final int end) {
+        try {
+            appendable.append(csq, start, end);
+        } catch (final IOException e) {
+            throw new UncheckedIOException(Objects.toString(csq), e);
+        }
+        return this;
+    }
+
+    @Override
+    public String toString() {
+        return appendable.toString();
+    }
+
+}
\ No newline at end of file
diff --git a/src/test/java/org/apache/commons/io/output/UncheckedAppendableTest.java b/src/test/java/org/apache/commons/io/output/UncheckedAppendableTest.java
new file mode 100644
index 0000000..9ffa080
--- /dev/null
+++ b/src/test/java/org/apache/commons/io/output/UncheckedAppendableTest.java
@@ -0,0 +1,100 @@
+/*
+ * 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.commons.io.output;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.UncheckedIOException;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * JUnit Test Case for {@link BrokenWriter}.
+ */
+public class UncheckedAppendableTest {
+
+    private IOException exception;
+
+    private UncheckedAppendable appendableBroken;
+    private UncheckedAppendable appendableString;
+
+    @SuppressWarnings("resource")
+    @BeforeEach
+    public void setUp() {
+        exception = new IOException("test exception");
+        appendableBroken = UncheckedAppendable.on(new BrokenWriter(exception));
+        appendableString = UncheckedAppendable.on(new StringWriter());
+    }
+
+    @Test
+    public void testAppendChar() {
+        appendableString.append('a').append('b');
+        assertEquals("ab", appendableString.toString());
+    }
+
+    @Test
+    public void testAppendCharSequence() {
+        appendableString.append("a").append("b");
+        assertEquals("ab", appendableString.toString());
+    }
+
+    @Test
+    public void testAppendCharSequenceIndexed() {
+        appendableString.append("a", 0, 1).append("b", 0, 1);
+        assertEquals("ab", appendableString.toString());
+    }
+
+    @Test
+    public void testAppendCharSequenceIndexedThrows() {
+        try {
+            appendableBroken.append("a", 0, 1);
+            fail("Expected exception not thrown.");
+        } catch (final UncheckedIOException e) {
+            assertEquals(exception, e.getCause());
+        }
+    }
+
+    @Test
+    public void testAppendCharSequenceThrows() {
+        try {
+            appendableBroken.append("a");
+            fail("Expected exception not thrown.");
+        } catch (final UncheckedIOException e) {
+            assertEquals(exception, e.getCause());
+        }
+    }
+
+    @Test
+    public void testAppendCharThrows() {
+        try {
+            appendableBroken.append('a');
+            fail("Expected exception not thrown.");
+        } catch (final UncheckedIOException e) {
+            assertEquals(exception, e.getCause());
+        }
+    }
+
+    @Test
+    public void testToString() {
+        assertEquals("ab", UncheckedAppendable.on(new StringWriter(2).append("ab")).toString());
+    }
+
+}