chromium/third_party/blink/web_tests/fast/js/kde/script-tests/function_arguments.js

// check value of arguments inside recursion

var expected = [null,99,1,2,3,3,2,1,99,null];
var expno = 0;

var x = 0;
shouldBe("mf.arguments", "expected[expno++]");
function mf(a,b) {
  shouldBe("mf.arguments[0]", "expected[expno++]");
  x++;
  if (x < 4)
    mf(x,1);
  shouldBe("mf.arguments[0]", "expected[expno++]");
  return b;
}
mf(99);
shouldBe("mf.arguments", "expected[expno++]");


// check internal properties of arguments

// Delete


// DontEnum
var foundArgs = false;

var ReadOnlyOK = false;
var DontDeleteOK = false;
var DontEnumOK = false;
function f(a,b,c) {

  // ReadOnly
  var newargs = new Object();
  f.arguments = newargs;
  ReadOnlyOK = (f.arguments != newargs);

  // DontDelete
  DontDeleteOK = !delete(f.arguments);
  if (f.arguments == undefined || !f.hasOwnProperty("arguments"))
    DontDeleteOK = false;

  // DontEnum
  var foundArgs = false;
  for (i in f) {
    if (f == "arguments")
      foundArgs = true;
  }
  DontEnumOK = !foundArgs;
}
f(1,2,3);
shouldBeTrue("ReadOnlyOK");
shouldBeTrue("DontDeleteOK");
shouldBeTrue("DontEnumOK");

// Check that parameter variables are bound to the corresponding
// elements in the arguments array
var arg0 = null;
var arg1 = null;
var arg2 = null;
var newarg0 = null;
var newarg1 = null;
var newarg2 = null;
var newx = null;
var arglength = 0;

function dupargs(x,x,x)
{
  arg0 = arguments[0];
  arg1 = arguments[1];
  arg2 = arguments[2];
  arglength = arguments.length;
  x = 999;
  newarg0 = arguments[0];
  newarg1 = arguments[1];
  newarg2 = arguments[2];
  arguments[2] = 888;
  newx = x;
}

dupargs(1,2,3);

shouldBe("arg0","1");
shouldBe("arg1","2");
shouldBe("arg2","3");
shouldBe("arglength","3");
shouldBe("newarg0","1");
shouldBe("newarg1","2");
shouldBe("newarg2","999");
shouldBe("newx","888");