Add tests for CodedOutputStream.ByteOutputEncoder

There was no unit test coverage for ByteOutputEncoder before.

PiperOrigin-RevId: 681757549
diff --git a/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java b/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java
index 98f189f..53aa77d 100644
--- a/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java
+++ b/java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java
@@ -185,6 +185,29 @@
     }
   }
 
+  private static final class ByteOutputWrappingArrayCoder implements Coder {
+    private final CodedOutputStream stream;
+    private final byte[] bytes;
+
+    ByteOutputWrappingArrayCoder(int size) {
+      bytes = new byte[size];
+      // Any ByteOutput subclass would do. All CodedInputStreams implement ByteOutput, so it
+      // seemed most convenient to this this with a CodedInputStream.newInstance(byte[]).
+      ByteOutput byteOutput = CodedOutputStream.newInstance(bytes);
+      stream = CodedOutputStream.newInstance(byteOutput, size);
+    }
+
+    @Override
+    public CodedOutputStream stream() {
+      return stream;
+    }
+
+    @Override
+    public byte[] toByteArray() {
+      return Arrays.copyOf(bytes, stream.getTotalBytesWritten());
+    }
+  }
+
   private enum OutputType {
     ARRAY() {
       @Override
@@ -243,17 +266,23 @@
         // Block Size 0 gets rounded up to minimum block size, see AbstractBufferedEncoder.
         return new OutputStreamCoder(size, /* blockSize= */ 0);
       }
-    }
-    ;
+    },
+    BYTE_OUTPUT_WRAPPING_ARRAY() {
+      @Override
+      Coder newCoder(int size) {
+        return new ByteOutputWrappingArrayCoder(size);
+      }
+    };
 
     abstract Coder newCoder(int size);
 
     /** Whether we can call CodedOutputStream.spaceLeft(). */
     boolean supportsSpaceLeft() {
-      // STREAM doesn't know how much space is left.
+      // Buffered encoders don't know how much space is left.
       switch (this) {
         case STREAM:
         case STREAM_MINIMUM_BUFFER_SIZE:
+        case BYTE_OUTPUT_WRAPPING_ARRAY:
           return false;
         default:
           return true;
@@ -775,6 +804,8 @@
   @Test
   public void testSerializeInvalidUtf8FollowedByOutOfSpace() throws Exception {
     final int notEnoughBytes = 4;
+    // This test fails for BYTE_OUTPUT_WRAPPING_ARRAY
+    assume().that(outputType).isNotEqualTo(OutputType.BYTE_OUTPUT_WRAPPING_ARRAY);
 
     Coder coder = outputType.newCoder(notEnoughBytes);