| <!doctype html> | |
| <title>XMLHttpRequest: open() attempts to toString its string parameters</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <div id="log"></div> | |
| <script> | |
| test(() => { | |
| let log = []; | |
| let expected = [ | |
| 'method', | |
| 'url', | |
| // NOTE: 'async' intentionally missing | |
| 'username', | |
| 'password', | |
| ]; | |
| let xhr = new XMLHttpRequest; | |
| xhr.open( | |
| { | |
| toString() { | |
| log.push('method'); | |
| return 'get'; | |
| }, | |
| }, | |
| { | |
| toString() { | |
| log.push('url'); | |
| return location.href; | |
| }, | |
| }, | |
| // NOTE: ToBoolean should not invoke valueOf | |
| { | |
| valueOf() { | |
| log.push('async'); | |
| return true; | |
| }, | |
| }, | |
| { | |
| toString() { | |
| log.push('username'); | |
| return 'username'; | |
| }, | |
| }, | |
| { | |
| toString() { | |
| log.push('password'); | |
| return 'password'; | |
| }, | |
| } | |
| ); | |
| assert_array_equals(log, expected); | |
| }); | |
| </script> |