Package br.com.caelum.vraptor.restfulie.serialization

Source Code of br.com.caelum.vraptor.restfulie.serialization.RestfulSerializationTest$MegaConverter

package br.com.caelum.vraptor.restfulie.serialization;

import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.typeCompatibleWith;
import static org.junit.Assert.assertThat;

import br.com.caelum.vraptor.serialization.xstream.XStreamBuilderImpl;
import org.junit.Test;

import br.com.caelum.vraptor.restfulie.hypermedia.HypermediaResource;
import br.com.caelum.vraptor.restfulie.relation.RelationBuilder;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.converters.reflection.ReflectionConverter;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class RestfulSerializationTest {

  class CustomType implements HypermediaResource{

    public void configureRelations(RelationBuilder builder) {
    }

  }

  @Test
  public void shouldReturnAnXStreamInstanceWithSupportToLinkConvertersBasedOnReflection() {
    RestfulSerialization serialization = new RestfulSerialization(null, null, null, null, null, XStreamBuilderImpl.cleanInstance());
    XStream xstream = serialization.getXStream();
    Converter converter = xstream.getConverterLookup().lookupConverterForType(CustomType.class);
    assertThat(converter.getClass(), is(typeCompatibleWith(LinkConverter.class)));
  }

  class CustomNonHMType {

  }

  @Test
  public void shouldUseTheDefaultConverterForTypesThatAreNotHypermediaAware() {
    RestfulSerialization serialization = new RestfulSerialization(null, null, null, null, null, XStreamBuilderImpl.cleanInstance());
    XStream xstream = serialization.getXStream();
    Converter converter = xstream.getConverterLookup().lookupConverterForType(CustomNonHMType.class);
    assertThat(converter.getClass(), is(typeCompatibleWith(ReflectionConverter.class)));
  }

  class MegaConverter implements Converter {

    public void marshal(Object source, HierarchicalStreamWriter writer,
        MarshallingContext context) {
    }

    public Object unmarshal(HierarchicalStreamReader reader,
        UnmarshallingContext context) {
      return null;
    }

    public boolean canConvert(Class type) {
      return true;
    }

  }

  @Test
  public void shouldAllowCustomXStreamRetrieval() {

    RestfulSerialization serialization = new RestfulSerialization(null, null, null, null, null, XStreamBuilderImpl.cleanInstance()) {
      @Override
      protected XStream getXStream() {
        XStream xStream = super.getXStream();
        xStream.registerConverter(new MegaConverter());
        return xStream;
      }
    };
    XStream xstream = serialization.getXStream();
    Converter converter = xstream.getConverterLookup().lookupConverterForType(CustomType.class);
    assertThat(converter.getClass(), is(typeCompatibleWith(MegaConverter.class)));
    converter = xstream.getConverterLookup().lookupConverterForType(CustomNonHMType.class);
    assertThat(converter.getClass(), is(typeCompatibleWith(MegaConverter.class)));
  }

}
TOP

Related Classes of br.com.caelum.vraptor.restfulie.serialization.RestfulSerializationTest$MegaConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.