<html><body>

<p>Test for <a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=8131">bug 8131</a>:
Some properties and methods of window and document objects cannot be converted to a string.</p>
<p>Should say SUCCESS:</p>

<script>

if (window.layoutTestController)
	layoutTestController.dumpAsText();

try {
  var currProperty;
  try {
    for (var prop in window) {
      currProperty = prop;
      window[prop] + "";
    }

  } catch (ex) {
    document.write('FAILURE (window.' + currProperty + '):' + ex.description);
    throw ex;
  }

  try {
    for (var prop in document) {
      currProperty = prop;
      document[prop] + "";
    }

  } catch (ex) {
    document.write('FAILURE (document.' + currProperty + '):' + ex.description);
    throw ex;
  }

  document.write('SUCCESS');

} catch (ex) {
}

</script>

</body></html>