|
13 | 13 | import java.time.ZoneOffset; |
14 | 14 | import java.util.Calendar; |
15 | 15 | import java.util.TimeZone; |
| 16 | +import java.util.concurrent.CompletableFuture; |
| 17 | +import java.util.concurrent.Executors; |
16 | 18 |
|
17 | 19 | import org.junit.Rule; |
18 | 20 | import org.junit.Test; |
@@ -746,4 +748,45 @@ public void testHeaderDataField() throws Exception { |
746 | 748 | DataDictionaryTest.getDictionary()); |
747 | 749 | assertEquals("ABCD", m.getHeader().getString(SecureData.FIELD)); |
748 | 750 | } |
| 751 | + |
| 752 | + @Test |
| 753 | + public void shouldTrimStringBuilder() { |
| 754 | + // this test must run in a dedicated thread to avoid interference with other test cases (thread local) |
| 755 | + CompletableFuture<?> future = CompletableFuture.runAsync(() -> { |
| 756 | + Message message = new Message(); |
| 757 | + |
| 758 | + message.setString(131, "123456"); |
| 759 | + String str = message.toString(); |
| 760 | + |
| 761 | + assertEquals(23, str.length()); |
| 762 | + assertEquals(0, message.getStringBuilder().length()); |
| 763 | + assertEquals(1024, message.getStringBuilder().capacity()); |
| 764 | + |
| 765 | + message.setString(131, createLongString()); |
| 766 | + str = message.toString(); |
| 767 | + |
| 768 | + assertEquals(10020, str.length()); |
| 769 | + assertEquals(0, message.getStringBuilder().length()); |
| 770 | + assertEquals(4096, message.getStringBuilder().capacity()); |
| 771 | + |
| 772 | + message.setString(131, "123456"); |
| 773 | + str = message.toString(); |
| 774 | + |
| 775 | + assertEquals(23, str.length()); |
| 776 | + assertEquals(0, message.getStringBuilder().length()); |
| 777 | + assertEquals(4096, message.getStringBuilder().capacity()); |
| 778 | + }, Executors.newSingleThreadExecutor()); |
| 779 | + |
| 780 | + future.join(); |
| 781 | + } |
| 782 | + |
| 783 | + private static String createLongString() { |
| 784 | + StringBuilder builder = new StringBuilder(10_000); |
| 785 | + |
| 786 | + for (int i = 0; i < 10_000; i++) { |
| 787 | + builder.append('a'); |
| 788 | + } |
| 789 | + |
| 790 | + return builder.toString(); |
| 791 | + } |
749 | 792 | } |
0 commit comments