ZATS Mimic also supports the testing of org.zkoss.zk.ui.Richlet.[^1] Simply customize a few configurations for DefaultZatsEnvironment and the test code would be no different to testing a ZUML file. ZATS Mimic’s built-in web configuration does not support Richlet, however, we can specify the folder containing custom web configuration (web.xml and zk.xml) for the testing environment through the constructor of [DefaultZatsEnvironment](http://www.zkoss.org/javadoc/latest/zats/org/zkoss/zats/mimic/DefaultZatsEnvironment.html#DefaultZatsEnvironment(java.lang.String>) when testing Richlet.

For Richlet, please refer to ZK Developer’s Reference/UI Composing/Richlet

Following is a simple Richlet example, we assume that the web.xml and zk.xml are placed in the src/main/webapp/WEB-INF folder:

web.xml

<servlet-mapping>
    <servlet-name>zkLoader</servlet-name>
    <url-pattern>/zk/*</url-pattern>
</servlet-mapping>

zk.xml

<richlet>
    <richlet-name>MyRichlet</richlet-name>
    <richlet-class>foo.MyRichlet</richlet-class>
</richlet>
<richlet-mapping>
    <richlet-name>MyRichlet</richlet-name>
    <url-pattern>/foo</url-pattern>
</richlet-mapping>

MyRichlet.java

public class MyRichlet extends GenericRichlet {
    public void service(Page page) throws Exception {
        final Label message = new Label("foo");
        Button button = new Button("go");
        button.addEventListener(Events.ON_CLICK, new EventListener() {
            public void onEvent(Event event) throws Exception {
                message.setValue("bar");
            }
        });
        button.setId("btn");
        message.setId("msg");
        button.setPage(page);
        message.setPage(page);
    }
}
  • Line 12, 14, 16: After clicking the button, text of the label will be changed.

Following is a typical example of testing Richlet:

@Test
public void test() {
    DefaultZatsEnvironment env = new DefaultZatsEnvironment("./src/main/webapp/WEB-INF");
    try {
        env.init("./src/main/webapp");
        DesktopAgent desktop = env.newClient().connect("/zk/foo");
        Label msg = desktop.query("#msg").as(Label.class);
        Assert.assertEquals("foo", msg.getValue());
        desktop.query("#btn").click();
        Assert.assertEquals("bar", msg.getValue());
    }
    finally {
        env.destroy();
    }
}
  • Line 12: Specify the folder containing web configuration for testing Richlet.
  • Line 22: Release DefaultZatsEnvironment manually when the testing is done.