summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/fast/events/drag-and-drop-autoscroll.html
blob: c1fe7e30c14312bc507eef5cd5017c7aeea82940 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<html>
<head>
<style type="text/css">
#draggable {
  padding: 5pt;
  border: 3px solid #00cc00;
  background: #00cccc;
  width: 80px;
  cursor: hand;
}

#scrollable {
    height: 200px;
    overflow: auto;
    border: solid 3px #cc0000;
    font-size: 80px;
}
</style>
<script>
function $(id) { return document.getElementById(id); }

function finishTest() {
    eventSender.mouseUp();
    $('container').innerHTML = '';
    window.testRunner.notifyDone();
}

function testIt() {
    var draggable = $('draggable');
    var scrollable = $('scrollable');

    if (!window.eventSender)
        return;

    eventSender.dragMode = false;

    // Grab draggable
    eventSender.mouseMoveTo(draggable.offsetLeft + 5, draggable.offsetTop + 5);
    eventSender.mouseDown();

    // Move mouse to autoscroll border belt.
    eventSender.mouseMoveTo(scrollable.offsetLeft + 5, scrollable.offsetTop + scrollable.offsetHeight - 10);

    var retryCount = 0;
    var lastScrollTop = 0;

    function checkScrolled()
    {
        if (scrollable.scrollTop > 0) {
            testPassed('scrollable.scrollTop > 0');
            lastScrollTop = scrollable.scrollTop;
            // Cancel drag and drop by ESC key.
            eventSender.keyDown('\x1B');
            retryCount = 0;
            window.setTimeout(checkStopped, 50);
            return;
        }

        ++retryCount;
        if (retryCount > 10) {
            testFailed('No autoscroll');
            finishTest();
            return;
        }

        // Autoscroll is occurred evey 0.05 sec.
        window.setTimeout(checkScrolled, 50);
    }

    function checkStopped()
    {
        if (lastScrollTop == scrollable.scrollTop) {
            testPassed('autoscroll stopped');
            finishTest();
            return;
        }

        ++retryCount;
        if (retryCount > 10) {
            testFailed('still autoscroll');
            finishTest();
            return;
        }

        lastScrollTop = scrollable.scrollTop;
        window.setTimeout(checkStopped, 50);
    }

    checkScrolled();
}

function setUpTest()
{
    var scrollable = $('scrollable');
    for (var i = 0; i < 100; ++i) {
      var line = document.createElement('div');
      line.innerHTML = "line " + i;
      scrollable.appendChild(line);
    }

    if (!window.eventSender) {
        console.log('Please run within DumpRenderTree');
        return;
    }

    window.jsTestIsAsync = true;
    window.setTimeout(testIt, 0);
}
</script>
</head>
<body>
For manual testing, drag and drop "Drop Me" to "Scrollable" area.
<div id="container">
<div id="draggable" draggable="true">Drop Me</div>
Scrollable
<div id="scrollable">
</div>
</div>
<div id="console"></div>
<script src="../js/resources/js-test-pre.js"></script>
<script>
description('Check autoscroll by drag-and-drop');
setUpTest();
</script>
<script src="../js/resources/js-test-post.js"></script>
</body>
</html>