<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/services/device/public/mojom/vibration_manager.mojom.js"></script>
<script src="../resources/user-gesture-utils.js"></script>
<script src="resources/vibration-helpers.js"></script>
<script src="vibration-utils.js"></script>
<h4 id="test"></h4>
<script>

'use strict';

if (!window.testRunner)
  debug('This test cannot be run without the TestRunner');

// Simulates a user click for vibrate to be allowed.
var element = document.getElementById("test");
simulateUserClick(element.offsetLeft + 2, element.offsetTop + 2);

vibration_test(vibration => {
  assert_true(vibration instanceof Object);
  assert_true(vibration.mockVibrationManager instanceof Object);
}, 'VibrationManager Mojo bindings and mock interfaces are available to tests.');

vibration_test(vibration => {
  let promise = new Promise(resolve => {
    let listener = msg => {
      window.removeEventListener('message', listener);
      resolve(msg.data);
    };
    window.addEventListener('message', listener);

    navigator.vibrate(1234);
  });

  return promise.then(msgData => {
    assert_equals(msgData, 'Vibrate');
    assert_equals(vibration.mockVibrationManager.getDuration(), 1234);
    assert_false(vibration.mockVibrationManager.isCancelled());
  });
}, 'navigator.vibrate(1234) triggers vibration correctly.');

vibration_test(vibration => {
  let promise = new Promise(resolve => {
    let listener = msg => {
      window.removeEventListener('message', listener);
      resolve(msg.data);
    };
    window.addEventListener('message', listener);

    navigator.vibrate(0);
  });

  return promise.then(msgData => {
    console.log("got message " + msgData);
    assert_equals(msgData, 'Cancel');
    assert_true(vibration.mockVibrationManager.isCancelled());
  });
}, 'navigator.vibrate(0) triggers cancel correctly.');

</script>
