/*
* Milyn - Copyright (C) 2006 - 2010
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License (version 2.1) as published
* by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.
*
* See the GNU Lesser General Public License for more details:
* http://www.gnu.org/licenses/lgpl.txt
*/
package org.milyn.container.plugin;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.milyn.Smooks;
import org.milyn.javabean.context.preinstalled.Time;
import org.milyn.javabean.context.preinstalled.UniqueID;
import org.xml.sax.SAXException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.CoreMatchers.any;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.collection.IsMapContaining.hasEntry;
import static org.hamcrest.collection.IsMapContaining.hasKey;
/**
* Unit test for PayloadProcessor.
*
* @author <a href="mailto:daniel.bevenius@gmail.com">Daniel Bevenius</a>
*/
public class PayloadProcessorTest {
private Smooks smooks;
@Before
public void setup() throws IOException, SAXException {
smooks = new Smooks(getClass().getResourceAsStream("smooks-config.xml"));
}
@Test(expected = IllegalArgumentException.class)
public void process() throws IOException, SAXException {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
processor.process(null, smooks.createExecutionContext());
}
@Test
public void process_SourceResult() throws IOException, SAXException {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
StreamSource source = new StreamSource(new StringReader("<text/>"));
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
SourceResult sourceResult = new SourceResult(source, result);
Object object = processor.process(sourceResult, smooks.createExecutionContext());
TestCase.assertEquals(result, object);
TestCase.assertEquals("<text />", writer.toString());
}
@Test
public void process_String2String() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
Object object = processor.process("<testing/>", smooks.createExecutionContext());
TestCase.assertEquals("<testing />", object);
}
@Test
public void process_bytes2String() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
Object payload = "<testing/>".getBytes();
Object object = processor.process(payload, smooks.createExecutionContext());
TestCase.assertEquals("<testing />", object);
}
@Test
public void process_bytes2bytes() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.BYTES);
Object payload = "<testing/>".getBytes();
Object object = processor.process(payload, smooks.createExecutionContext());
TestCase.assertTrue(object instanceof byte[]);
TestCase.assertTrue(Arrays.equals("<testing />".getBytes(), ((byte[]) object)));
}
@SuppressWarnings("unchecked")
@Test
public void process_String2Java_01() {
final PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.JAVA);
Map<String, Object> map = (Map<String, Object>) processor.process("<testing/>", smooks.createExecutionContext());
assertThat(map, hasEntry("theBean", (Object) "Hi there!"));
assertThat(map, hasKey("PTIME"));
assertThat(map, hasKey("PUUID"));
assertThat(map.get("PTIME"), instanceOf(Time.class));
assertThat(map.get("PUUID"), instanceOf(UniqueID.class));
}
@Test
public void process_String2Java_02() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.JAVA);
processor.setJavaResultBeanId("theBean");
Object object = processor.process("<testing/>", smooks.createExecutionContext());
TestCase.assertEquals("Hi there!", object.toString());
}
@Test
public void process_Java2String() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
Object object = processor.process(123, smooks.createExecutionContext());
TestCase.assertEquals("<int>123</int>", object.toString());
}
@Test
public void process_Reader2String() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
Object object = processor.process(new StringReader("<test/>"), smooks.createExecutionContext());
TestCase.assertEquals("<test />", object.toString());
}
@Test
public void process_Stream2String() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
Object object = processor.process(new ByteArrayInputStream("<test/>".getBytes()), smooks.createExecutionContext());
TestCase.assertEquals("<test />", object.toString());
}
@Test
public void process_Source2String() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.STRING);
Object object = processor.process(new StreamSource(new ByteArrayInputStream("<test/>".getBytes())), smooks.createExecutionContext());
TestCase.assertEquals("<test />", object.toString());
}
@Test
public void process_NoResult() {
PayloadProcessor processor = new PayloadProcessor(smooks, ResultType.NORESULT);
Object object = processor.process(123, smooks.createExecutionContext());
TestCase.assertEquals(null, object);
}
}