|  | (function() { | 
|  | //inheritance tests | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(''); | 
|  | assert_true(event instanceof window.UserProximityEvent); | 
|  | }, 'the event is an instance of UserProximityEvent'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(''); | 
|  | assert_true(event instanceof window.Event); | 
|  | }, 'the event inherits from Event'); | 
|  |  | 
|  | //Type attribute tests | 
|  | test(function() { | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent(); | 
|  | }, 'First argument is required, so was expecting a TypeError.'); | 
|  | }, 'Missing type argument'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(undefined); | 
|  | assert_equals(event.type, 'undefined'); | 
|  | }, 'Event type set to undefined'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(null); | 
|  | assert_equals(event.type, 'null'); | 
|  | }, 'type argument is null'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(123); | 
|  | assert_equals(event.type, '123'); | 
|  | }, 'type argument is number'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(new Number(123)); | 
|  | assert_equals(event.type, '123'); | 
|  | }, 'type argument is Number'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent([]); | 
|  | assert_equals(event.type, ''); | 
|  | }, 'type argument is array'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(new Array()); | 
|  | assert_equals(event.type, ''); | 
|  | }, 'type argument is instance of Array'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(['t', ['e', ['s', ['t']]]]); | 
|  | assert_equals(event.type, 't,e,s,t'); | 
|  | }, 'type argument is nested array'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(Math); | 
|  | assert_equals(event.type, '[object Math]'); | 
|  | }, 'type argument is host object'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(true); | 
|  | assert_equals(event.type, 'true'); | 
|  | }, 'type argument is boolean (true)'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(new Boolean(true)); | 
|  | assert_equals(event.type, 'true'); | 
|  | }, 'type argument is instance of Boolean (true)'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(false); | 
|  | assert_equals(event.type, 'false'); | 
|  | }, 'type argument is boolean (false)'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(new Boolean(false)); | 
|  | assert_equals(event.type, 'false'); | 
|  | }, 'type argument is instance of Boolean (false)'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test'); | 
|  | assert_equals(event.type, 'test'); | 
|  | }, 'type argument is string'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(new String('test')); | 
|  | assert_equals(event.type, 'test'); | 
|  | }, 'type argument is instance of String'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent(function test() {}); | 
|  | assert_regexp_match(event.type, /function test.+{\s?}/); | 
|  | }, 'type argument is function'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent({ | 
|  | toString: function() { | 
|  | return '123'; | 
|  | } | 
|  | }); | 
|  | assert_equals(event.type, '123'); | 
|  | }, 'type argument is complext object, with toString method'); | 
|  |  | 
|  | test(function() { | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent({ | 
|  | toString: function() { | 
|  | return function() {} | 
|  | } | 
|  | }); | 
|  | }); | 
|  | }, 'toString is of type function'); | 
|  |  | 
|  | //eventInitDict attribute tests | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', undefined); | 
|  | assert_false(event.near); | 
|  | }, 'eventInitDict argument sets to undefined'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', null); | 
|  | assert_false(event.near); | 
|  | }, 'eventInitDict argument is null'); | 
|  |  | 
|  | test(function() { | 
|  | var date = new Date(); | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent('test', date); | 
|  | }); | 
|  | }, 'eventInitDict argument is Date object'); | 
|  |  | 
|  | test(function() { | 
|  | var regexp = /abc/; | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent('test', regexp); | 
|  | }); | 
|  | }, 'eventInitDict argument is RegExp object'); | 
|  |  | 
|  | test(function() { | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent('test', false); | 
|  | }); | 
|  | }, 'eventInitDict argument is boolean'); | 
|  |  | 
|  | test(function() { | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent('test', 123); | 
|  | }); | 
|  | }, 'eventInitDict argument is number'); | 
|  |  | 
|  | test(function() { | 
|  | assert_throws(new TypeError(), function() { | 
|  | new UserProximityEvent('test', 'hello'); | 
|  | }); | 
|  | }, 'eventInitDict argument is string'); | 
|  |  | 
|  | //test readonly attribute boolean near; | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test'); | 
|  | assert_idl_attribute(event, 'near', 'must have attribute near'); | 
|  | }, 'must have attribute near'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test'); | 
|  | assert_readonly(event, 'near', 'readonly attribute near'); | 
|  | }, 'near is readonly'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test'); | 
|  | assert_false(event.near, 'near initializes to false'); | 
|  | }, 'near initializes to false'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: false | 
|  | }); | 
|  | assert_false(event.near, 'near set to false'); | 
|  | }, 'near set to false'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: true | 
|  | }); | 
|  | assert_true(event.near, 'near set to true'); | 
|  | }, 'near set to true'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: undefined | 
|  | }); | 
|  | assert_false(event.near, 'argument is truthy'); | 
|  | }, 'near set to undefined'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: null | 
|  | }); | 
|  | assert_false(event.near, 'argument is flasy'); | 
|  | }, 'near set to null'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: 0 | 
|  | }); | 
|  | assert_false(event.near, 'argument is flasy'); | 
|  | }, 'near set to 0'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: '' | 
|  | }); | 
|  | assert_false(event.near, 'argument is flasy'); | 
|  | }, 'near set to empty string'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: '\u0020' | 
|  | }); | 
|  | assert_true(event.near, 'argument is truthy'); | 
|  | }, 'near set to U+0020'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: 1 | 
|  | }); | 
|  | assert_true(event.near, 'argument is truthy'); | 
|  | }, 'near set to 1'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: [] | 
|  | }); | 
|  | assert_true(event.near, 'argument is truthy'); | 
|  | }, 'near set to []'); | 
|  |  | 
|  | test(function() { | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: {} | 
|  | }); | 
|  | assert_true(event.near, 'argument is truthy'); | 
|  | }, 'near set to {}'); | 
|  |  | 
|  | test(function() { | 
|  | var dict = { | 
|  | get test() { | 
|  | return false; | 
|  | } | 
|  | }; | 
|  | var event = new UserProximityEvent('test', { | 
|  | near: dict.test | 
|  | }); | 
|  | assert_false(event.near, 'explict false'); | 
|  | }, 'near set to object that resolves to false'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'Expected to find onuserproximity attribute on window object'; | 
|  | assert_idl_attribute(window, 'onuserproximity', desc); | 
|  | }, 'onuserproximity exists'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity must be null'; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'onuserproximity is null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not accept callable object', | 
|  | func = function() {}, | 
|  | descidl = 'onuserproximity does not exist'; | 
|  | window.onuserproximity = func; | 
|  | assert_equals(window.onuserproximity, func, descidl); | 
|  | }, 'onuserproximity exists and can be set to a function'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = {}; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat object as null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = { | 
|  | call: 'test' | 
|  | }; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat object with non-callable call property as null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable (string) as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = 'string'; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat string as null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable (number) as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = 123; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat number as null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable (undefined) as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = undefined; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat undefined as null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable (array) as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = []; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat array as null'); | 
|  |  | 
|  | test(function() { | 
|  | var desc = 'window.onuserproximity did not treat noncallable host object as null'; | 
|  | window.onuserproximity = function() {}; | 
|  | window.onuserproximity = Node; | 
|  | assert_equals(window.onuserproximity, null, desc); | 
|  | }, 'treat non-callable host object as null'); | 
|  |  | 
|  | //Async tests | 
|  | var t = async_test('test if user proximity event received'); | 
|  | window.addEventListener('userproximity', function(e) { | 
|  | t.step(function() { | 
|  | var msg = 'expected instance of UserProximityEvent: '; | 
|  | assert_true(e instanceof window.UserProximityEvent, msg); | 
|  | }); | 
|  | t.done(); | 
|  | }); | 
|  |  | 
|  | var t2 = async_test('test if user proximity event received (idl attribute)'); | 
|  | window.onuserproximity = function(e) { | 
|  | t2.step(function() { | 
|  | var msg = 'expected instance of UserProximityEvent: '; | 
|  | assert_true(e instanceof window.UserProximityEvent, msg); | 
|  | }); | 
|  | t2.done(); | 
|  | }; | 
|  | })(); |