<!DOCTYPE html>
<html>
<head>
<title>cr.ui.Command test</title>
</head>
<body>
<command shortcut="n|Ctrl"></command>
<script>

function testCommandDefaultPrevented() {
  var calls = 0;
  document.addEventListener('canExecute', function(e) {
    ++calls;
    assertFalse(e.defaultPrevented);
    e.canExecute = true;
    assertTrue(e.defaultPrevented);
  });

  cr.ui.decorate('command', cr.ui.Command);
  document.querySelector('command').canExecuteChange();
  assertEquals(1, calls);
}

function createEvent(key, code, keyCode) {
  return {
    key: key,
    code: code,
    keyCode: keyCode,
    altKey: false,
    ctrlKey: true,
    metaKey: false,
    shiftKey: false
  };
}

function testShortcuts() {
  cr.ui.decorate('command', cr.ui.Command);
  const cmd = document.querySelector('command');
  // US keyboard - qwerty-N should work.
  assertTrue(cmd.matchesEvent(createEvent('n', 'KeyN', 0x4e)));
  // DV keyboard - qwerty-L (dvorak-N) should work.
  assertTrue(cmd.matchesEvent(createEvent('n', 'KeyL', 0x4e)));
  // DV keyboard - qwerty-N (dvorak-B) should not work.
  assertFalse(cmd.matchesEvent(createEvent('b', 'KeyN', 0x42)));
  // RU keyboard - qwerty-N (Cyrillic Te) should work. 
  assertTrue(cmd.matchesEvent(createEvent('т', 'KeyN', 0x4e)));
}

</script>
</body>
</html>
