| (function() { |
| //inheritance tests |
| test(function() { |
| var event = new DeviceProximityEvent(''); |
| assert_true(event instanceof window.DeviceProximityEvent); |
| }, 'the event is an instance of DeviceProximityEvent'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(''); |
| assert_true(event instanceof window.Event); |
| }, 'the event inherits from Event'); |
| |
| //Type attribute tests |
| test(function() { |
| assert_throws(new TypeError(), function() { |
| new DeviceProximityEvent(); |
| }, 'First argument is required, so was expecting a TypeError.'); |
| }, 'Missing type argument'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(undefined); |
| assert_equals(event.type, 'undefined'); |
| }, 'Event type set to undefined'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(null); |
| assert_equals(event.type, 'null'); |
| }, 'type argument is null'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(123); |
| assert_equals(event.type, '123'); |
| }, 'type argument is number'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(new Number(123)); |
| assert_equals(event.type, '123'); |
| }, 'type argument is Number'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent([]); |
| assert_equals(event.type, ''); |
| }, 'type argument is array'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(new Array()); |
| assert_equals(event.type, ''); |
| }, 'type argument is instance of Array'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(['t', ['e', ['s', ['t']]]]); |
| assert_equals(event.type, 't,e,s,t'); |
| }, 'type argument is nested array'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(Math); |
| assert_equals(event.type, '[object Math]'); |
| }, 'type argument is host object'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(true); |
| assert_equals(event.type, 'true'); |
| }, 'type argument is boolean (true)'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(new Boolean(true)); |
| assert_equals(event.type, 'true'); |
| }, 'type argument is instance of Boolean (true)'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(false); |
| assert_equals(event.type, 'false'); |
| }, 'type argument is boolean (false)'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(new Boolean(false)); |
| assert_equals(event.type, 'false'); |
| }, 'type argument is instance of Boolean (false)'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_equals(event.type, 'test'); |
| }, 'type argument is string'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(new String('test')); |
| assert_equals(event.type, 'test'); |
| }, 'type argument is instance of String'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent(function test() {}); |
| assert_regexp_match(event.type, /function test.+{\s?}/); |
| }, 'type argument is function'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent({ |
| 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 DeviceProximityEvent({ |
| toString: function() { |
| return function() {} |
| } |
| }); |
| }); |
| }, 'toString is of type function'); |
| |
| //eventInitDict attribute tests |
| test(function() { |
| var event = new DeviceProximityEvent('test', undefined); |
| assert_equals(event.value, Infinity); |
| assert_equals(event.min, -Infinity); |
| assert_equals(event.max, Infinity); |
| }, 'eventInitDict argument sets to undefined'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', null); |
| assert_equals(event.value, Infinity); |
| assert_equals(event.min, -Infinity); |
| assert_equals(event.max, Infinity); |
| }, 'eventInitDict argument is null'); |
| |
| test(function() { |
| var date = new Date(); |
| assert_throws(new TypeError(), function() { |
| new DeviceProximityEvent('test', date); |
| }); |
| }, 'eventInitDict argument is Date object'); |
| |
| test(function() { |
| var regexp = /abc/; |
| assert_throws(new TypeError(), function() { |
| new DeviceProximityEvent('test', regexp); |
| }); |
| }, 'eventInitDict argument is RegExp object'); |
| |
| test(function() { |
| assert_throws(new TypeError(), function() { |
| new DeviceProximityEvent('test', false); |
| }); |
| }, 'eventInitDict argument is boolean'); |
| |
| test(function() { |
| assert_throws(new TypeError(), function() { |
| new DeviceProximityEvent('test', 123); |
| }); |
| }, 'eventInitDict argument is number'); |
| |
| test(function() { |
| assert_throws(new TypeError(), function() { |
| new DeviceProximityEvent('test', 'hello'); |
| }); |
| }, 'eventInitDict argument is string'); |
| |
| //test readonly attribute unrestricted double value; |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_idl_attribute(event, 'value', 'must have attribute value'); |
| }, 'value attribute exist'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_readonly(event, 'value', 'readonly attribute value'); |
| }, 'value attribute is readonly'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_equals(event.value, Infinity); |
| }, 'value initializes to positive Infinity'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: Infinity |
| }); |
| assert_equals(event.value, Infinity); |
| }, 'value set to positive Infinity'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: -Infinity |
| }); |
| assert_equals(event.value, -Infinity); |
| }, 'value set to negative Infinity'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: 0 |
| }); |
| assert_equals(event.value, 0); |
| }, 'value set to 0'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: 1 |
| }); |
| assert_equals(event.value, 1); |
| }, 'value set to 1'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: 0.5 |
| }); |
| assert_equals(event.value, 0.5); |
| }, 'value set to 0.5'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: false |
| }); |
| assert_equals(event.value, 0, 'value set to false, converts to 0.'); |
| }, 'value set to false'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: true |
| }); |
| assert_equals(event.value, 1, 'value set to true, converts to 1.'); |
| }, 'value set to true'); |
| |
| |
| test(function() { |
| var prop = { |
| value: undefined |
| }; |
| try { |
| var event = new DeviceProximityEvent('test', prop); |
| assert_true(isNaN(event.value)); |
| } catch(e) { |
| assert_unreached('error message: ' + e.message); |
| } |
| }, 'value of undefined resolves to NaN'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: null |
| }); |
| assert_equals(event.value, 0, 'value resolves to 0'); |
| }, 'value of null resolves to 0'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: '' |
| }); |
| assert_equals(event.value, 0, 'value must resolve to 0'); |
| }, 'value of empty string must resolve to 0'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: '\u0020' |
| }); |
| assert_equals(event.value, 0, 'value must resolve to 0'); |
| }, 'value of U+0020 must resolve to 0'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: '\u0020\u0020\u0020\u0020\u0020\u0020' |
| }); |
| assert_equals(event.value, 0, 'value must resolve to 0'); |
| }, 'value of multiple U+0020 must resolve to 0'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: '\u0020\u0020\u00201234\u0020\u0020\u0020' |
| }); |
| assert_equals(event.value, 1234, 'converts to 1234'); |
| }, 'value converts to 1234'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test', { |
| value: [] |
| }); |
| assert_equals(event.value, 0, 'converts to 0'); |
| }, 'value converts to 0'); |
| |
| |
| test(function() { |
| var prop = { |
| value: {} |
| }; |
| try { |
| var event = new DeviceProximityEvent('test', prop); |
| assert_true(isNaN(event.value)); |
| } catch(e) { |
| assert_unreached('error message: ' + e.message); |
| } |
| }, 'value of {} resolves to NaN'); |
| |
| test(function() { |
| var prop = { |
| get value() { |
| return NaN; |
| } |
| }; |
| try { |
| var event = new DeviceProximityEvent('test', prop); |
| assert_true(isNaN(event.value)); |
| } catch(e) { |
| assert_unreached('error message: ' + e.message); |
| } |
| }, 'value resolves to NaN'); |
| |
| test(function() { |
| var prop = { |
| get value() { |
| return '123'; |
| } |
| }; |
| var event = new DeviceProximityEvent('test', prop); |
| assert_equals(event.value, 123, 'converts to 123'); |
| }, 'value resolves 123'); |
| |
| //test readonly attribute unrestricted double min |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_idl_attribute(event, 'min', 'must have attribute min'); |
| }, 'min attribute exist'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_readonly(event, 'min', 'readonly attribute min'); |
| }, 'min attribute is readonly'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_equals(event.min, -Infinity); |
| }, 'min initializes to negative Infinity'); |
| |
| //test readonly attribute unrestricted double max; |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_idl_attribute(event, 'max', 'must have attribute max'); |
| }, 'max attribute exist'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_readonly(event, 'max', 'readonly attribute max'); |
| }, 'max attribute is readonly'); |
| |
| test(function() { |
| var event = new DeviceProximityEvent('test'); |
| assert_equals(event.max, Infinity); |
| }, 'max initializes to positive Infinity'); |
| |
| //test attribute EventHandler ondeviceproximity; |
| test(function() { |
| var desc = 'Expected to find ondeviceproximity attribute on window object'; |
| assert_idl_attribute(window, 'ondeviceproximity', desc); |
| }, 'ondeviceproximity exists'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity must be null'; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'ondeviceproximity is null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not accept callable object', |
| func = function() {}, |
| descidl = 'Expected to find ondeviceproximity attribute on window object'; |
| assert_idl_attribute(window, 'ondeviceproximity', descidl); |
| window.ondeviceproximity = func; |
| assert_equals(window.ondeviceproximity, func, desc); |
| }, 'ondeviceproximity is set to function'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = {}; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat object as null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = { |
| call: 'test' |
| }; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat object with non-callable call property as null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable (string) as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = 'string'; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat string as null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable (number) as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = 123; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat number as null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable (undefined) as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = undefined; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat undefined as null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable (array) as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = []; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat array as null'); |
| |
| test(function() { |
| var desc = 'window.ondeviceproximity did not treat noncallable host object as null'; |
| window.ondeviceproximity = function() {}; |
| window.ondeviceproximity = Node; |
| assert_equals(window.ondeviceproximity, null, desc); |
| }, 'treat non-callable host object as null'); |
| |
| //Async tests |
| var t = async_test('test if device proximity event received'); |
| window.addEventListener('deviceproximity', function(e) { |
| t.step(function() { |
| var msg = 'expected instance of DeviceProximityEvent: '; |
| assert_true(e instanceof window.DeviceProximityEvent, msg); |
| }); |
| t.done(); |
| }); |
| |
| var t2 = async_test('test if user proximity event received'); |
| window.ondeviceproximity = function(e) { |
| t2.step(function() { |
| var msg = 'expected instance of DeviceProximityEvent: '; |
| assert_true(e instanceof window.DeviceProximityEvent, msg); |
| }); |
| t2.done(); |
| }; |
| })(); |