Skip to content

Commit 8798102

Browse files
Merge pull request #772 from TikhomirovSergey/master
#102 FIX
2 parents c60cadc + 13b7c36 commit 8798102

File tree

4 files changed

+27
-59
lines changed

4 files changed

+27
-59
lines changed

src/main/java/io/appium/java_client/MissingParameterException.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/main/java/io/appium/java_client/MultiTouchAction.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616

1717
package io.appium.java_client;
1818

19+
import static com.google.common.base.Preconditions.checkArgument;
20+
import static java.util.stream.Collectors.toList;
1921

2022
import com.google.common.collect.ImmutableList;
2123
import com.google.common.collect.ImmutableMap;
2224

25+
import java.util.List;
26+
import java.util.Map;
27+
2328
/**
2429
* Used for Webdriver 3 multi-touch gestures
2530
* See the Webriver 3 spec https://dvcs.w3.org/hg/webdriver/raw-file/default/webdriver-spec.html
@@ -62,28 +67,22 @@ public MultiTouchAction add(TouchAction action) {
6267
* Perform the multi-touch action on the mobile performsTouchActions.
6368
*/
6469
public MultiTouchAction perform() {
65-
int size = actions.build().size();
66-
if (size > 1) {
70+
List<TouchAction> touchActions = actions.build();
71+
checkArgument(touchActions.size() > 0,
72+
"MultiTouch action must have at least one TouchAction added before it can be performed");
73+
if (touchActions.size() > 1) {
6774
performsTouchActions.performMultiTouchAction(this);
68-
} else if (size == 1) {
69-
//android doesn't like having multi-touch actions with only a single TouchAction...
70-
performsTouchActions.performTouchAction(actions.build().get(0));
71-
} else {
72-
throw new MissingParameterException(
73-
"MultiTouch action must have at least one TouchAction "
74-
+ "added before it can be performed");
75-
}
75+
return this;
76+
} //android doesn't like having multi-touch actions with only a single TouchAction...
77+
performsTouchActions.performTouchAction(touchActions.get(0));
7678
return this;
7779
}
7880

79-
protected ImmutableMap<String, ImmutableList<Object>> getParameters() {
80-
ImmutableList.Builder<Object> listOfActionChains = ImmutableList.builder();
81+
protected Map<String, List<Object>> getParameters() {
8182
ImmutableList<TouchAction> touchActions = actions.build();
82-
83-
touchActions.forEach(action -> {
84-
listOfActionChains.add(action.getParameters().get("actions"));
85-
});
86-
return ImmutableMap.of("actions", listOfActionChains.build());
83+
return ImmutableMap.of("actions",
84+
touchActions.stream().map(touchAction ->
85+
touchAction.getParameters().get("actions")).collect(toList()));
8786
}
8887

8988
/**

src/main/java/io/appium/java_client/PerformsTouchActions.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import static io.appium.java_client.MobileCommand.PERFORM_MULTI_TOUCH;
2020
import static io.appium.java_client.MobileCommand.PERFORM_TOUCH_ACTION;
2121

22-
import com.google.common.collect.ImmutableList;
23-
import com.google.common.collect.ImmutableMap;
22+
import java.util.List;
23+
import java.util.Map;
2424

2525
public interface PerformsTouchActions extends ExecutesMethod {
2626
/**
@@ -37,7 +37,7 @@ public interface PerformsTouchActions extends ExecutesMethod {
3737
* @return the same touch action object
3838
*/
3939
default TouchAction performTouchAction(TouchAction touchAction) {
40-
ImmutableMap<String, ImmutableList<Object>> parameters = touchAction.getParameters();
40+
Map<String, List<Object>> parameters = touchAction.getParameters();
4141
execute(PERFORM_TOUCH_ACTION, parameters);
4242
return touchAction.clearParameters();
4343
}
@@ -54,7 +54,7 @@ default TouchAction performTouchAction(TouchAction touchAction) {
5454
* @param multiAction the MultiTouchAction object to perform.
5555
*/
5656
default void performMultiTouchAction(MultiTouchAction multiAction) {
57-
ImmutableMap<String, ImmutableList<Object>> parameters = multiAction.getParameters();
57+
Map<String, List<Object>> parameters = multiAction.getParameters();
5858
execute(PERFORM_MULTI_TOUCH, parameters);
5959
multiAction.clearActions();
6060
}

src/main/java/io/appium/java_client/TouchAction.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static io.appium.java_client.touch.LongPressOptions.longPressOptions;
2222
import static io.appium.java_client.touch.offset.ElementOption.element;
2323
import static io.appium.java_client.touch.offset.PointOption.point;
24+
import static java.util.stream.Collectors.toList;
2425

2526
import com.google.common.collect.ImmutableList;
2627
import com.google.common.collect.ImmutableMap;
@@ -34,6 +35,8 @@
3435
import org.openqa.selenium.WebElement;
3536

3637
import java.time.Duration;
38+
import java.util.List;
39+
import java.util.Map;
3740

3841
/**
3942
* Used for Webdriver 3 touch actions
@@ -415,13 +418,10 @@ public T perform() {
415418
*
416419
* @return A map of parameters for this touch action to pass as part of mjsonwp.
417420
*/
418-
protected ImmutableMap<String, ImmutableList<Object>> getParameters() {
419-
420-
ImmutableList.Builder<Object> parameters = builder();
421-
ImmutableList<ActionParameter> actionList = parameterBuilder.build();
422-
423-
actionList.forEach(action -> parameters.add(action.getParameterMap()));
424-
return ImmutableMap.of("actions", parameters.build());
421+
protected Map<String, List<Object>> getParameters() {
422+
List<ActionParameter> actionList = parameterBuilder.build();
423+
return ImmutableMap.of("actions", actionList.stream()
424+
.map(ActionParameter::getParameterMap).collect(toList()));
425425
}
426426

427427
/**

0 commit comments

Comments
 (0)