<html>
<head>
  <script src="../OLLoader.js"></script>
  <script type="text/javascript">

    function test_Control_TouchNavigation_constructor (t) {
        t.plan( 2 );
        var options = {bar: "foo"};
        var temp = OpenLayers.Control.prototype.initialize;
        OpenLayers.Control.prototype.initialize = function(opt) {
            t.eq(opt, options,
                 "constructor calls parent with the correct options");
        };

        var control = new OpenLayers.Control.TouchNavigation(options);
        t.ok(control instanceof OpenLayers.Control.TouchNavigation,
            "new OpenLayers.Control returns object");

        OpenLayers.Control.prototype.initialize = temp;
    }

    function test_Control_TouchNavigation_destroy(t) {
        t.plan(6);

        var control = {
            events: {
                destroy: function() {
                    t.ok(true, "events destroyed");
                }
            },
            deactivate: function() {
                t.ok(true, "navigation control deactivated before being destroyed");
            },
            dragPan: {
                destroy: function() {
                    t.ok(true, "dragPan destroyed");
                }
            },
            handlers: {
                click: {
                    destroy: function() {
                        t.ok(true, "clickHandler destroyed");
                    }
                }
            }
        };

        //this will also trigger one test by calling OpenLayers.Control's destroy
        // and three more for the destruction of dragPan, zoomBox, and wheelHandler
        OpenLayers.Control.TouchNavigation.prototype.destroy.apply(control, []);

        t.eq(control.dragPan, null, "'dragPan' set to null");
        t.eq(control.handlers, null, "handlers set to null");
    }

    function test_documentDrag(t) {

        t.plan(2);

        /**
         * These tests confirm that the documentDrag property is false by
         * default and is passed on to the DragPan control.  Tests of panning
         * while dragging outside the viewport should go in the DragPan tests.
         * Tests of the document events and appropriate callbacks from the
         * handler should go in the Drag handler tests.
         */

         var nav = new OpenLayers.Control.TouchNavigation();
         t.eq(nav.documentDrag, false, "documentDrag false by default");

         var map = new OpenLayers.Map({
             div: document.body,
             controls: [new OpenLayers.Control.TouchNavigation({documentDrag: true})]
         });
         nav = map.controls[0];

         t.eq(nav.dragPan.documentDrag, true, "documentDrag set on the DragPan control");
         map.destroy();

    }

    function test_dragPanOptions(t) {

        t.plan(2);

         var nav = new OpenLayers.Control.TouchNavigation();
         t.eq(nav.dragPanOptions, null, "dragPanOptions null by default");

         var map = new OpenLayers.Map({
             div: document.body,
             controls: [
                 new OpenLayers.Control.TouchNavigation({
                     dragPanOptions: {foo: 'bar'}
                 })
             ]
         });
         nav = map.controls[0];

         t.eq(nav.dragPan.foo, 'bar',
            "foo property is set on the DragPan control");
         map.destroy();

    }

    function test_clickHandlerOptions(t) {

        t.plan(3);

         var nav = new OpenLayers.Control.TouchNavigation();
         t.eq(nav.clickHandlerOptions, null, "clickHandlerOptions null by default");

         var map = new OpenLayers.Map({
             div: document.body,
             controls: [
                 new OpenLayers.Control.TouchNavigation({
                     clickHandlerOptions: {foo: "bar"}
                 })
             ]
         });
         nav = map.controls[0];

         t.eq(nav.handlers.click.foo, "bar", "foo property is set on the click handler");
         t.eq(nav.handlers.click.pixelTolerance, 2, "pixelTolerance is 2 by default");
         map.destroy();

    }

    function test_zoomOut(t) {
        t.plan(1);

        var map = new OpenLayers.Map('map', {zoomMethod: null});
        var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://labs.metacarta.com/wms/vmap0",
                    {layers: 'basic'} );
        map.addLayer(layer);
        map.setCenter(new OpenLayers.LonLat(0, 0), 5);
        var origSetTimeout = window.setTimeout;
        window.setTimeout = function(fn) { fn(); return 'id'; };
        var control = new OpenLayers.Control.TouchNavigation();
        map.addControl(control);
        var handler = control.handlers.click;
        handler.touchstart({xy: new OpenLayers.Pixel(1 ,1), touches: ["foo", "bar"]});
        handler.touchend({});
        t.eq(map.getZoom(), 4, "Did we zoom out?");
        // tear down
        map.destroy();
        window.setTimeout = origSetTimeout;
    }

  </script>
</head>
<body>
    <div id="map" style="width:512px;height:256px"></div>
</body>
</html>