/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.testutil; import java.io.StringReader; import java.io.StringWriter; import org.eclipse.skalli.commons.JSONUtils; import org.eclipse.skalli.commons.XMLUtils; import org.eclipse.skalli.services.extension.rest.RestConverter; import org.eclipse.skalli.services.rest.RequestContext; import org.eclipse.skalli.services.rest.RestReader; import org.eclipse.skalli.services.rest.RestService; import org.eclipse.skalli.services.rest.RestWriter; import org.junit.Assert; import org.junit.Before; import org.restlet.Request; import org.restlet.data.MediaType; import org.restlet.data.Method; import org.restlet.data.Reference; import org.xml.sax.SAXException; import com.google.gson.JsonParseException; /** * Base class for {@link RestConverter} tests. */ @SuppressWarnings("nls") public class RestWriterTestBase { protected static final String PROTOCOL = "http"; protected static final Method ACTION = Method.GET; protected static final String HOST = "example.org"; protected static final int PORT = 8080; protected static final String PATH = "/foo/bar"; protected static final String QUERY = "a=foo&b=bar&c"; protected static final String FRAGMENT = "frag"; private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; /** Pattern for generating namespace attributes (use with <code>MessageFormat</code> */ protected static final String ATTRIBUTES_PATTERN = "xmlns=\"{0}\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xsi:schemaLocation=\"{0} http://example.org/schemas/{1}.xsd\" " + "apiVersion=\"{2}\""; protected StringWriter writer; protected RestService restService; @Before public void setup() throws Exception { writer = new StringWriter(); restService = BundleManager.getRequiredService(RestService.class); } protected RestWriter getRestWriterXML() { return restService.getRestWriter(writer, getRequestContext(MediaType.TEXT_XML)); } protected RestWriter getRestWriterJSON() { return restService.getRestWriter(writer, getRequestContext(MediaType.APPLICATION_JSON)); } protected RestReader getRestReaderJSON(String json) { return restService.getRestReader(new StringReader(json), getRequestContext(MediaType.APPLICATION_JSON)); } protected RequestContext getRequestContext(MediaType mediaType) { return getRequestContext(ACTION, PROTOCOL, HOST, PORT, PATH, QUERY, FRAGMENT, mediaType); } protected RequestContext getRequestContext(Method action, String protocol, String host, int port, String path, String query, String fragment, MediaType mediaType) { Reference resourceRef = new Reference(protocol, host, port, path, query, fragment); resourceRef.addQueryParameter("accept", mediaType.getName()); Request request = new Request(action, resourceRef); return new RequestContext(request); } protected void assertEqualsXML(String expected) throws Exception { String actual = writer.toString(); try { XMLUtils.documentFromString(actual); } catch (SAXException e) { Assert.fail("Invalid XML: " + actual); } Assert.assertEquals(XML_HEADER + expected, actual); } protected void assertEqualsJSON(String expected) throws Exception { String actual = writer.toString(); try { JSONUtils.jsonObjectFromString(actual); } catch (JsonParseException e) { Assert.fail("Invalid JSON: " + e.getMessage()); } Assert.assertEquals(expected, writer.toString()); } }