package org.jooby.issues;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
public class Issue368 extends ServerFeature {
public interface S {
String doSomething();
}
public interface Sx {
String doSomething();
}
public static class S1 implements S {
@Override
public String doSomething() {
return "s1";
}
}
public static class S12 implements S {
private String v;
public S12(final String v) {
this.v = v;
}
@Override
public String doSomething() {
return v;
}
}
public static class Sx12 implements Sx {
private String v;
public Sx12(final String v) {
this.v = v;
}
@Override
public String doSomething() {
return v;
}
}
public static class S2 {
public String doSomething() {
return "s2";
}
}
public static class S3 {
public String doSomething() {
return "s3";
}
}
public static class S4 implements S {
@Override
public String doSomething() {
return "s4";
}
}
{
use(ConfigFactory.empty().withValue("v", ConfigValueFactory.fromAnyRef("s12")));
bind(S2.class);
bind(c -> new S12(c.getString("v")));
bind(new S3());
bind(S.class, S1.class);
bind(Sx.class, c -> new Sx12(c.getString("v")));
bind(S4.class, S4::new);
get("/bind", req -> {
return req.require(S2.class).doSomething()
+ ";" + req.require(S12.class).doSomething()
+ ";" + req.require(S3.class).doSomething()
+ ";" + req.require(S.class).doSomething()
+ ";" + req.require(Sx.class).doSomething()
+ ";" + req.require(S4.class).doSomething();
});
}
@Test
public void shouldSimplifyBinding() throws Exception {
request()
.get("/bind")
.expect("s2;s12;s3;s1;s12;s4");
}
}