chromium/third_party/blink/web_tests/editing/selection/resources/js-test-selection-shared.js

function objectAsString(object, properties) {
    var result = "[";
    for (var x = 0; x < properties.length; x++) {
        var property = properties[x];
        if (x != 0)
            result += " ";

        var value = object[property];
        if (value && value.nodeType) // textNode
            value = value + "(" + value.nodeValue + ")";

        result += property + ": " + value;
    }
    result += ']';
    return result;
}

function selectionAsString(sel)
{
    var properties = ['anchorNode', 'anchorOffset', 'focusNode', 'focusOffset', 'isCollapsed'];
    return objectAsString(sel, properties);
}

function assertSelectionAt(anchorNode, anchorOffset, optFocusNode, optFocusOffset) {
    var focusNode = optFocusNode || anchorNode;
    var focusOffset = (optFocusOffset === undefined) ? anchorOffset : optFocusOffset;

    var sel = window.getSelection();
    if (sel.anchorNode == anchorNode
        && sel.focusNode == focusNode
        && sel.anchorOffset == anchorOffset
        && sel.focusOffset == focusOffset) {
        testPassed("Selection is " + selectionAsString(sel));
    } else {
        testFailed("Selection is " + selectionAsString(sel) + 
            " should be at anchorNode: " + anchorNode + " anchorOffset: " + anchorOffset +
            " focusNode: " + focusNode + " focusOffset: " + focusOffset);
    }
}

function clickAt(x, y) {
    if (window.eventSender) {
        eventSender.mouseMoveTo(x, y);
        eventSender.mouseDown();
        eventSender.mouseUp();
        return true;
    }
}