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