<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript">
      function stringify(a) {
        if (a)
          return a.toSource();
        return ''+a;
      }
      var args = [undefined, null, [], {}, 0, "0"];
      var stringArgs = args.map(stringify);

      function test_method(context, method, arity) {
        function testParams(existingParams, depth) {
          for (var arg of stringArgs) {
            var code = "context[method](" + existingParams + arg + ")";
            try {
              eval(code);
            } catch (ex) {
              // Exceptions are expected
            }

            if (depth < arity)
              testParams(existingParams + arg + ",", depth + 1);
          }
        }
        testParams("", 1);
      }

      function startTest() {
        var canvas = document.getElementById("img");
        var context = canvas.getContext('2d');;
        test_method(context, "getImageData", 4);
        test_method(context, "putImageData", 3);
      }
    </script>
  </head>
  <body onload="startTest()">
    <canvas id="img">No canvas support.</canvas>
  </body>
</html>