/*
 * Author: Pablo Lalloni <plalloni@gmail.com>
 * Created: 04/02/2010 19:50:00
 */
package jacksonbug;

import java.io.IOException;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.w3c.dom.DOMException;
import org.w3c.dom.Element;

/**
 * @author Pablo Lalloni <plalloni@gmail.com>
 * @since 04/02/2010 19:50:00
 */
public class DOMSerializerCustomizationTest {
    
    public static class ElementSerializer extends JsonSerializer<Element> {
        @Override
        public void serialize(Element value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
        JsonProcessingException {
            jgen.writeString("element");
        }
    }
    
    @JsonSerialize(using = ElementSerializer.class)
    public static class ElementMixin {}
    
    @Test
    public void testCustomization() throws DOMException, ParserConfigurationException, JsonGenerationException,
    JsonMappingException, IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.getSerializationConfig().addMixInAnnotations(Element.class, ElementMixin.class);
        Element element = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument().createElement("el");
        StringWriter sw = new StringWriter();
        objectMapper.writeValue(sw, element);
        Assert.assertEquals(sw.toString(), "\"element\"");
    }
    
}

