<!doctype html>
<html>
  <head>
    <title>TiltX/TiltY to Azimuth/Altitude</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
      if(window.test){
          [{tiltX:0,tiltY:0, azimuth:0, altitude:Math.PI/2},
           {tiltX:0, tiltY:90, azimuth:Math.PI/2, altitude:0},
           {tiltX:0, tiltY:-90, azimuth:3*Math.PI/2, altitude:0},
           {tiltX:90,tiltY:0, azimuth:0, altitude:0},
           {tiltX:90, tiltY:90, azimuth:0, altitude:0},
           {tiltX:90, tiltY:-90, azimuth:0, altitude:0},
           {tiltX:-90,tiltY:0, azimuth:Math.PI, altitude:0},
           {tiltX:-90, tiltY:90, azimuth:0, altitude:0},
           {tiltX:-90, tiltY:-90, azimuth:0, altitude:0},
           {tiltX:0, tiltY:45, azimuth:Math.PI/2, altitude:Math.PI/4},
           {tiltX:0, tiltY:-45, azimuth:3*Math.PI/2, altitude:Math.PI/4},
           {tiltX:45, tiltY:0, azimuth:0, altitude:Math.PI/4},
           {tiltX:-45, tiltY:0, azimuth:Math.PI, altitude:Math.PI/4},].forEach(
            (el)=>{
              test(function(){
                var event = new PointerEvent("pointerdown",{pointerId:"pointer1", tiltX:el.tiltX, tiltY:el.tiltY});
                assert_equals(event.azimuthAngle, el.azimuth, "azimuth angle should be " + el.azimuth);
                assert_equals(event.altitudeAngle, el.altitude, "altitude angle should be " + el.altitude);
              }, `tiltX,tiltY to azimuth/altitude when tiltX=${el.tiltX} and tiltY=${el.tiltY}`);
            });

           test(function(){
              var event = new PointerEvent("pointerdown",{});
              assert_equals(event.azimuthAngle, 0, "azimuth angle should be 0");
              assert_equals(event.altitudeAngle, Math.PI/2, "altitude angle should be " + Math.PI/2);
           }, "tiltX/tiltY to azimuth/altitude when tiltX/tiltY are not populated");

           [{azimuth:0, altitude:0, tiltX:90,tiltY:0},
           {azimuth:0, altitude:Math.PI/4, tiltX:45, tiltY:0},
           {azimuth:0, altitude:Math.PI/2, tiltX:0,tiltY:0},
           {azimuth:Math.PI/2, altitude:0, tiltX:0, tiltY:90},
           {azimuth:Math.PI/2, altitude:Math.PI/4, tiltX:0, tiltY:45},
           {azimuth:Math.PI, altitude:0, tiltX:-90,tiltY:0},
           {azimuth:Math.PI, altitude:Math.PI/4, tiltX:-45, tiltY:0},
           {azimuth:3*Math.PI/2, altitude:0, tiltX:0, tiltY:-90},
           {azimuth:3*Math.PI/2, altitude:Math.PI/4, tiltX:0, tiltY:-45},].forEach(
            (el)=>{
              test(function(){
                var event = new PointerEvent("pointerdown",{pointerId:"pointer1", azimuthAngle:el.azimuth, altitudeAngle:el.altitude});
                assert_equals(event.tiltX, el.tiltX, "tiltX angle should be " + el.tiltX);
                assert_equals(event.tiltY, el.tiltY, "tiltY angle should be " + el.tiltY);
              }, `azimuth/altitude to tiltX/tiltY when azimuth=${el.azimuth} and altitude=${el.altitude}`);
            });

           test(function(){
              var event = new PointerEvent("pointerdown", {pointerId:"pointer1", tiltX:45});
              assert_equals(event.tiltX, 45, "tiltX value should stay as initialized");
              assert_equals(event.tiltY, 0, "tiltY value should be initialized with default value 0");
              assert_equals(event.azimuthAngle, 0, `for (tiltX, tiltY) = (${event.tiltX}, ${event.tiltY}) azimuthAngle should be 0`);
              assert_equals(event.altitudeAngle, Math.PI/4, `for (tiltX, tiltY) = (${event.tiltX}, ${event.tiltY}) altitudeAngle should be PI/4`);

              event = new PointerEvent("pointerdown", {pointerId:"pointer1", tiltY:45});
              assert_equals(event.tiltX, 0, "tiltX value should be initialized with default value 0");
              assert_equals(event.tiltY, 45, "tiltY value should stay as initialized");
              assert_equals(event.azimuthAngle, Math.PI/2, `for (tiltX, tiltY) = (${event.tiltX}, ${event.tiltY}) azimuthAngle should be PI/2`);
              assert_equals(event.altitudeAngle, Math.PI/4, `for (tiltX, tiltY) = (${event.tiltX}, ${event.tiltY}) altitudeAngle should be PI/4`);

              event = new PointerEvent("pointerdown", {pointerId:"pointer1", azimuthAngle:Math.PI/4});
              assert_equals(event.azimuthAngle, Math.PI/4, "azimuthAngle value should stay as initialized");
              assert_equals(event.altitudeAngle, Math.PI/2, "altitudeAngle should be initialized with default value of PI/2");
              assert_equals(event.tiltX, 0, `for (azimuthAngle, altitudeAngle)=(${event.azimuthAngle},${event.altitudeAngle}) tiltX angle should be 0`);
              assert_equals(event.tiltY, 0, `for (azimuthAngle, altitudeAngle)=(${event.azimuthAngle},${event.altitudeAngle}) tiltY angle should be 0`);

              event = new PointerEvent("pointerdown", {pointerId:"pointer1", altitudeAngle:Math.PI/4});
              assert_equals(event.azimuthAngle, 0, "azimuthAngle value should be initialized with default value of 0");
              assert_equals(event.altitudeAngle, Math.PI/4, "altitudeAngle should stay as initialized");
              assert_equals(event.tiltX, 45, `for (azimuthAngle, altitudeAngle)=(${event.azimuthAngle},${event.altitudeAngle}) tiltX angle should be 45 degrees`);
              assert_equals(event.tiltY, 0, `for (azimuthAngle, altitudeAngle)=(${event.azimuthAngle},${event.altitudeAngle}) tiltY angle should be 0`);
           }, "If only one of the values (tiltX, tiltY) or (azimuthAngle, altitudeAngle) is available the other one is set to the default value");

           test(function(){
              var event = new PointerEvent("pointerdown", {pointerId:"pointer1", tiltX:45, azimuthAngle:Math.PI/4});
              assert_equals(event.tiltX, 45, "tiltX value should stay as initialized");
              assert_equals(event.tiltY, 0, "tiltY value should be initialized with default value 0");
              assert_equals(event.azimuthAngle, Math.PI/4, "azimuthAngle should stay as initialized");
              assert_equals(event.altitudeAngle, Math.PI/2, `altitudeAngle value should be initialized with default value ${Math.PI/2}`);

              event = new PointerEvent("pointerdown", {pointerId:"pointer1", tiltY:45, azimuthAngle:Math.PI/4});
              assert_equals(event.tiltX, 0, "tiltX value should be initialized with default value 0");
              assert_equals(event.tiltY, 45, "tiltY value should stay as initialized");
              assert_equals(event.azimuthAngle, Math.PI/4, "azimuthAngle value should stay as initialized");
              assert_equals(event.altitudeAngle, Math.PI/2, `altitudeAngle value should be initialized with default value ${Math.PI/2}`);

              event = new PointerEvent("pointerdown", {pointerId:"pointer1", tiltX:45, altitudeAngle:Math.PI/4});
              assert_equals(event.tiltX, 45, "tiltX value should stay as initialized");
              assert_equals(event.tiltY, 0, "tiltY value should be initialized with default value 0");
              assert_equals(event.azimuthAngle, 0, "azimuthAngle value should be initialized with default value of 0");
              assert_equals(event.altitudeAngle, Math.PI/4, "altitudeAngle should stay as initialized");

              event = new PointerEvent("pointerdown", {pointerId:"pointer1", tiltY:45, altitudeAngle:Math.PI/4});
              assert_equals(event.tiltX, 0, "tiltX value should be initialized with default value 0");
              assert_equals(event.tiltY, 45, "tiltY value should stay as initialized");
              assert_equals(event.azimuthAngle, 0, "azimuthAngle value should be initialized with default value of 0");
              assert_equals(event.altitudeAngle, Math.PI/4, "altitudeAngle should stay as initialized");
           }, "If one of the values in both sets is provided, the other value in the set is initialized with the default value")
      }
    </script>
  </body>
</html>
