<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
<!--
  Touch tests that involve the ontouchstart, ontouchmove, ontouchend or ontouchcancel callbacks
  should be written in an asynchronous fashion so they can be run on mobile platforms like Android.
  This template will generate an asynchronous style test by using the js-test-post-function script.
  You will need to invoke isSuccessfullyParsed() in your test script when the test completes.
-->
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
var target = document.createElement('textarea');
target.id = "target";
target.setAttribute('style', "position: absolute; top: 0; left: 0; font-size: 24px;");

document.body.insertBefore(target, document.getElementById('console'));

function touchStartHandler()
{
    shouldBeEqualToString('event.type', 'touchstart');
    shouldBeEqualToString('event.touches[0].target.id', target.id);
    shouldBeEqualToString('event.touches[0].target.nodeName', 'TEXTAREA');

    successfullyParsed = true;
    isSuccessfullyParsed();
}

target.addEventListener("touchstart", touchStartHandler, false);

description("Tests that input elements can receive touch events.");

if (window.eventSender) {
    eventSender.clearTouchPoints();
    eventSender.addTouchPoint(10, 10);
    eventSender.touchStart();
    eventSender.touchEnd();
} else
    debug('This test requires DRT.');

document.body.removeChild(target);

var successfullyParsed = true;
</script>
</body>
</html>
