mirror of
https://github.com/Tonejs/Tone.js
synced 2024-12-29 04:53:10 +00:00
ed71d8141b
no longer using AMD (require.js) style imports, and beginning to move to es6 "import/export" statements everywhere.
165 lines
4 KiB
JavaScript
165 lines
4 KiB
JavaScript
import BasicTests from "helper/Basic";
|
|
import UserMedia from "Tone/source/UserMedia";
|
|
import Test from "helper/Test";
|
|
import Source from "Tone/source/Source";
|
|
import Supports from "helper/Supports";
|
|
|
|
describe("UserMedia", function(){
|
|
|
|
//run the common tests
|
|
BasicTests(UserMedia);
|
|
|
|
context("Source Tests", function(){
|
|
|
|
it("can connect the output", function(){
|
|
var extIn = new UserMedia();
|
|
extIn.connect(Test);
|
|
extIn.dispose();
|
|
});
|
|
|
|
it("can be constructed with the input number", function(){
|
|
var extIn = new UserMedia();
|
|
extIn.dispose();
|
|
});
|
|
|
|
it("can be constructed with an options object", function(){
|
|
var extIn = new UserMedia({
|
|
"volume" : -10,
|
|
"mute" : false
|
|
});
|
|
expect(extIn.volume.value).to.be.closeTo(-10, 0.1);
|
|
expect(extIn.mute).to.be.false;
|
|
extIn.dispose();
|
|
});
|
|
|
|
it("indicates if the browser has UserMedia support", function(){
|
|
expect(UserMedia.supported).to.be.a.boolean;
|
|
});
|
|
|
|
});
|
|
|
|
//if it is a manual test (i.e. there is a person to 'allow' the microphone)
|
|
if (Supports.GET_USER_MEDIA && UserMedia.supported){
|
|
|
|
context("Opening and closing", function(){
|
|
|
|
//long timeout to give testers time to allow the microphone
|
|
this.timeout(100000);
|
|
|
|
var HAS_USER_MEDIA_INPUTS = false;
|
|
|
|
before(function(){
|
|
return UserMedia.enumerateDevices().then(function(devices){
|
|
HAS_USER_MEDIA_INPUTS = devices.length > 0;
|
|
});
|
|
});
|
|
|
|
it("open returns a promise", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
var promise = extIn.open();
|
|
expect(promise).to.have.property("then");
|
|
return promise.then(function(){
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("can open an input", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
return extIn.open().then(function(){
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("can open an input by name", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
var name = null;
|
|
return UserMedia.enumerateDevices().then(function(devices){
|
|
name = devices[0].deviceId;
|
|
return extIn.open(name);
|
|
}).then(function(){
|
|
expect(extIn.deviceId).to.equal(name);
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("can open an input by index", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
return extIn.open(0).then(function(){
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("throws an error if it cant find the device name", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
return extIn.open("doesn't exist").then(function(){
|
|
//shouldn't call 'then'
|
|
throw new Error("shouldnt call 'then'");
|
|
}).catch(function(){
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("is 'started' after media is open and 'stopped' otherwise", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
expect(extIn.state).to.equal("stopped");
|
|
return extIn.open().then(function(){
|
|
expect(extIn.state).to.equal("started");
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("has a label, group and device id when open", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
return extIn.open().then(function(){
|
|
expect(extIn.deviceId).to.be.a("string");
|
|
expect(extIn.groupId).to.be.a("string");
|
|
expect(extIn.label).to.be.a("string");
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("can reopen an input", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
return extIn.open().then(function(){
|
|
return extIn.open();
|
|
}).then(function(){
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("can close an input", function(){
|
|
if (HAS_USER_MEDIA_INPUTS){
|
|
var extIn = new UserMedia();
|
|
return extIn.open().then(function(){
|
|
extIn.close();
|
|
extIn.dispose();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("can enumerate devices", function(){
|
|
return UserMedia.enumerateDevices().then(function(devices){
|
|
expect(devices).to.be.instanceOf(Array);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
});
|
|
|