text: var tape = require("tape"),
      path = require("path"),
      fs = require("fs"),
      queue = require("d3").queue;
  
  require("mkdirp").sync(path.join(__dirname, "tmp"));
  
  var probe = require("../lib/probe.js"),
      trimAudio = require("../audiogram/trim.js");
  
  tape("MP3 probe", function(test) {
  
    probe(path.join(__dirname, "data/glazed-donut.mp3"), function(err, data){
  
      test.error(err);
      test.equal(typeof data.duration, "number");
      test.equal(data.channels, 2);
      test.assert(Math.abs(data.duration - 26.67) < 0.1);
      test.end();
  
    });
  
  });
  
  tape("Mono probe", function(test) {
  
    probe(path.join(__dirname, "data/glazed-donut-mono.mp3"), function(err, data){
  
      test.error(err);
      test.equal(typeof data.duration, "number");
      test.equal(data.channels, 1);
      test.assert(Math.abs(data.duration - 26.67) < 0.1);
      test.end();
  
    });
  
  });
  
  tape("WAV probe", function(test) {
  
    probe(path.join(__dirname, "data/glazed-donut.wav"), function(err, data){
  
      test.error(err);
      test.equal(typeof data.duration, "number");
      test.equal(data.channels, 2);
      test.assert(Math.abs(data.duration - 1.83) < 0.1);
      test.end();
  
    });
  
  });
  
  tape("Mono probe", function(test) {
  
    probe(path.join(__dirname, "data/short.wav"), function(err, data){
  
      test.error(err);
      test.equal(typeof data.duration, "number");
      test.equal(data.channels, 1);
      test.assert(Math.abs(data.duration - 0.01) < 0.01);
      test.end();
  
    });
  
  });
  
  tape("Probe error", function(test) {
  
    probe(path.join(__dirname, "..", "README.md"), function(err){
  
      test.ok(err);
      test.end();
  
    });
  
  });
  
  tape("Trim start", function(test) {
  
    var options = {
      origin: path.join(__dirname, "data/glazed-donut.mp3"),
      destination: path.join(__dirname, "tmp/trim-start.mp3"),
      startTime: 6.67
    };
  
    queue(1)
      .defer(trimAudio, options)
      .defer(probe, options.destination)
      .await(function(err, _, data){
  
        test.error(err);
        test.equal(typeof data.duration, "number");
        test.assert(Math.abs(data.duration - 20) < 0.1);
        test.end();
  
      });
  
  });
  
  tape("Trim end", function(test) {
  
    var options = {
      origin: path.join(__dirname, "data/glazed-donut.mp3"),
      destination: path.join(__dirname, "tmp/trim-end.mp3"),
      startTime: 6.67
    };
  
    queue(1)
      .defer(trimAudio, options)
      .defer(probe, options.destination)
      .await(function(err, _, data){
  
        test.error(err);
        test.equal(typeof data.duration, "number");
        test.assert(Math.abs(data.duration - 20) < 0.1);
        test.end();
  
      });
  
  });
  
  tape("Trim start & end", function(test) {
  
    var options = {
      origin: path.join(__dirname, "data/glazed-donut.mp3"),
      destination: path.join(__dirname, "tmp/trim-start-end.mp3"),
      startTime: 5,
      endTime: 10
    };
  
    queue(1)
      .defer(trimAudio, options)
      .defer(probe, options.destination)
      .await(function(err, _, data){
  
        test.error(err);
        test.equal(typeof data.duration, "number");
        test.assert(Math.abs(data.duration - 5) < 0.1);
        test.end();
  
      });
  
  });
  
  
  tape("Trim invalid", function(test) {
  
    var options = {
      origin: path.join(__dirname, "data/glazed-donut.mp3"),
      destination: path.join(__dirname, "tmp/trim-invalid.mp3"),
      startTime: 5,
      endTime: 4
    };
  
    trimAudio(options, function(err){
      test.ok(err);
      test.end();
    });
  
  });
  
  // Cleanup
  tape.onFinish(function(){
    require("rimraf")(path.join(__dirname, "tmp"), function(err){
      if (err) {
        throw err;
      }
    });
  });
  