var assert = require(“assert”); var file = require('../file-system'); var fs = require('fs'); var path = require('path');

function getPath(filepath) {

return path.join(__dirname, filepath);

}

function checkPermission(filepath, mask) {

var stat = fs.statSync(filepath);
var mode = mask & parseInt((stat.mode & parseInt ("777", 8)).toString (8)[0]);

return !!mode;

}

describe('mkdir', function() {

it('one level Directory', function(done) {
  file.mkdir(getPath('var/mkdir'), function(err) {
    if (err) throw err;

    var exists = fs.existsSync(getPath('var/mkdir'));

    assert.equal(true, exists);
    done();
  });
});

it('multiple level Directory', function(done) {
  file.mkdir(getPath('var/mkdir/1/2/3/4'), function(err) {
    if (err) throw err;

    var exists = fs.existsSync(getPath('var/mkdir/1/2/3/4'));

    assert.equal(true, exists);
    done();
  });
});

it('file mode', function(done) {
  // 7 = 4+2+1 (read/write/execute)
  // 6 = 4+2 (read/write)
  // 5 = 4+1 (read/execute)
  // 4 = 4 (read)
  // 3 = 2+1 (write/execute)
  // 2 = 2 (write)
  // 1 = 1 (execute)
  fs.mkdir(getPath('var/mkdir/mode'), 511, function(err) {
    if (err) throw err;

    assert.equal(true, checkPermission(getPath('var/mkdir/mode'), 4));
    done();
  });

  fs.mkdir(getPath('var/mkdir/mode2'), 111, function(err) {
    if (err) throw err;

    assert.equal(false, checkPermission(getPath('var/mkdir/mode2'), 4));
  });
});

it('callback', function(done) {
  var a;
  fs.mkdir(getPath('var/mkdir/callback'), function(err) {
    a = 1;

    assert.equal(a, 1);
    done();
  });
});

after(function() {
  file.chmodSync(getPath('var/mkdir/mode2'), 511);
  file.rmdirSync(getPath('var/mkdir'));
});

});