package jp.vmi.selenium.selenese.command; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import jp.vmi.selenium.selenese.Runner; import jp.vmi.selenium.selenese.TestCase; import jp.vmi.selenium.selenese.inject.Binder; import jp.vmi.selenium.selenese.result.Failure; import jp.vmi.selenium.selenese.result.Result; import jp.vmi.selenium.selenese.result.Success; import jp.vmi.selenium.testutils.TestBase; import jp.vmi.selenium.webdriver.DriverOptions; import jp.vmi.selenium.webdriver.WebDriverManager; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; /** * test for {@link Assertion}. */ @RunWith(Parameterized.class) public class AssertionStringMatchTest extends TestBase { private final String commandName; private final String locator; private final String pattern; private final Class<? extends Result> resultClass; /** * Construct testcase by parameters. * * @param commandName assert command name * @param locator locator * @param pattern matching pattern * @param resultClass expected result class */ public AssertionStringMatchTest(String commandName, String locator, String pattern, Class<? extends Result> resultClass) { this.commandName = commandName; this.locator = locator; this.pattern = pattern; this.resultClass = resultClass; } /** * Provide Test Parameters * * @return test parameters */ @Parameters(name = "{index}: {0}({1}) => {2}") public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { { "assertText", "class=text1", "as*", Success.class }, { "assertText", "class=text1", "glob:as*", Success.class }, { "assertText", "class=text1", "regexp:as.+", Success.class }, { "assertText", "class=text1", "regexpi:AS.+", Success.class }, { "assertText", "class=text1", "exact:assertion test", Success.class }, { "assertText", "class=text1", "as*s", Failure.class }, { "assertText", "class=text1", "glob:as*s", Failure.class }, { "assertText", "class=text1", "regexp:as.+s$", Failure.class }, { "assertText", "class=text1", "regexpi:AS.+S$", Failure.class }, { "assertText", "class=text1", "exact:assertion", Failure.class }, { "assertNotText", "class=text1", "as*", Failure.class }, { "assertNotText", "class=text1", "glob:as*", Failure.class }, { "assertNotText", "class=text1", "regexp:as.+", Failure.class }, { "assertNotText", "class=text1", "regexpi:AS.+", Failure.class }, { "assertNotText", "class=text1", "exact:assertion test", Failure.class } // for issue 56 // FIXME: The following command does not work on "selenium-2.32.0". // , { "assertText", "test", "something*" }, "assert", "getText", false, false, Success.class } }); } /** * test for string-match * * @see "http://release.seleniumhq.org/selenium-core/1.0.1/reference.html#patterns" * * @throws IOException exception. */ @Test public void stringMatchPattern() throws IOException { setWebDriverFactory(WebDriverManager.HTMLUNIT, new DriverOptions()); Runner runner = new Runner(); runner.setDriver(manager.get()); CommandFactory cf = runner.getCommandFactory(); TestCase testCase = Binder.newTestCase("dummy", "dummy", wsr.getBaseURL()); testCase.addCommand(cf, "open", "/assertion.html"); testCase.addCommand(cf, commandName, locator, pattern); Result result = runner.execute(testCase); assertThat(result, is(instanceOf(resultClass))); } }