You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
quaggaJS/spec/camera_access.spec.js

75 lines
2.1 KiB
JavaScript

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;
stream = {
getVideoTracks: function() {
return tracks;
}
};
sinon.spy(tracks[0], "stop");
navigator.getUserMedia = function(constraints, cb) {
cb(stream);
};
sinon.spy(navigator, "getUserMedia");
video = {
src: null,
addEventListener: function() {
},
play: function() {
},
videoWidth: 320,
videoHeight: 480
};
sinon.stub(video, "addEventListener", function(event, cb) {
cb();
});
sinon.stub(video, "play");
});
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('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();
});
});
});
});