define(["Tone/component/LFO", "helper/Basic", "helper/Offline", "Test", "helper/OutputAudio"], function (LFO, Basic, Offline, Test, OutputAudio) { describe("LFO", function(){ Basic(LFO); context("Low Oscillations", function(){ it("handles output connections", function(){ var lfo = new LFO(); lfo.connect(Test); lfo.dispose(); }); it("can be started and stopped", function(){ var lfo = new LFO(); lfo.start(); lfo.stop(); lfo.dispose(); }); it("can be constructed with an object", function(){ var lfo = new LFO({ "type" : "triangle2", "frequency" : 0.3 }); expect(lfo.type).to.equal("triangle2"); expect(lfo.frequency.value).to.be.closeTo(0.3, 0.001); lfo.dispose(); }); it("handles getters/setters as objects", function(){ var lfo = new LFO(); var values = { "type" : "square", "min" : -1, "max" : 2, "phase" : 180, "frequency" : "8n", }; lfo.set(values); expect(lfo.get()).to.contain.keys(Object.keys(values)); expect(lfo.type).to.equal(values.type); expect(lfo.min).to.equal(values.min); expect(lfo.max).to.equal(values.max); expect(lfo.phase).to.equal(values.phase); lfo.dispose(); }); it("outputs a signal", function(done){ var lfo; OutputAudio(function(dest){ lfo = new LFO().connect(dest); lfo.start(); }, function(){ lfo.dispose(); done(); }); }); it("can be creates an oscillation in a specific range", function(done){ var lfo; var offline = new Offline(0.1); offline.before(function(dest){ lfo = new LFO(100, 10, 20); lfo.connect(dest); lfo.start(); }); offline.test(function(sample){ expect(sample).to.be.within(10, 20); }); offline.after(function(){ lfo.dispose(); done(); }); offline.run(); }); it("can change the oscillation range", function(done){ var lfo; var offline = new Offline(0.1); offline.before(function(dest){ lfo = new LFO(100, 10, 20); lfo.connect(dest); lfo.start(); lfo.min = 15; lfo.max = 18; }); offline.test(function(sample){ expect(sample).to.be.within(15, 18); }); offline.after(function(){ lfo.dispose(); done(); }); offline.run(); }); it("initially outputs a signal at the center of it's phase", function(done){ var lfo; var offline = new Offline(0.1); offline.before(function(dest){ lfo = new LFO(100, 10, 20); lfo.connect(dest); }); offline.test(function(sample){ expect(sample).to.be.closeTo(15, 0.01); }); offline.after(function(){ lfo.dispose(); done(); }); offline.run(); }); it("outputs a signal at the correct phase angle", function(done){ var lfo; var offline = new Offline(0.1); offline.before(function(dest){ lfo = new LFO({ "phase" : 90, "min" : 0 }); lfo.connect(dest); }); offline.test(function(sample){ expect(sample).to.be.closeTo(0, 0.01); }); offline.after(function(){ lfo.dispose(); done(); }); offline.run(); }); it("outputs the right phase when setting a new phase", function(done){ var lfo; var offline = new Offline(0.1); offline.before(function(dest){ lfo = new LFO({ "phase" : 0, "min" : -1, "max" : 1 }); lfo.connect(dest); lfo.phase = 270; }); offline.test(function(sample){ expect(sample).to.be.closeTo(1, 0.01); }); offline.after(function(){ lfo.dispose(); done(); }); offline.run(); }); }); }); });