static Supplier<Properties> readSeleniumGridProperties() { return () -> propertyReader() .apply(CONFIG_FOLDER + "selenium-grids") .getOrElse(Properties::new); }
/** * <p>unCurryCheckedBifunction.</p> * * @param <A> a A object. * @param <B> a B object. * @param <R> a R object. * @return a {@link java.util.function.Function} object. */ static <A, B, R> Function<Function<A, CheckedFunction<B, R>>, CheckedBiFunction<A, B, R>> unCurryCheckedBiFunction() { return (func) -> (a, b) -> func.apply(a).applyWithException(b); }
default <U> Result<U> map(Function<? super T, ? extends U> mapper) { Objects.requireNonNull(mapper); return isPresent() ? ((CheckedFunction<T, U>) mapper::apply).apply(get()) : this.asFailure(); }
/** * <p>unCurryTrifunction.</p> * * @param <A> a A object. * @param <B> a B object. * @param <C> a C object. * @param <R> a R object. * @return a {@link java.util.function.Function} object. */ static <A, B, C, R> Function< Function<A, Function<B, CheckedFunction<C, R>>>, CheckedTriFunction<A, B, C, R>> unCurryCheckedTriFunction() { return (func) -> (a, b, c) -> func.apply(a).apply(b).applyWithException(c); }
static WebdriversConfig readConfig() { final Properties configProperties = propertyReader() .apply(CONFIG_FOLDER + "config") .getOrElse(Properties::new); return new WebdriversConfigFactory().createFromProperies(configProperties); } }
@Override default Result<R> apply(T t) { try { return Result.success(applyWithException(t)); } catch (Exception e) { return Result.failure(message().apply(e)); } } R applyWithException(T t) throws Exception;
@Override public PageObject resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { Class<?> pageObjectClass = parameterContext .getParameter() .getType(); final Result<PageObject> po = ((CheckedFunction<Class<?>, PageObject>) aClass -> { final Constructor<?> constructor = pageObjectClass.getConstructor(WebDriver.class, ContainerInfo.class); WebDriver webDriver = webdriver(); PageObject page = PageObject.class.cast(constructor.newInstance(webDriver, containerInfo().apply(extensionContext))); PageFactory.initElements(new WebDriverExtensionFieldDecorator(webDriver), page); return page; }) .apply(pageObjectClass); po.ifPresentOrElse( success -> logger().fine("pageobject of type " + pageObjectClass.getSimpleName() + " was created with " + webdriverName().apply(webdriver())), failed -> logger().warning("was not able to create PageObjectInstance " + failed) ); po.ifAbsent(() -> { throw new ParameterResolutionException("was not able to create PageObjectInstance of type " + pageObjectClass); }); return po.get(); } });
@Override public PageObject resolveParameter(ParameterContext parameterContext , ExtensionContext extensionContext) { logger().info("resolveParameter called.."); Class<?> pageObjectClass = parameterContext .getParameter() .getType(); final Result<PageObject> po = ((CheckedFunction<Class<?>, PageObject>) aClass -> { final Constructor<?> constructor = pageObjectClass.getConstructor(WebDriver.class , ContainerInfo.class); WebDriver webDriver = webdriver(); PageObject page = PageObject.class.cast(constructor.newInstance(webDriver , containerInfo().apply(extensionContext))); PageFactory.initElements(new WebDriverExtensionFieldDecorator(webDriver) , page); return page; }) .apply(pageObjectClass); po.ifPresentOrElse( success -> pageObjectInvocationContextProvider.logger().fine("pageobject of type " + pageObjectClass.getSimpleName() + " was created with " + webdriverName().apply(webdriver())) , failed -> pageObjectInvocationContextProvider.logger().warning("was not able to create PageObjectInstance " + failed) ); po.ifAbsent(() -> { throw new ParameterResolutionException("was not able to create PageObjectInstance of type " + pageObjectClass); }); return po.get(); } });
@Override public void beforeEach(Method testMethod, ExtensionContext context) throws Exception { int port = preparePort(context); prepareIP(context); ((CheckedFunction<Integer, Server>) p -> new TServer().startServer(p)).apply(port) .ifPresentOrElse(ok -> { Result<Server> server = Result.success(ok); store().apply(context).put(TSERVER_SERVER, server); logger().info("Started server on port: " + port); }, failed -> { String message = "failed to start TServer for port " + port + " -> " + failed; logger().warning(message); throw new RuntimeException(message); }); }
@Test @DisplayName("build browserstack config") void test003() { Result<Properties> apply = propertyReader().apply(CONFIG_FOLDER + "config-003"); Properties configProperties = apply.get(); WebdriversConfig config = factory.createFromProperies(configProperties); assertEquals(1, config.getGridConfigs().size()); GridConfig genericGridConfig = config.getGridConfigs().stream() .filter(grid -> grid.getName().equals("browserstack")).findFirst().get(); assertEquals("https://danielnordhoffve1:abc@hub-cloud.browserstack.com/wd/hub", genericGridConfig.getTarget()); assertEquals(Type.BROWSERSTACK, genericGridConfig.getType()); }
@Test @DisplayName("build saucelabs config") void test004() { Result<Properties> apply = propertyReader().apply(CONFIG_FOLDER + "config-004"); Properties configProperties = apply.get(); WebdriversConfig config = factory.createFromProperies(configProperties); assertEquals(1, config.getGridConfigs().size()); GridConfig sauceLabsGridConfig = config.getGridConfigs().stream() .filter(grid -> grid.getName().equals("saucelabs")).findFirst().get(); assertEquals("https://dve81:abc@ondemand.saucelabs.com:443/wd/hub", sauceLabsGridConfig.getTarget()); assertEquals(Type.SAUCELABS, sauceLabsGridConfig.getType()); }
@Test @DisplayName("build grid config without os and versions") void test005() { Result<Properties> apply = propertyReader().apply(CONFIG_FOLDER + "config-005"); Properties configProperties = apply.get(); WebdriversConfig config = factory.createFromProperies(configProperties); assertEquals(1, config.getGridConfigs().size()); GridConfig genericGridConfig = config.getGridConfigs().stream() .filter(grid -> grid.getName().equals("generic")).findFirst().get(); assertEquals(2, genericGridConfig.getDesiredCapabilities().size()); assertEquals(Platform.ANY, genericGridConfig.getDesiredCapabilities().get(0).getPlatform()); assertEquals("", genericGridConfig.getDesiredCapabilities().get(0).getVersion()); assertEquals(Platform.ANY, genericGridConfig.getDesiredCapabilities().get(1).getPlatform()); assertEquals("", genericGridConfig.getDesiredCapabilities().get(1).getVersion()); } }
@Test @DisplayName("build from properties") void test002() { Result<Properties> apply = propertyReader().apply(CONFIG_FOLDER + "config-002"); Properties configProperties = apply.get();
@Test @DisplayName("test reading properties") @Disabled("test is not not generic enough") void test001() { Properties properties = BrowserDriverFunctions.propertyReader() .apply(BrowserDriverFunctions.CONFIG_FOLDER + "config").get(); final String unittestingTarget = valueOf(properties.get("unittesting.target")).trim(); logger().info("unittestingTarget -> #" + unittestingTarget + "#"); match( matchCase(() -> failure("no matching unittesting.target..")), matchCase(() -> "locale".equals(unittestingTarget), () -> success(TRUE)), matchCase(() -> "selenoid.rapidpm.org".equals(unittestingTarget), () -> success(TRUE)), matchCase(() -> "selenoid-server".equals(unittestingTarget), () -> success(TRUE)) ) .ifAbsent(fail("no expected property value found for unittesting.target.. " + unittestingTarget)); } }