Is it "Lucky Luke" that has non ASCII chars?

You can use \uNNNN to specify non ascii chars. We do that in some unit tests.
I remember we have some for german, and also for the Thai elephant
which is named Chang, which is a good beer btw ;)

On Fri, Apr 29, 2016 at 2:49 PM, Siano, Stephan <[email protected]> wrote:
> Hi,
>
> I have found an issue with the camel-csv component. The fix itself is pretty 
> trivial (a one-liner to use the IOHelper.getCharsetName(exchange)) for an 
> OutputStreamWriter in the marhaller (the InputStreamWriter in the 
> unmarshaller already does this).
>
> However I have some difficulties with the unit test.
>
> 1.       The issue will only happen if there are non-ASCII characters in the 
> code. As far as I understand it is not exactly desired to have those in the 
> coding (on the other hand I just copied the appropriate test for the 
> unmarshaller and that one does also have german umlaut characters in the code.
>
> 2.       The test only fails (with the original code) if the default encoding 
> on the JVM that executes this is not UTF-8. There is some very hacky way to 
> change the JVM default encoding for a test but I would not want to contribute 
> that.
>
> I put the test into this mail as an example (because it is short enough to 
> demonstrate the issues). How could I test this properly? Wouldn't it be a 
> good idea in general to run tests with an ASCII default charset to find 
> issues with default encodings better (set file.encoding to "ASCII" in the 
> surefire plugin configuration)?
>
> Best regards
> Stephan
>
> public class CsvMarshalCharsetTest extends CamelTestSupport {
>
>     @BeforeClass
>     public static void hackEncoding() throws NoSuchFieldException, 
> SecurityException, IllegalArgumentException, IllegalAccessException {
>         System.setProperty("file.encoding", "ASCII");
>         Field charset = Charset.class.getDeclaredField("defaultCharset");
>         charset.setAccessible(true);
>         charset.set(null, null);
>     }
>
>     @Test
>     public void testMarshal() throws Exception {
>         MockEndpoint endpoint = getMockEndpoint("mock:daltons");
>         endpoint.expectedMessageCount(1);
>
>         List<List<String>> data = new ArrayList<List<String>>();
>         data.add(0, new ArrayList<String>());
>         data.get(0).add(0, "Lücky Luke");
>         template.sendBody("direct:start", data);
>
>         endpoint.assertIsSatisfied();
>
>         Exchange exchange = endpoint.getExchanges().get(0);
>         String body = exchange.getIn().getBody(String.class);
>         assertThat(body, startsWith("Lücky Luke"));
>     }
>
>     protected RouteBuilder createRouteBuilder() {
>         return new RouteBuilder() {
>             public void configure() {
>                 from("direct:start").marshal().csv().to("mock:daltons");
>             }
>         };
>     }
> }



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to