package org.richfaces.component; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import java.io.IOException; import org.hamcrest.Matcher; import org.jboss.test.faces.htmlunit.HtmlUnitEnvironment; import org.junit.After; import org.junit.Before; import org.richfaces.CustomizedHtmlUnitEnvironment; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; public abstract class IntegrationTestBase { private HtmlUnitEnvironment environment; public IntegrationTestBase() { super(); } @Before public void setUp() { this.environment = new CustomizedHtmlUnitEnvironment(); this.environment.withResource("/" + getPageName() + ".xhtml", "org/richfaces/component/" + getPageName() + ".xhtml") .withResource("/WEB-INF/faces-config.xml", "org/richfaces/component/" + getFacesConfig()); setupEnvironment(environment); this.environment.start(); } protected void setupEnvironment(HtmlUnitEnvironment environment2) { // place for additional environment setup } protected abstract String getFacesConfig(); protected abstract String getPageName(); @After public void thearDown() throws Exception { environment.release(); environment = null; } protected HtmlPage submitValueAndCheckMessage(String value, Matcher<String> matcher) throws Exception { HtmlPage page = requestPage(); HtmlInput input = getInput(page); page = (HtmlPage) input.setValueAttribute(value); page = submit(page); checkMessage(page, "uiMessage", matcher); return page; } protected void checkMessage(HtmlPage page, String messageId, Matcher<String> matcher) { HtmlElement message = (HtmlElement) page.getElementById(messageId); assertThat(message.getTextContent(), matcher); } protected HtmlPage submit(HtmlPage page) throws IOException { HtmlInput input = getInput(page); input.fireEvent("blur"); return page; } protected HtmlInput getInput(HtmlPage page) { HtmlForm htmlForm = page.getFormByName("form"); assertNotNull(htmlForm); HtmlInput input = htmlForm.getInputByName("form:text"); return input; } protected HtmlPage requestPage() throws IOException { HtmlPage page = environment.getPage("/" + getPageName() + ".jsf"); return page; } }