15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Try calling the browser-side bound functions with varying (invalid)
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// inputs. There is no notion of "success" for this test, other than
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// verifying the correct C++ bindings were reached with expected values.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function MyObject() {
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.x = "3";
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MyObject.prototype.toString = function() {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  throw "exception from calling toString()";
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function expectEquals(expectation, actual) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!(expectation === actual)) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    throw "FAIL: expected: " + expectation + ", actual: " + actual;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function FindProxyForURL(url, host) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call dnsResolve with some wonky arguments.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Those expected to fail (because we have passed a non-string parameter)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // will return |null|, whereas those that have called through to the C++
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bindings will return '127.0.0.1'.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals(null, dnsResolve());
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals(null, dnsResolve(null));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals(null, dnsResolve(undefined));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals('127.0.0.1', dnsResolve(""));
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals(null, dnsResolve({foo: 'bar'}));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals(null, dnsResolve(fn));
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals(null, dnsResolve(['3']));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expectEquals('127.0.0.1', dnsResolve("arg1", "arg2", "arg3", "arg4"));
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call alert with some wonky arguments.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alert();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alert(null);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alert(undefined);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alert({foo:'bar'});
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should throw an exception when we toString() the argument
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to alert in the bindings.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    alert(new MyObject());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } catch (e) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    alert(e);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call myIpAddress() with wonky arguments
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  myIpAddress(null);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  myIpAddress(null, null);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call myIpAddressEx() correctly (no arguments).
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  myIpAddressEx();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Call dnsResolveEx() (note that isResolvableEx() implicity calls it.)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  isResolvableEx("is_resolvable");
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dnsResolveEx("foobar");
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "DIRECT";
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function fn() {}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63