Java tutorial
/* * Copyright (C) 2015-2016 NS Solutions Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.htmlhifive.pitalium.core.model; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.apache.commons.lang3.tuple.Pair; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @SuppressWarnings("all") public class ScreenshotArgumentBuilderTest { private static final List<Pair<String, SelectorType>> TYPE_MAPPINGS = Arrays.asList( Pair.of("Id", SelectorType.ID), Pair.of("ClassName", SelectorType.CLASS_NAME), Pair.of("CssSelector", SelectorType.CSS_SELECTOR), Pair.of("LinkText", SelectorType.LINK_TEXT), Pair.of("Name", SelectorType.NAME), Pair.of("PartialLinkText", SelectorType.PARTIAL_LINK), Pair.of("TagName", SelectorType.TAG_NAME), Pair.of("XPath", SelectorType.XPATH)); @Rule public ExpectedException expected = ExpectedException.none(); /** * ???build?? */ @Test public void constructor() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder(); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("screenshotId")); builder.build(); } /** * ?SSID?null??build?? */ @Test public void constructor_null() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder(null); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("screenshotId")); builder.build(); } /** * ?SSID???build?? */ @Test public void constructor_empty() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder(""); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("screenshotId")); builder.build(); } /** * ?SSID??build */ @Test public void constructor_ssid() throws Exception { ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); } /** * SSID?? */ @Test public void screenshotId_empty_to_notEmpty() throws Exception { ScreenshotArgument arg = new ScreenshotArgumentBuilder().screenshotId("ssid").build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); } /** * SSID?? */ @Test public void screenshotId_empty_to_empty() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder().screenshotId(null); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("screenshotId")); builder.build(); } /** * SSID?? */ @Test public void screenshotId_notEmpty_to_notEmpty() throws Exception { ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").screenshotId("id").build(); assertThat(arg.getScreenshotId(), is("id")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); } /** * SSID?? */ @Test public void screenshotId_notEmpty_to_empty() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder("ssid").screenshotId(null); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("screenshotId")); builder.build(); } /** * ???addNewTarget??CompareTarget */ @Test public void addNewTarget() throws Exception { ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget().build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget())); } /** * {@link ScreenshotArgumentBuilder#addExclude(SelectorType, String)} */ @Test public void addNewTarget_selector() throws Exception { for (SelectorType type : SelectorType.values()) { ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget(type, "target").build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(type, "target")))); } } /** * addNewTargetByXxx???????? */ @Test public void addNewTargetByXxx() throws Exception { Class<ScreenshotArgumentBuilder> clss = ScreenshotArgumentBuilder.class; for (Pair<String, SelectorType> mapping : TYPE_MAPPINGS) { Method method = clss.getMethod("addNewTargetBy" + mapping.getKey(), String.class); ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder("ssid"); method.invoke(builder, "target"); ScreenshotArgument arg = builder.build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(mapping.getValue(), "target")))); } } /** * ?addNewTarget */ @Test public void addNewTarget_position() throws Exception { ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget(1d, 2d, 3d, 4d).build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(1d, 2d, 3d, 4d)))); } /** * addNewTarget */ @Test public void addNewTarget_multiple() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id") .addNewTargetByClassName("class").addNewTargetByName("name").build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(3)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id")))); assertThat(arg.getTargets().get(1), is(new CompareTarget(ScreenArea.of(SelectorType.CLASS_NAME, "class")))); assertThat(arg.getTargets().get(2), is(new CompareTarget(ScreenArea.of(SelectorType.NAME, "name")))); } /** * addNewTarget??CompareTarget */ @Test public void addNewTarget_CompareTarget() throws Exception { CompareTarget target = new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), new ScreenArea[] { ScreenArea.of(SelectorType.CSS_SELECTOR, "css"), ScreenArea.of(1d, 2d, 3d, 4d) }, false); // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget(target).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(target)); assertThat(arg.getTargets().get(0), is(not(sameInstance(target)))); } /** * addNewTarget??CompareTarget */ @Test public void addNewTarget_CompareTarget_edit() throws Exception { CompareTarget target = new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), new ScreenArea[] { ScreenArea.of(SelectorType.CSS_SELECTOR, "css"), ScreenArea.of(1d, 2d, 3d, 4d) }, false); // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget(target) .addExcludeByPartialLinkText("partial").moveTarget(true).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), new ScreenArea[] { ScreenArea.of(SelectorType.CSS_SELECTOR, "css"), ScreenArea.of(1d, 2d, 3d, 4d), ScreenArea.of(SelectorType.PARTIAL_LINK, "partial") }, true))); } /** * addMewTarget??ScreenArea */ @Test public void addNewTarget_ScreenArea() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid") .addNewTarget(ScreenArea.of(SelectorType.ID, "id")).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), null, true))); } /** * addExcludeaddNewTarget???? */ @Test public void addExclude_beforeCall_addNewTarget() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder("ssid"); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("addNewTarget is not called")); builder.addExclude(SelectorType.ID, "target"); } /** * Exclude? */ @Test public void addExclude() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetByName("name") .addExclude(SelectorType.ID, "ex").build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.NAME, "name"), new ScreenArea[] { ScreenArea.of(SelectorType.ID, "ex") }, true))); } /** * addExcludeByXxx? */ @Test public void addExcludeByXxx() throws Exception { for (Pair<String, SelectorType> mapping : TYPE_MAPPINGS) { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder("ssid").addNewTargetByXPath("xpath"); Method method = ScreenshotArgumentBuilder.class.getMethod("addExcludeBy" + mapping.getKey(), String.class); method.invoke(builder, "value"); ScreenshotArgument arg = builder.build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.XPATH, "xpath"), new ScreenArea[] { ScreenArea.of(mapping.getValue(), "value") }, true))); } } /** * ?Exclude */ @Test public void addExclude_position() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id") .addExclude(1d, 2d, 3d, 4d).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), new ScreenArea[] { ScreenArea.of(1d, 2d, 3d, 4d) }, true))); } /** * Exclude? */ @Test public void addExclude_multiple() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetByCssSelector("css") .addExcludeById("ex_id").addExcludeByCssSelector("ex_css").build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.CSS_SELECTOR, "css"), new ScreenArea[] { ScreenArea.of(SelectorType.ID, "ex_id"), ScreenArea.of(SelectorType.CSS_SELECTOR, "ex_css") }, true))); } /** * ??exclude */ @Test public void addExclude_to_multipleTargets() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetByLinkText("link") .addNewTargetByPartialLinkText("partial_link").addExcludeByXPath("ex_xpath") .addNewTargetByTagName("tag").addExcludeByClassName("ex_class").addExcludeByLinkText("ex_link") .build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(3)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.LINK_TEXT, "link")))); assertThat(arg.getTargets().get(1), is(new CompareTarget(ScreenArea.of(SelectorType.PARTIAL_LINK, "partial_link"), new ScreenArea[] { ScreenArea.of(SelectorType.XPATH, "ex_xpath") }, true))); assertThat(arg.getTargets().get(2), is(new CompareTarget(ScreenArea.of(SelectorType.TAG_NAME, "tag"), new ScreenArea[] { ScreenArea.of(SelectorType.CLASS_NAME, "ex_class"), ScreenArea.of(SelectorType.LINK_TEXT, "ex_link") }, true))); } /** * Exclude? */ @Test public void addExcludes_collection() throws Exception { ScreenArea[] areas = { ScreenArea.of(SelectorType.ID, "id"), ScreenArea.of(1d, 2d, 3d, 4d) }; Collection<ScreenArea> excludes = Arrays.asList(areas); ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget().addExcludes(excludes).build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.TAG_NAME, "body"), areas, true))); } /** * Exclude?? */ @Test public void addExcludes_array() throws Exception { ScreenArea[] areas = { ScreenArea.of(SelectorType.ID, "id"), ScreenArea.of(1d, 2d, 3d, 4d) }; ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTarget().addExcludes(areas).build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.TAG_NAME, "body"), areas, true))); } /** * moveTargetaddNewTarget???? */ @Test public void moveTarget_beforeCall_addNewTarget() throws Exception { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder("ssid"); expected.expect(IllegalStateException.class); expected.expectMessage(containsString("addNewTarget is not called")); builder.moveTarget(false); } /** * moveTarget?true */ @Test public void moveTarget_true() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id").moveTarget(true) .build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), null, true))); } /** * moveTarget?false */ @Test public void moveTarget_false() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id").moveTarget(false) .build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), null, false))); } /** * moveTarget???? */ @Test public void moveTarget_multiple_true_to_false() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id").moveTarget(true) .moveTarget(false).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), null, false))); } /** * moveTarget???? */ @Test public void moveTarget_multiple_false_to_true() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id").moveTarget(false) .moveTarget(true).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(1)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), null, true))); } /** * moveTarget?Target? */ @Test public void moveTarget_to_multipleTargets() throws Exception { // @formatter:off ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addNewTargetById("id").moveTarget(false) .addNewTarget(1d, 2d, 3d, 4d).moveTarget(true).addNewTarget().moveTarget(false).build(); // @formatter:on assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().size(), is(3)); assertThat(arg.getHiddenElementSelectors().isEmpty(), is(true)); assertThat(arg.getTargets().get(0), is(new CompareTarget(ScreenArea.of(SelectorType.ID, "id"), null, false))); assertThat(arg.getTargets().get(1), is(new CompareTarget(ScreenArea.of(1d, 2d, 3d, 4d), null, true))); assertThat(arg.getTargets().get(2), is(new CompareTarget(ScreenArea.of(SelectorType.TAG_NAME, "body"), null, false))); } /** * addHiddenElementSelector */ @Test public void addHiddenElementSelector() throws Exception { ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid") .addHiddenElementSelector(SelectorType.ID, "id").build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().size(), is(1)); assertThat(arg.getHiddenElementSelectors().get(0), is(new DomSelector(SelectorType.ID, "id"))); } /** * AddHiddenElementsByXxx... */ @Test public void addHiddenElementsByXxx() throws Exception { for (Pair<String, SelectorType> mapping : TYPE_MAPPINGS) { ScreenshotArgumentBuilder builder = new ScreenshotArgumentBuilder("ssid"); ScreenshotArgumentBuilder.class.getMethod("addHiddenElementsBy" + mapping.getKey(), String.class) .invoke(builder, "value"); ScreenshotArgument arg = builder.build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().size(), is(1)); assertThat(arg.getHiddenElementSelectors().get(0), is(new DomSelector(mapping.getValue(), "value"))); } } /** * HiddenElementSelector? */ @Test public void addHiddenElementSelectors_collection() throws Exception { DomSelector[] selectors = { new DomSelector(SelectorType.ID, "id"), new DomSelector(SelectorType.TAG_NAME, "tag") }; ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid") .addHiddenElementSelectors(Arrays.asList(selectors)).build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().size(), is(2)); assertThat(arg.getHiddenElementSelectors().get(0), is(selectors[0])); assertThat(arg.getHiddenElementSelectors().get(1), is(selectors[1])); } /** * HiddenElementSelector?? */ @Test public void addHiddenElementSelectors_array() throws Exception { DomSelector[] selectors = { new DomSelector(SelectorType.ID, "id"), new DomSelector(SelectorType.TAG_NAME, "tag") }; ScreenshotArgument arg = new ScreenshotArgumentBuilder("ssid").addHiddenElementSelectors(selectors).build(); assertThat(arg.getScreenshotId(), is("ssid")); assertThat(arg.getTargets().isEmpty(), is(true)); assertThat(arg.getHiddenElementSelectors().size(), is(2)); assertThat(arg.getHiddenElementSelectors().get(0), is(selectors[0])); assertThat(arg.getHiddenElementSelectors().get(1), is(selectors[1])); } }