我想Sample#cap(String)在selectDynamic的以下宏实现中使用.
可能吗?
// macro implementation
import scala.language.experimental.macros
import scala.reflect.macros._
object MyMacros {
def selectDynamic(c: Context)(name: c.Expr[String]): c.Expr[String] = {
// I expected `This` to refer a Sample instance, but actually it refers SampleSpec instance...
c.Expr[String](Apply(TypeApply(Select(This(tpnme.EMPTY), newTermName("cap")), List(Ident(typeTag[String].tpe.typeSymbol))), List(name.tree)))
}
}
// class which uses selectDynamic and macro
import scala.language.dynamics
class Sample extends Dynamic {
def cap(name: String): String = name.toUpperCase
def selectDynamic(name: String): String = macro MyMacros.selectDynamic
}
class SampleSpec extends FlatSpec with ShouldMatchers {
it should "call …Run Code Online (Sandbox Code Playgroud) Jetty的ServletTester对于测试Servlet应用程序非常有用.我之前使用过Jetty 6的ServletTester,它运行得很好.
例如:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.26</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
package example;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.mortbay.jetty.testing.HttpTester;
import org.mortbay.jetty.testing.ServletTester;
public class SampleServletTest {
@Test
public void testDoGet() throws Exception {
ServletTester tester = new ServletTester();
tester.addServlet(SampleServlet.class, "/index");
tester.start();
HttpTester request = new HttpTester();
request.setMethod("GET");
request.setHeader("Host", "tester"); // should be "tester"
request.setURI("/index");
request.setVersion("HTTP/1.1");
request.setContent("");
String responses = tester.getResponses(request.generate());
HttpTester response = new HttpTester();
response.parse(responses);
assertThat(response.getStatus(), is(equalTo(200)));
}
}
Run Code Online (Sandbox Code Playgroud)
ServletTester的API在Jetty 9.x中得到了很大改进.