/** * Test stream type detection based on stream content. * * <p>Tests three things with the input text: * * <p>1) conversion if input was declared as text * * <p>2) conversion if input was declared as potentially text (AUTO_...) and is in fact text * * <p>3) conversion if modified input (now with binary characters) was declared as potentially * text but now contains binary characters * * <p> * * @param streamTypeText is the enum meaning that the input is definitely text (no binary check at * all) * @param streamTypeWithBinaryCheck is the enum meaning that the input may be text (binary check * is done) * @param input is a text input without binary characters * @param expectedConversion is the expected converted input without binary characters * @throws Exception */ private void testCheckin( EolStreamType streamTypeText, EolStreamType streamTypeWithBinaryCheck, String input, String expectedConversion) throws Exception { byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8); byte[] expectedConversionBytes = expectedConversion.getBytes(StandardCharsets.UTF_8); // test using input text and assuming it was declared TEXT try (InputStream in = EolStreamTypeUtil.wrapInputStream(new ByteArrayInputStream(inputBytes), streamTypeText)) { byte[] b = new byte[1024]; int len = IO.readFully(in, b, 0); assertArrayEquals(expectedConversionBytes, Arrays.copyOf(b, len)); } // test using input text and assuming it was declared AUTO, using binary // detection try (InputStream in = EolStreamTypeUtil.wrapInputStream( new ByteArrayInputStream(inputBytes), streamTypeWithBinaryCheck)) { byte[] b = new byte[1024]; int len = IO.readFully(in, b, 0); assertArrayEquals(expectedConversionBytes, Arrays.copyOf(b, len)); } // now pollute input text with some binary bytes inputBytes = extendWithBinaryData(inputBytes); expectedConversionBytes = extendWithBinaryData(expectedConversionBytes); // again, test using input text and assuming it was declared TEXT try (InputStream in = EolStreamTypeUtil.wrapInputStream(new ByteArrayInputStream(inputBytes), streamTypeText)) { byte[] b = new byte[1024]; int len = IO.readFully(in, b, 0); assertArrayEquals(expectedConversionBytes, Arrays.copyOf(b, len)); } // again, test using input text and assuming it was declared AUTO, using // binary // detection try (InputStream in = EolStreamTypeUtil.wrapInputStream( new ByteArrayInputStream(inputBytes), streamTypeWithBinaryCheck)) { byte[] b = new byte[1024]; int len = IO.readFully(in, b, 0); // expect no conversion assertArrayEquals(inputBytes, Arrays.copyOf(b, len)); } }
/** * Test stream type detection based on stream content. * * <p>Tests three things with the output text: * * <p>1) conversion if output was declared as text * * <p>2) conversion if output was declared as potentially text (AUTO_...) and is in fact text * * <p>3) conversion if modified output (now with binary characters) was declared as potentially * text but now contains binary characters * * <p> * * @param streamTypeText is the enum meaning that the output is definitely text (no binary check * at all) * @param streamTypeWithBinaryCheck is the enum meaning that the output may be text (binary check * is done) * @param output is a text output without binary characters * @param expectedConversion is the expected converted output without binary characters * @throws Exception */ private void testCheckout( EolStreamType streamTypeText, EolStreamType streamTypeWithBinaryCheck, String output, String expectedConversion) throws Exception { ByteArrayOutputStream b; byte[] outputBytes = output.getBytes(StandardCharsets.UTF_8); byte[] expectedConversionBytes = expectedConversion.getBytes(StandardCharsets.UTF_8); // test using output text and assuming it was declared TEXT b = new ByteArrayOutputStream(); try (OutputStream out = EolStreamTypeUtil.wrapOutputStream(b, streamTypeText)) { out.write(outputBytes); } assertArrayEquals(expectedConversionBytes, b.toByteArray()); // test using ouput text and assuming it was declared AUTO, using binary // detection b = new ByteArrayOutputStream(); try (OutputStream out = EolStreamTypeUtil.wrapOutputStream(b, streamTypeWithBinaryCheck)) { out.write(outputBytes); } assertArrayEquals(expectedConversionBytes, b.toByteArray()); // now pollute output text with some binary bytes outputBytes = extendWithBinaryData(outputBytes); expectedConversionBytes = extendWithBinaryData(expectedConversionBytes); // again, test using output text and assuming it was declared TEXT b = new ByteArrayOutputStream(); try (OutputStream out = EolStreamTypeUtil.wrapOutputStream(b, streamTypeText)) { out.write(outputBytes); } assertArrayEquals(expectedConversionBytes, b.toByteArray()); // again, test using ouput text and assuming it was declared AUTO, using // binary // detection b = new ByteArrayOutputStream(); try (OutputStream out = EolStreamTypeUtil.wrapOutputStream(b, streamTypeWithBinaryCheck)) { out.write(outputBytes); } // expect no conversion assertArrayEquals(outputBytes, b.toByteArray()); }