<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Unit tests for bot.dom.isEnabled</title>
    <link rel="stylesheet" href="/filez/_main/third_party/js/qunit/qunit.css">
    <script src="/filez/_main/third_party/js/qunit/qunit.js"></script>
    <script src="/filez/_main/third_party/js/qunit/qunit_test_runner.js"></script>
    <script src="test_bootstrap.js"></script>
    <script type="text/javascript">
      goog.require('bot.dom');
      goog.require('bot.userAgent');
      goog.require('goog.dom');
      goog.require('goog.userAgent');
      goog.require('goog.userAgent.product');
    </script>
    <script type="text/javascript">
function assertDisabled(assert, id) {
  var element = goog.dom.$(id);
  assert.ok(element !== null && element !== undefined, 'no such element: ' + id);
  assert.notOk(bot.dom.isEnabled(element), id + ' should be disabled');
}

function assertEnabled(assert, id) {
  var element = goog.dom.$(id);
  assert.ok(element !== null && element !== undefined, 'no such element: ' + id);
  assert.ok(bot.dom.isEnabled(element), id + ' should be enabled');
}

QUnit.test('elements that do not support the disabled attribute are always enabled', function(assert) {
  assert.ok(bot.dom.isEnabled(document.body), 'Body should be enabled');
  assert.ok(bot.dom.isEnabled(document.forms[0]), 'Form should be enabled');
});

QUnit.test('should be enabled if does not have disabled attribute', function(assert) {
  assertEnabled(assert, 'enabled-button-a');
});

QUnit.test('should be disabled if it has the disabled attribute', function(assert) {
  assertDisabled(assert, 'disabled-button-b');
  assertDisabled(assert, 'disabled-button-c');
  assertDisabled(assert, 'disabled-button-d');
  assertDisabled(assert, 'disabled-button-e');
});

QUnit.test('disabled should be an inherited attribute', function(assert) {
  assertEnabled(assert, 'enabled-select');
  assertEnabled(assert, 'enabled-option');
  assertDisabled(assert, 'disabled-optgroup');
  assertDisabled(assert, 'inherits-disabled');

  assertDisabled(assert, 'disabled-select');
  assertDisabled(assert, 'inherits-disabled-2');
});

QUnit.test('disabled should inherit from fieldset unless in legend', function(assert) {
  assertEnabled(assert, 'enabled-legend-button');
  if ((goog.userAgent.GECKO && !bot.userAgent.isEngineVersion(2)) ||
      (goog.userAgent.WEBKIT && !bot.userAgent.isEngineVersion(535)) ||
      (goog.userAgent.product.ANDROID && !bot.userAgent.isProductVersion(5))) {
    assertEnabled(assert, 'disabled-legend-button');
    assertEnabled(assert, 'disabled-fieldset-button');
  } else {
    assertDisabled(assert, 'disabled-legend-button');
    assertDisabled(assert, 'disabled-fieldset-button');
  }
});

QUnit.test('enabled should respond to disabled property', function(assert) {
  var element = goog.dom.$('enabled-button-a');
  element.disabled = true;
  assertDisabled(assert, 'enabled-button-a');
  element.disabled = false;
  assertEnabled(assert, 'enabled-button-a');
});
    </script>
  </head>
  <body>
    <div id="qunit"></div>
    <div id="qunit-fixture"></div>
    <form>
      <button id="enabled-button-a" value="Enabled A"></button>
      <button id="disabled-button-b" value="Enabled B" disabled></button>
      <button id="disabled-button-c" value="Enabled C" disabled="disabled">
      </button>
      <button id="disabled-button-d" value="Enabled D" disabled="true">
      </button>
      <button id="disabled-button-e" value="Enabled E" disabled="false">
      </button>

      <select id="enabled-select">
        <option id="enabled-option">foo</option>
        <optgroup id="disabled-optgroup" disabled>
          <option id="inherits-disabled">bar</option>
        </optgroup>
      </select>

      <select id="disabled-select" disabled>
        <optgroup>
          <option id="inherits-disabled-2">baz</option>
        </optgroup>
      </select>

      <fieldset id="disabled-fieldset" disabled="disabled">
        <legend>
          <button id="enabled-legend-button">Enabled Legend Button</button>
        </legend>
        <legend>
          <button id="disabled-legend-button">Disabled Legend Button</button>
        </legend>
        <button id="disabled-fieldset-button">Disabled Fieldset Button</button>
      </fieldset>
    </form>
  </body>
</html>
