Tests the acceptable types for arguments to navigator.getUserMedia methods.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS navigator.getUserMedia() threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(undefined) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(null) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({ }) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(true) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(42) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(Infinity) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(-Infinity) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(undefined, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(null, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({ }, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(true, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(42, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(Infinity, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(-Infinity, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia(emptyFunction, emptyFunction) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, "foobar") threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, undefined) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, null) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, {}) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, true) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, 42) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, Infinity) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({video: true}, -Infinity) threw exception TypeError: Not enough arguments.
PASS navigator.getUserMedia({ }, emptyFunction, emptyFunction) did not throw exception.
PASS navigator.getUserMedia({video: true}, emptyFunction, emptyFunction) did not throw exception.
PASS navigator.getUserMedia({video: true}, emptyFunction, undefined) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({audio:true, video:true}, emptyFunction, undefined) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({audio:true}, emptyFunction, undefined) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, "video") threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, null) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, {}) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, true) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, 42) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, Infinity) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS navigator.getUserMedia({video: true}, emptyFunction, -Infinity) threw exception TypeError: Argument 3 ('errorCallback') to Navigator.getUserMedia must be a function.
PASS successfullyParsed is true

TEST COMPLETE

