function didShowKeyboard()
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                uiController.didShowKeyboardCallback = function() {
                    uiController.uiScriptComplete();
                }
            })();`, resolve);
    });
}

function doubleTapToZoomAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                let completionCount = 0;
                const checkDone = () => {
                    if (++completionCount == 3)
                        uiController.uiScriptComplete();
                };
                uiController.didEndZoomingCallback = checkDone;
                uiController.singleTapAtPoint(${x}, ${y}, checkDone);
                uiController.singleTapAtPoint(${x}, ${y}, checkDone);
            })();`, resolve);
    });
}

function doubleTapAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                uiController.doubleTapAtPoint(${x}, ${y}, 0, function() {
                    uiController.uiScriptComplete();
                });
            })();`, resolve);
    });
}

function longPressAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                uiController.longPressAtPoint(${x}, ${y}, function() {
                    uiController.uiScriptComplete();
                });
            })();`, resolve);
    });
}

function liftUpAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                uiController.liftUpAtPoint(${x}, ${y}, 1, function() {
                    uiController.uiScriptComplete();
                });
            })();`, resolve);
    });
}

function longPressAndHoldAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                const eventStream = {
                    events : [
                        {
                            interpolate : "linear",
                            timestep: 0.1,
                            coordinateSpace : "content",
                            startEvent : {
                                inputType : "hand",
                                timeOffset : 0,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "began",
                                        id : 1,
                                        x : ${x},
                                        y : ${y},
                                        pressure : 0
                                    }
                                ]
                            },
                            endEvent : {
                                inputType : "hand",
                                timeOffset : 2.0,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "moved",
                                        id : 1,
                                        x : ${x},
                                        y : ${y},
                                        pressure : 0
                                    }
                                ]
                            }
                        }
                    ]
                };

                uiController.sendEventStream(JSON.stringify(eventStream), () => uiController.uiScriptComplete());
            })();`, resolve);
    });
}

function tapAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                uiController.singleTapAtPoint(${x}, ${y}, function() {
                    uiController.uiScriptComplete();
                });
            })();`, resolve);
    });
}

function touchAndDragFromPointToPoint(startX, startY, endX, endY)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                const eventStream = {
                    events : [
                        {
                            interpolate : "linear",
                            timestep: 0.1,
                            coordinateSpace : "content",
                            startEvent : {
                                inputType : "hand",
                                timeOffset : 0,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "began",
                                        id : 1,
                                        x : ${startX},
                                        y : ${startY},
                                        pressure : 0
                                    }
                                ]
                            },
                            endEvent : {
                                inputType : "hand",
                                timeOffset : 0.5,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "moved",
                                        id : 1,
                                        x : ${endX},
                                        y : ${endY},
                                        pressure : 0
                                    }
                                ]
                            }
                        }
                    ]
                };

                uiController.sendEventStream(JSON.stringify(eventStream), () => uiController.uiScriptComplete());
            })();`, resolve);
    });
}

function holdAtPoint(x, y)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                const eventStream = {
                    events : [
                        {
                            interpolate : "linear",
                            timestep: 0.1,
                            coordinateSpace : "content",
                            startEvent : {
                                inputType : "hand",
                                timeOffset : 0,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "moved",
                                        id : 1,
                                        x : ${x},
                                        y : ${y},
                                        pressure : 0
                                    }
                                ]
                            },
                            endEvent : {
                                inputType : "hand",
                                timeOffset : 5.0,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "moved",
                                        id : 1,
                                        x : ${x},
                                        y : ${y},
                                        pressure : 0
                                    }
                                ]
                            }
                        }
                    ]
                };

                uiController.sendEventStream(JSON.stringify(eventStream), () => uiController.uiScriptComplete());
            })();`, resolve);
    });
}

function continueTouchAndDragFromPointToPoint(startX, startY, endX, endY)
{
    return new Promise(resolve => {
        testRunner.runUIScript(`
            (function() {
                const eventStream = {
                    events : [
                        {
                            interpolate : "linear",
                            timestep: 0.1,
                            coordinateSpace : "content",
                            startEvent : {
                                inputType : "hand",
                                timeOffset : 0,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "moved",
                                        id : 1,
                                        x : ${startX},
                                        y : ${startY},
                                        pressure : 0
                                    }
                                ]
                            },
                            endEvent : {
                                inputType : "hand",
                                timeOffset : 0.5,
                                touches : [
                                    {
                                        inputType : "finger",
                                        phase : "moved",
                                        id : 1,
                                        x : ${endX},
                                        y : ${endY},
                                        pressure : 0
                                    }
                                ]
                            }
                        }
                    ]
                };

                uiController.sendEventStream(JSON.stringify(eventStream), () => uiController.uiScriptComplete());
            })();`, resolve);
    });
}
