/*
* Copyright 2013, The gwtquery team.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.query.client.ajax;
import com.google.gwt.query.servlet.GQAjaxTestServlet;
import com.google.gwt.query.vm.AjaxTransportJre;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.webapp.WebAppClassLoader;
import org.eclipse.jetty.webapp.WebAppContext;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.servlet.Servlet;
/**
* Tests for Data Binders and Ajax run in the JVM
*/
public class AjaxTestJre extends AjaxTests {
static Server server;
static int port = new Random().nextInt(1000) + 2000;
public String getModuleName() {
return null;
}
public AjaxTestJre() throws Exception {
// Disable stderr, so as stack traces of expected failures do not
// mess the output.
System.setErr(new PrintStream(new ByteArrayOutputStream()));
String localDomain = "http://127.0.0.1:" + port;
AjaxTransportJre.enableCORS(localDomain);
String corsDomain = "http://localhost:" + port;
echoUrl = localDomain + "/" + servletPath;
echoUrlCORS = corsDomain + "/" + servletPath + "?cors=true";
startWebServer(port);
}
protected void startWebServer(int port) throws Exception {
if (server == null) {
final Map<String, Class<? extends Servlet>> servlets = new HashMap<>();
servlets.put("/" + servletPath, GQAjaxTestServlet.class);
server = createWebServer(port, ".", null, servlets, null);
}
}
public static Server createWebServer(final int port, final String resourceBase, final String[] classpath,
final Map<String, Class<? extends Servlet>> servlets, final HandlerWrapper handler) throws Exception {
final Server server = new Server(port);
final WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setResourceBase(resourceBase);
if (servlets != null) {
for (final Map.Entry<String, Class<? extends Servlet>> entry : servlets.entrySet()) {
final String pathSpec = entry.getKey();
final Class<? extends Servlet> servlet = entry.getValue();
context.addServlet(servlet, pathSpec);
// disable defaults if someone likes to register his own root servlet
if ("/".equals(pathSpec)) {
context.setDefaultsDescriptor(null);
context.addServlet(DefaultServlet.class, "/favicon.ico");
}
}
}
final WebAppClassLoader loader = new WebAppClassLoader(context);
if (classpath != null) {
for (final String path : classpath) {
loader.addClassPath(path);
}
}
context.setClassLoader(loader);
if (handler != null) {
handler.setHandler(context);
server.setHandler(handler);
} else {
server.setHandler(context);
}
server.start();
return server;
}
}