mirror of
https://github.com/serratus/quaggaJS.git
synced 2026-08-12 21:21:42 +08:00
#47: Passing camera related errors to the init callback
This commit is contained in:
+69
-23
@@ -1,17 +1,15 @@
|
||||
define(['camera_access'], function(CameraAccess){
|
||||
var originalURL,
|
||||
originalUserMedia,
|
||||
originalMediaStreamTrack,
|
||||
video,
|
||||
stream;
|
||||
|
||||
|
||||
beforeEach(function() {
|
||||
var tracks = [{
|
||||
stop: function() {}
|
||||
}];
|
||||
|
||||
originalURL = window.URL;
|
||||
originalUserMedia = window.getUserMedia;
|
||||
originalMediaStreamTrack = window.MediaStreamTrack;
|
||||
window.MediaStreamTrack = {};
|
||||
window.URL = null;
|
||||
@@ -23,10 +21,7 @@ define(['camera_access'], function(CameraAccess){
|
||||
}
|
||||
};
|
||||
sinon.spy(tracks[0], "stop");
|
||||
navigator.getUserMedia = function(constraints, cb) {
|
||||
cb(stream);
|
||||
};
|
||||
sinon.spy(navigator, "getUserMedia");
|
||||
|
||||
video = {
|
||||
src: null,
|
||||
addEventListener: function() {
|
||||
@@ -48,29 +43,80 @@ define(['camera_access'], function(CameraAccess){
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
navigator.getUserMedia = originalUserMedia;
|
||||
window.URL = originalURL;
|
||||
window.MediaStreamTrack = originalMediaStreamTrack;
|
||||
});
|
||||
|
||||
describe('request', function() {
|
||||
it('should request the camera', function(done) {
|
||||
CameraAccess.request(video, {}, function() {
|
||||
expect(navigator.getUserMedia.calledOnce).to.equal(true);
|
||||
expect(video.src).to.deep.equal(stream);
|
||||
done();
|
||||
describe('success', function() {
|
||||
beforeEach(function() {
|
||||
sinon.stub(navigator, "getUserMedia", function(constraints, success) {
|
||||
success(stream);
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
navigator.getUserMedia.restore();
|
||||
});
|
||||
describe('request', function () {
|
||||
it('should request the camera', function (done) {
|
||||
CameraAccess.request(video, {}, function () {
|
||||
expect(navigator.getUserMedia.calledOnce).to.equal(true);
|
||||
expect(video.src).to.deep.equal(stream);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('release', function () {
|
||||
it('should release the camera', function (done) {
|
||||
CameraAccess.request(video, {}, function () {
|
||||
expect(video.src).to.deep.equal(stream);
|
||||
CameraAccess.release();
|
||||
expect(video.src.getVideoTracks()).to.have.length(1);
|
||||
expect(video.src.getVideoTracks()[0].stop.calledOnce).to.equal(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('release', function() {
|
||||
it('should release the camera', function(done) {
|
||||
CameraAccess.request(video, {}, function() {
|
||||
expect(video.src).to.deep.equal(stream);
|
||||
CameraAccess.release();
|
||||
expect(video.src.getVideoTracks()).to.have.length(1);
|
||||
expect(video.src.getVideoTracks()[0].stop.calledOnce).to.equal(true);
|
||||
done();
|
||||
|
||||
describe('failure', function() {
|
||||
describe("permission denied", function(){
|
||||
before(function() {
|
||||
sinon.stub(navigator, "getUserMedia", function(constraints, success, failure) {
|
||||
failure(new Error());
|
||||
});
|
||||
});
|
||||
|
||||
after(function() {
|
||||
navigator.getUserMedia.restore();
|
||||
});
|
||||
|
||||
it('should throw if getUserMedia not available', function(done) {
|
||||
CameraAccess.request(video, {}, function(err) {
|
||||
expect(err).to.be.defined;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("not available", function(){
|
||||
var originalGetUserMedia;
|
||||
|
||||
before(function() {
|
||||
originalGetUserMedia = navigator.getUserMedia;
|
||||
navigator.getUserMedia = undefined;
|
||||
});
|
||||
|
||||
after(function() {
|
||||
navigator.getUserMedia = originalGetUserMedia;
|
||||
});
|
||||
|
||||
it('should throw if getUserMedia not available', function(done) {
|
||||
CameraAccess.request(video, {}, function(err) {
|
||||
expect(err).to.be.defined;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user