/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.importer.rest;
import static org.easymock.classextension.EasyMock.createNiceMock;
import static org.easymock.classextension.EasyMock.replay;
import java.beans.PropertyDescriptor;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import org.geoserver.importer.ImportContext;
import org.geoserver.importer.ImportTask;
import org.geoserver.importer.Importer;
import org.geoserver.importer.rest.converters.ImportJSONReader;
import org.geoserver.importer.rest.converters.ImportJSONWriter;
import org.geoserver.importer.rest.converters.ImportJSONWriter.FlushableJSONBuilder;
import org.geoserver.importer.transform.ImportTransform;
import org.geoserver.rest.RequestInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.context.request.AbstractRequestAttributes;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import junit.framework.TestCase;
/**
*
* @author Ian Schneider <ischneider@opengeo.org>
*/
public abstract class TransformTestSupport extends TestCase {
public void doJSONTest(ImportTransform transform) throws Exception {
StringWriter buffer = new StringWriter();
Importer im = createNiceMock(Importer.class);
RequestInfo ri = createNiceMock(RequestInfo.class);
replay(im, ri);
RequestAttributes oldAttributes = RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(new TransformTestSupport.MapRequestAttributes());
RequestInfo.set(ri);
ImportJSONWriter jsonio = new ImportJSONWriter(im);
FlushableJSONBuilder builder = new FlushableJSONBuilder(buffer);
ImportContext c = new ImportContext(0);
c.addTask(new ImportTask());
jsonio.transform(builder,transform, 0, c.task(0), true, 1);
ImportJSONReader reader = new ImportJSONReader(im);
ImportTransform transform2 = reader.transform(buffer.toString());
PropertyDescriptor[] pd = BeanUtils.getPropertyDescriptors(transform.getClass());
for (int i = 0; i < pd.length; i++) {
assertEquals("expected same value of " + pd[i].getName(),
pd[i].getReadMethod().invoke(transform),
pd[i].getReadMethod().invoke(transform2));
}
RequestContextHolder.setRequestAttributes(oldAttributes);
}
public static class MapRequestAttributes extends AbstractRequestAttributes {
Map<String, Object> requestAttributes = new HashMap<>();
@Override
public Object getAttribute(String name, int scope) {
return requestAttributes.get(name);
}
@Override
public void setAttribute(String name, Object value, int scope) {
requestAttributes.put(name, value);
}
@Override
public void removeAttribute(String name, int scope) {
requestAttributes.remove(name);
}
@Override
public String[] getAttributeNames(int scope) {
return requestAttributes.keySet().toArray(new String[requestAttributes.size()]);
}
@Override
protected void updateAccessedSessionAttributes() { }
@Override
public void registerDestructionCallback(String name, Runnable callback, int scope) { }
@Override
public Object resolveReference(String key) { return null; }
@Override
public String getSessionId() { return null; }
@Override
public Object getSessionMutex() { return null; }
}
}