Skip to content

Commit

Permalink
Merge pull request #772 from TikhomirovSergey/master
Browse files Browse the repository at this point in the history
#102 FIX
  • Loading branch information
TikhomirovSergey committed Nov 25, 2017
2 parents c60cadc + 13b7c36 commit 8798102
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 59 deletions.
31 changes: 0 additions & 31 deletions src/main/java/io/appium/java_client/MissingParameterException.java

This file was deleted.

33 changes: 16 additions & 17 deletions src/main/java/io/appium/java_client/MultiTouchAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,15 @@

package io.appium.java_client;

import static com.google.common.base.Preconditions.checkArgument;
import static java.util.stream.Collectors.toList;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;

import java.util.List;
import java.util.Map;

/**
* Used for Webdriver 3 multi-touch gestures
* See the Webriver 3 spec https://dvcs.w3.org/hg/webdriver/raw-file/default/webdriver-spec.html
Expand Down Expand Up @@ -62,28 +67,22 @@ public MultiTouchAction add(TouchAction action) {
* Perform the multi-touch action on the mobile performsTouchActions.
*/
public MultiTouchAction perform() {
int size = actions.build().size();
if (size > 1) {
List<TouchAction> touchActions = actions.build();
checkArgument(touchActions.size() > 0,
"MultiTouch action must have at least one TouchAction added before it can be performed");
if (touchActions.size() > 1) {
performsTouchActions.performMultiTouchAction(this);
} else if (size == 1) {
//android doesn't like having multi-touch actions with only a single TouchAction...
performsTouchActions.performTouchAction(actions.build().get(0));
} else {
throw new MissingParameterException(
"MultiTouch action must have at least one TouchAction "
+ "added before it can be performed");
}
return this;
} //android doesn't like having multi-touch actions with only a single TouchAction...
performsTouchActions.performTouchAction(touchActions.get(0));
return this;
}

protected ImmutableMap<String, ImmutableList<Object>> getParameters() {
ImmutableList.Builder<Object> listOfActionChains = ImmutableList.builder();
protected Map<String, List<Object>> getParameters() {
ImmutableList<TouchAction> touchActions = actions.build();

touchActions.forEach(action -> {
listOfActionChains.add(action.getParameters().get("actions"));
});
return ImmutableMap.of("actions", listOfActionChains.build());
return ImmutableMap.of("actions",
touchActions.stream().map(touchAction ->
touchAction.getParameters().get("actions")).collect(toList()));
}

/**
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/io/appium/java_client/PerformsTouchActions.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import static io.appium.java_client.MobileCommand.PERFORM_MULTI_TOUCH;
import static io.appium.java_client.MobileCommand.PERFORM_TOUCH_ACTION;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Map;

public interface PerformsTouchActions extends ExecutesMethod {
/**
Expand All @@ -37,7 +37,7 @@ public interface PerformsTouchActions extends ExecutesMethod {
* @return the same touch action object
*/
default TouchAction performTouchAction(TouchAction touchAction) {
ImmutableMap<String, ImmutableList<Object>> parameters = touchAction.getParameters();
Map<String, List<Object>> parameters = touchAction.getParameters();
execute(PERFORM_TOUCH_ACTION, parameters);
return touchAction.clearParameters();
}
Expand All @@ -54,7 +54,7 @@ default TouchAction performTouchAction(TouchAction touchAction) {
* @param multiAction the MultiTouchAction object to perform.
*/
default void performMultiTouchAction(MultiTouchAction multiAction) {
ImmutableMap<String, ImmutableList<Object>> parameters = multiAction.getParameters();
Map<String, List<Object>> parameters = multiAction.getParameters();
execute(PERFORM_MULTI_TOUCH, parameters);
multiAction.clearActions();
}
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/io/appium/java_client/TouchAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import static io.appium.java_client.touch.LongPressOptions.longPressOptions;
import static io.appium.java_client.touch.offset.ElementOption.element;
import static io.appium.java_client.touch.offset.PointOption.point;
import static java.util.stream.Collectors.toList;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
Expand All @@ -34,6 +35,8 @@
import org.openqa.selenium.WebElement;

import java.time.Duration;
import java.util.List;
import java.util.Map;

/**
* Used for Webdriver 3 touch actions
Expand Down Expand Up @@ -415,13 +418,10 @@ public T perform() {
*
* @return A map of parameters for this touch action to pass as part of mjsonwp.
*/
protected ImmutableMap<String, ImmutableList<Object>> getParameters() {

ImmutableList.Builder<Object> parameters = builder();
ImmutableList<ActionParameter> actionList = parameterBuilder.build();

actionList.forEach(action -> parameters.add(action.getParameterMap()));
return ImmutableMap.of("actions", parameters.build());
protected Map<String, List<Object>> getParameters() {
List<ActionParameter> actionList = parameterBuilder.build();
return ImmutableMap.of("actions", actionList.stream()
.map(ActionParameter::getParameterMap).collect(toList()));
}

/**
Expand Down

0 comments on commit 8798102

Please sign in to comment.