Skip to content

Commit 0f76bd0

Browse files
committed
Covered with more use cases and verifies encoding of the returned Ruby strings
1 parent 5af3a62 commit 0f76bd0

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

logstash-core/src/test/java/org/logstash/common/BufferedTokenizerExtTest.java

+40
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,44 @@ public void shouldNotChangeEncodingOfTokensAfterPartitioning() {
104104
RubyEncoding encoding = (RubyEncoding) firstToken.callMethod(context, "encoding");
105105
assertEquals("ISO-8859-1", encoding.toString());
106106
}
107+
108+
@Test
109+
public void shouldNotChangeEncodingOfTokensAfterPartitioningInCaseMultipleExtractionInInvoked() {
110+
RubyString rubyString = RubyString.newString(RUBY, new byte[]{(byte) 0xA3}); // £ character
111+
IRubyObject rubyInput = rubyString.force_encoding(context, RUBY.newString("ISO8859-1"));
112+
sut.extract(context, rubyInput);
113+
IRubyObject capitalAInLatin1 = RubyString.newString(RUBY, new byte[]{(byte) 0x41})
114+
.force_encoding(context, RUBY.newString("ISO8859-1"));
115+
RubyArray<RubyString> tokens = (RubyArray<RubyString>)sut.extract(context, capitalAInLatin1);
116+
assertTrue(tokens.isEmpty());
117+
118+
tokens = (RubyArray<RubyString>)sut.extract(context, RubyString.newString(RUBY, new byte[]{(byte) 0x0A}));
119+
120+
// read the first token, the £ string
121+
IRubyObject firstToken = tokens.shift(context);
122+
assertEquals("£A", firstToken.toString());
123+
124+
// verify encoding "ISO8859-1" is preserved in the Java to Ruby String conversion
125+
RubyEncoding encoding = (RubyEncoding) firstToken.callMethod(context, "encoding");
126+
assertEquals("ISO-8859-1", encoding.toString());
127+
}
128+
129+
@Test
130+
public void shouldNotChangeEncodingOfTokensAfterPartitioningWhenRetrieveLastFlushedToken() {
131+
RubyString rubyString = RubyString.newString(RUBY, new byte[]{(byte) 0xA3, 0x0A, 0x41}); // £ character, newline, A
132+
IRubyObject rubyInput = rubyString.force_encoding(context, RUBY.newString("ISO8859-1"));
133+
RubyArray<RubyString> tokens = (RubyArray<RubyString>)sut.extract(context, rubyInput);
134+
135+
// read the first token, the £ string
136+
IRubyObject firstToken = tokens.shift(context);
137+
assertEquals("£", firstToken.toString());
138+
139+
// flush and check that the remaining A is still encoded in ISO8859-1
140+
IRubyObject lastToken = sut.flush(context);
141+
assertEquals("A", lastToken.toString());
142+
143+
// verify encoding "ISO8859-1" is preserved in the Java to Ruby String conversion
144+
RubyEncoding encoding = (RubyEncoding) lastToken.callMethod(context, "encoding");
145+
assertEquals("ISO-8859-1", encoding.toString());
146+
}
107147
}

0 commit comments

Comments
 (0)