<!DOCTYPE HTML>
<title>Use of SVGAnimatedEnumeration within SVGComponentTransferFunctionElement</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(function() {
  // This test checks the use of SVGAnimatedEnumeration within SVGComponentTransferFunctionElement.

  var feFuncRElement = document.createElementNS("http://www.w3.org/2000/svg", "feFuncR");
  feFuncRElement.setAttribute("type", "identity");

  // Check initial 'type' value.
  assert_true(feFuncRElement.type instanceof SVGAnimatedEnumeration);
  assert_equals(typeof(feFuncRElement.type.baseVal), "number");
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);

  // Switch to 'table'.
  feFuncRElement.type.baseVal = SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE;
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE);
  assert_equals(feFuncRElement.getAttribute('type'), "table");

  // Switch to 'discrete'.
  feFuncRElement.type.baseVal = SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE;
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE);
  assert_equals(feFuncRElement.getAttribute('type'), "discrete");

  // Switch to 'linear'.
  feFuncRElement.type.baseVal = SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR;
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR);
  assert_equals(feFuncRElement.getAttribute('type'), "linear");

  // Switch to 'gamma'.
  feFuncRElement.type.baseVal = SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA;
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
  assert_equals(feFuncRElement.getAttribute('type'), "gamma");

  // Try setting invalid values.
  assert_throws_js(TypeError, function() { feFuncRElement.type.baseVal = 6; });
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
  assert_equals(feFuncRElement.getAttribute('type'), "gamma");

  assert_throws_js(TypeError, function() { feFuncRElement.type.baseVal = -1; });
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
  assert_equals(feFuncRElement.getAttribute('type'), "gamma");

  assert_throws_js(TypeError, function() { feFuncRElement.type.baseVal = 0; });
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
  assert_equals(feFuncRElement.getAttribute('type'), "gamma");

  // Switch to 'identity'.
  feFuncRElement.type.baseVal = SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY;
  assert_equals(feFuncRElement.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
  assert_equals(feFuncRElement.getAttribute('type'), "identity");
});
</script>