1f34af54bcab917eb5943d1918f32d26364f45578Jason Monk// Try calling the browser-side bound functions with varying (invalid)
2f34af54bcab917eb5943d1918f32d26364f45578Jason Monk// inputs. There is no notion of "success" for this test, other than
3f34af54bcab917eb5943d1918f32d26364f45578Jason Monk// verifying the correct C++ bindings were reached with expected values.
4f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
5f34af54bcab917eb5943d1918f32d26364f45578Jason Monkfunction MyObject() {
6f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  this.x = "3";
7f34af54bcab917eb5943d1918f32d26364f45578Jason Monk}
8f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
9f34af54bcab917eb5943d1918f32d26364f45578Jason MonkMyObject.prototype.toString = function() {
10f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  throw "exception from calling toString()";
11f34af54bcab917eb5943d1918f32d26364f45578Jason Monk}
12f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
13f34af54bcab917eb5943d1918f32d26364f45578Jason Monkfunction expectEquals(expectation, actual) {
14f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  if (!(expectation === actual)) {
15f34af54bcab917eb5943d1918f32d26364f45578Jason Monk    throw "FAIL: expected: " + expectation + ", actual: " + actual;
16f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  }
17f34af54bcab917eb5943d1918f32d26364f45578Jason Monk}
18f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
19f34af54bcab917eb5943d1918f32d26364f45578Jason Monkfunction FindProxyForURL(url, host) {
20f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // Call dnsResolve with some wonky arguments.
21f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // Those expected to fail (because we have passed a non-string parameter)
22f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // will return |null|, whereas those that have called through to the C++
23f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // bindings will return '127.0.0.1'.
24f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals(null, dnsResolve());
25f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals(null, dnsResolve(null));
26f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals(null, dnsResolve(undefined));
27f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals('127.0.0.1', dnsResolve(""));
28f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals(null, dnsResolve({foo: 'bar'}));
29f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals(null, dnsResolve(fn));
30f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals(null, dnsResolve(['3']));
31f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  expectEquals('127.0.0.1', dnsResolve("arg1", "arg2", "arg3", "arg4"));
32f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
33f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // Call alert with some wonky arguments.
34f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  alert();
35f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  alert(null);
36f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  alert(undefined);
37f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  alert({foo:'bar'});
38f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
39f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // This should throw an exception when we toString() the argument
40f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // to alert in the bindings.
41f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  try {
42f34af54bcab917eb5943d1918f32d26364f45578Jason Monk    alert(new MyObject());
43f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  } catch (e) {
44f34af54bcab917eb5943d1918f32d26364f45578Jason Monk    alert(e);
45f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  }
46f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
47f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // Call myIpAddress() with wonky arguments
48f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  myIpAddress(null);
49f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  myIpAddress(null, null);
50f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
51f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // Call myIpAddressEx() correctly (no arguments).
52f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  myIpAddressEx();
53f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
54f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  // Call dnsResolveEx() (note that isResolvableEx() implicity calls it.)
55f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  isResolvableEx("is_resolvable");
56f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  dnsResolveEx("foobar");
57f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
58f34af54bcab917eb5943d1918f32d26364f45578Jason Monk  return "DIRECT";
59f34af54bcab917eb5943d1918f32d26364f45578Jason Monk}
60f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
61f34af54bcab917eb5943d1918f32d26364f45578Jason Monkfunction fn() {}
62f34af54bcab917eb5943d1918f32d26364f45578Jason Monk
63