/**
* Copyright 2005-2014 Restlet
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or or EPL 1.0 (the "Licenses"). You can
* select the license that you prefer but you may not use this file except in
* compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet.test.ext.guice;
import javax.inject.Inject;
import javax.inject.Named;
import org.junit.Test;
import org.restlet.Application;
import org.restlet.Client;
import org.restlet.Component;
import org.restlet.Restlet;
import org.restlet.data.MediaType;
import org.restlet.data.Protocol;
import org.restlet.ext.guice.SelfInjectingServerResource;
import org.restlet.ext.guice.SelfInjectingServerResourceModule;
import org.restlet.resource.ClientResource;
import org.restlet.resource.Get;
import org.restlet.routing.Router;
import org.restlet.test.RestletTestCase;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Provides;
public class GuiceSelfInjectingServerResourceModuleTestCase extends
RestletTestCase {
public interface HelloResource {
@Get
String getMessage();
}
public static class HelloServerResource extends SelfInjectingServerResource
implements HelloResource {
@Inject
@Named(HELLO_KEY)
private String msg;
@Override
protected void doInit() {
System.out.println("before doInit: msg=" + msg);
try {
super.doInit();
} finally {
System.out.println("after doInit: msg=" + msg);
}
}
@Override
public String getMessage() {
return msg;
}
}
private static class TestApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/hello", HelloServerResource.class);
return router;
}
}
static class TestModule extends AbstractModule {
protected void configure() {
}
@Provides
@Named(HELLO_KEY)
String helloMessage() {
return HELLO_MSG;
}
}
static final String HELLO_KEY = "hello.message";
static final String HELLO_MSG = "This resource was injected by Guice!";
private volatile Client client;
private volatile Component component;
@Override
protected void setUp() throws Exception {
super.setUp();
Guice.createInjector(new TestModule(),
new SelfInjectingServerResourceModule());
this.client = new Client(Protocol.HTTP);
if (component == null) {
component = new Component();
component.getServers().add(Protocol.HTTP, TEST_PORT);
component.getDefaultHost().attachDefault(new TestApplication());
}
if (!this.component.isStarted()) {
this.component.start();
}
}
@Override
public void tearDown() throws Exception {
this.client.stop();
this.component.stop();
this.component = null;
super.tearDown();
}
@Test
public void testReturnsMessage() {
ClientResource client = new ClientResource("http://localhost:"
+ TEST_PORT);
client.accept(MediaType.TEXT_PLAIN);
String msg = client.getChild("/hello", HelloResource.class)
.getMessage();
assertEquals(HELLO_MSG, msg);
}
}