define(["Tone/effect/Convolver", "helper/Basic", "helper/EffectTests", "Tone/core/Buffer"],
	function (Convolver, Basic, EffectTests, Buffer) {

		if (window.__karma__){
			Buffer.baseUrl = "/base/test/";
		}

		describe("Convolver", function(){

			Basic(Convolver);

			var ir = new Buffer();

			var testFile = "./audio/sineStereo.wav";

			before(function(done){
				ir.load(testFile, function(){
					done();
				});
			});

			// the buffers are set to 44.1 Khz, but i always get this error:
			// Error: Failed to set the 'buffer' property on 'ConvolverNode': The buffer sample rate of 48000 does not match the context rate of 44100 Hz.
			// EffectTests(Convolver, ir);

			context("API", function(){

				it("can pass in options in the constructor", function(){
					var convolver = new Convolver({
						"url" : testFile,
					});
					convolver.dispose();
				});

				it("invokes the onload function when loaded", function(done){
					var convolver = new Convolver({
						"url" : testFile,
						"onload" : function(){
							convolver.dispose();
							done();
						}
					});
				});

				it("load returns a Promise", function(done){
					var convolver = new Convolver();
					convolver.load(testFile).then(function(){
						convolver.dispose();
						done();
					});
				});

				it("load invokes the second callback", function(done){
					var convolver = new Convolver();
					convolver.load(testFile, function(){
						convolver.dispose();
						done();
					});
				});

				it("can be constructed with loaded buffer", function(done){
					var buffer = new Buffer({
						"url" : testFile,
						"onload" : function(){
							var convolver = new Convolver(buffer);
							expect(convolver.buffer).is.instanceOf(AudioBuffer);
							buffer.dispose();
							convolver.dispose();
							done();
						}
					});
				});

				it("can be constructed with unloaded buffer", function(done){
					var convolver = new Convolver({
						"url" : new Buffer({
							"url" : testFile,
							"onload" : function(){
								expect(convolver.buffer).is.instanceOf(AudioBuffer);
								convolver.dispose();
								done();
							}
						})
					});
				});
			});
		});
	});