blob: af89cb45c3f715bda6eeffa69f2fcc181c745cd3 [file] [log] [blame]
(function() {
//inheritance tests
test(function() {
var event = new DeviceLightEvent('');
assert_true(event instanceof window.DeviceLightEvent);
}, 'the event is an instance of DeviceLightEvent');
test(function() {
var event = new DeviceLightEvent('');
assert_true(event instanceof window.Event);
}, 'the event inherits from Event');
//Type attribute tests
test(function() {
assert_throws(new TypeError(), function() {
new DeviceLightEvent();
}, 'First argument is required, so was expecting a TypeError.');
}, 'Missing type argument');
test(function() {
var event = new DeviceLightEvent(undefined);
assert_equals(event.type, 'undefined');
}, 'Event type set to undefined');
test(function() {
var event = new DeviceLightEvent(null);
assert_equals(event.type, 'null');
}, 'type argument is null');
test(function() {
var event = new DeviceLightEvent(123);
assert_equals(event.type, '123');
}, 'type argument is number');
test(function() {
var event = new DeviceLightEvent(new Number(123));
assert_equals(event.type, '123');
}, 'type argument is Number');
test(function() {
var event = new DeviceLightEvent([]);
assert_equals(event.type, '');
}, 'type argument is array');
test(function() {
var event = new DeviceLightEvent(new Array());
assert_equals(event.type, '');
}, 'type argument is instance of Array');
test(function() {
var event = new DeviceLightEvent(['t', ['e', ['s', ['t']]]]);
assert_equals(event.type, 't,e,s,t');
}, 'type argument is nested array');
test(function() {
var event = new DeviceLightEvent(Math);
assert_equals(event.type, '[object Math]');
}, 'type argument is host object');
test(function() {
var event = new DeviceLightEvent(true);
assert_equals(event.type, 'true');
}, 'type argument is boolean (true)');
test(function() {
var event = new DeviceLightEvent(new Boolean(true));
assert_equals(event.type, 'true');
}, 'type argument is instance of Boolean (true)');
test(function() {
var event = new DeviceLightEvent(false);
assert_equals(event.type, 'false');
}, 'type argument is boolean (false)');
test(function() {
var event = new DeviceLightEvent(new Boolean(false));
assert_equals(event.type, 'false');
}, 'type argument is instance of Boolean (false)');
test(function() {
var event = new DeviceLightEvent('test');
assert_equals(event.type, 'test');
}, 'type argument is string');
test(function() {
var event = new DeviceLightEvent(new String('test'));
assert_equals(event.type, 'test');
}, 'type argument is instance of String');
test(function() {
var event = new DeviceLightEvent(function test() {});
assert_regexp_match(event.type, /function test.+{\s?}/);
}, 'type argument is function');
test(function() {
var event = new DeviceLightEvent({
toString: function() {
return '123';
}
});
assert_equals(event.type, '123');
}, 'type argument is complex object, with toString method');
test(function() {
assert_throws(new TypeError(), function() {
new DeviceLightEvent({
toString: function() {
return function() {}
}
});
});
}, 'toString is of type function');
//eventInitDict attribute tests
test(function() {
var event = new DeviceLightEvent('test', undefined);
assert_equals(event.value, Infinity);
}, 'eventInitDict argument sets to undefined');
test(function() {
var event = new DeviceLightEvent('test', null);
assert_equals(event.value, Infinity);
}, 'eventInitDict argument is null');
test(function() {
var date = new Date();
assert_throws(new TypeError(), function() {
new DeviceLightEvent('test', date);
});
}, 'eventInitDict argument is Date object');
test(function() {
var regexp = /abc/;
assert_throws(new TypeError(), function() {
new DeviceLightEvent('test', regexp);
});
}, 'eventInitDict argument is RegExp object');
test(function() {
assert_throws(new TypeError(), function() {
new DeviceLightEvent('test', false);
});
}, 'eventInitDict argument is boolean');
test(function() {
assert_throws(new TypeError(), function() {
new DeviceLightEvent('test', 123);
});
}, 'eventInitDict argument is number');
test(function() {
assert_throws(new TypeError(), function() {
new DeviceLightEvent('test', 'hello');
});
}, 'eventInitDict argument is string');
//test readonly attribute double value;
test(function() {
var event = new DeviceLightEvent('test');
assert_readonly(event, 'value', 'readonly attribute value');
}, 'value is readonly');
test(function() {
var event = new DeviceLightEvent('test');
assert_equals(event.value, Infinity);
}, 'value initializes to positive Infinity');
test(function() {
var event = new DeviceLightEvent('test', {
value: Infinity
});
assert_equals(event.value, Infinity);
}, 'value set to positive Infinity');
test(function() {
var event = new DeviceLightEvent('test', {
value: -Infinity
});
assert_equals(event.value, -Infinity);
}, 'value set to negative Infinity');
test(function() {
var event = new DeviceLightEvent('test', {
value: 0
});
assert_equals(event.value, 0);
}, 'value set to 0');
test(function() {
var event = new DeviceLightEvent('test', {
value: 1
});
assert_equals(event.value, 1);
}, 'value set to 1');
test(function() {
var event = new DeviceLightEvent('test', {
value: -1
});
assert_equals(event.value, -1);
}, 'value set to -1');
test(function() {
var event = new DeviceLightEvent('test', {
value: 0.5
});
assert_equals(event.value, 0.5);
}, 'value set to 0.5');
test(function() {
var event = new DeviceLightEvent('test', {
value: false
});
assert_equals(event.value, 0, 'value set to false, converts to 0.');
}, 'value set to false');
test(function() {
var event = new DeviceLightEvent('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 DeviceLightEvent('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 DeviceLightEvent('test', {
value: null
});
assert_equals(event.value, 0, 'value resolves to 0');
}, 'value of null resolves to 0');
test(function() {
var event = new DeviceLightEvent('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 DeviceLightEvent('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 DeviceLightEvent('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 DeviceLightEvent('test', {
value: '\u0020\u0020\u00201234\u0020\u0020\u0020'
});
assert_equals(event.value, 1234, 'converts to 1234');
}, 'converts to 1234');
test(function() {
var event = new DeviceLightEvent('test', {
value: []
});
assert_equals(event.value, 0, 'converts to 0');
}, 'converts to 0');
test(function() {
var prop = {
value: {}
};
try {
var event = new DeviceLightEvent('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 DeviceLightEvent('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 DeviceLightEvent('test', prop);
assert_equals(event.value, 123, 'converts to 123');
}, 'value resolves 123');
//test attribute EventHandler ondevicelight;
test(function() {
var desc = 'window.ondevicelight did not accept callable object',
descidl = 'Expected to find ondevicelight attribute on window object',
func = function() {};
assert_idl_attribute(window, 'ondevicelight', descidl);
window.ondevicelight = func;
assert_equals(window.ondevicelight, func, desc);
}, 'expected ondevicelight on window and to be set to function');
test(function() {
var desc = 'window.ondevicelight must be null';
assert_equals(window.ondevicelight, null, desc);
}, 'ondevicelight is null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable as null';
window.ondevicelight = function() {};
window.ondevicelight = {};
assert_equals(window.ondevicelight, null, desc);
}, 'treat object as null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable as null';
window.ondevicelight = function() {};
window.ondevicelight = {
call: 'test'
};
assert_equals(window.ondevicelight, null, desc);
}, 'treat object with non-callable call property as null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable (string) as null';
window.ondevicelight = function() {};
window.ondevicelight = 'string';
assert_equals(window.ondevicelight, null, desc);
}, 'treat string as null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable (number) as null';
window.ondevicelight = function() {};
window.ondevicelight = 123;
assert_equals(window.ondevicelight, null, desc);
}, 'treat number as null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable (undefined) as null';
window.ondevicelight = function() {};
window.ondevicelight = undefined;
assert_equals(window.ondevicelight, null, desc);
}, 'treat undefined as null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable (array) as null';
window.ondevicelight = function() {};
window.ondevicelight = [];
assert_equals(window.ondevicelight, null, desc);
}, 'treat array as null');
test(function() {
var desc = 'window.ondevicelight did not treat noncallable host object as null';
window.ondevicelight = function() {};
window.ondevicelight = window.Node;
assert_equals(window.ondevicelight, null, desc);
}, 'treat non-callable host object as null');
//Async tests
var t = async_test('test if DeviceLightEvent received');
window.addEventListener('devicelight', function(e) {
t.step(function() {
var msg = 'expected instance of DeviceLightEvent: ';
assert_true(e instanceof window.DeviceLightEvent, msg);
assert_idl_attribute(e, 'value', 'event has value property');
});
t.done();
});
var t2 = async_test('test if DeviceLightEvent received (event handler attribute)');
window.ondevicelight = function(e) {
t2.step(function() {
var msg = 'expected instance of DeviceLightEvent: ';
assert_true(e instanceof window.DeviceLightEvent, msg);
assert_idl_attribute(e, 'value', 'event has value property');
});
t2.done();
};
})();