<html><body>

<p>Test for <a href="https://bugs.webkit.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.testRunner)
        testRunner.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>
