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);

}

describe('recurse', function() {

var allFiles = [
  [
    getPath('var/recurse/simple/1/1.html'),
    getPath('var/recurse/simple/1/2.html'),
    getPath('var/recurse/simple/1.html')
  ],
  [
    getPath('var/recurse/filter/1/demo.js'),
    getPath('var/recurse/filter/1/2/demo.js'),
    getPath('var/recurse/filter/1/2/demo.css'),
    getPath('var/recurse/filter/1/2/demo.html'),
    getPath('var/recurse/filter/demo.html'),
    getPath('var/recurse/filter/demo.js'),
    getPath('var/recurse/filter/demo.css')
  ],
  [
    getPath('var/recurse/copy/1/demo.js'),
    getPath('var/recurse/copy/1/2/demo.js'),
    getPath('var/recurse/copy/1/2/demo.css'),
    getPath('var/recurse/copy/1/2/demo.html'),
    getPath('var/recurse/copy/demo.html'),
    getPath('var/recurse/copy/demo.js'),
    getPath('var/recurse/copy/demo.css')
  ]
];

before(function() {
  allFiles.forEach(function(files) {
    files.forEach(function(item) {
      file.writeFileSync(item);
    });
  });
});

it('recurse files', function(done) {
  var filesPath = allFiles[0];
  var count = 0;

  file.recurse(getPath('var/recurse/simple'), function(filepath, relative, filename) {
    if (filename) {
      assert.equal(true, filesPath.indexOf(filepath) != -1);

      if (++count == filesPath.length) {
        done();
      }
    }
  });
});

it('recurseSync files', function() {
  var filesPath = [];
  file.recurseSync(getPath('var/recurse/filter'), function(filepath, relative, filename) {
    if (filename) {
      filesPath.push(filepath);
    }
  });

   assert.equal(filesPath.length, allFiles[1].length);
});

it('recurseSync filter files', function() {
  var filesPath = [];
  file.recurseSync(getPath('var/recurse/filter'), [
    'demo.js',
    '1/**/*.css'
  ], function(filepath, filename) {
    if (filename) {
      filesPath.push(filepath);
    }
  });
  var filterPath = [
    getPath('var/recurse/filter/1/2/demo.css'),
    getPath('var/recurse/filter/demo.js')
  ];

   assert.deepEqual(filesPath, filterPath);
});

it('copySync files', function() {
  var dest = getPath('var/recurse/dest');
  var destFiles = [];

  file.copySync(getPath('var/recurse/copy'), dest);

  file.recurseSync(dest, function(filepath, relative, filename) {
    if (!filename) return;

    destFiles.push(filepath);
  });

  assert.equal(destFiles.length, allFiles[2].length);
});

it('copySync empty folder', function() {
  var dest = getPath('var/recurse/copy/emptydest');
  var src = getPath('var/recurse/copy/empty');

  file.mkdirSync(src);
  file.copySync(src, dest);

  var existsSync = fs.existsSync(dest);

  assert.equal(existsSync, true);
});

it('copySync process content', function() {
  var src = getPath('var/recurse/copyprocess/');
  var dest = getPath('var/recurse/copyprocess/dest');

  file.writeFileSync(path.join(src, '1.html'), 'a');

  file.copySync(src, dest, {
    process: function(contents, filepath) {
      return 'b';
    }
  });

   var contents = fs.readFileSync(path.join(dest, '1.html'));

   assert.equal('b',  contents);
});

after(function() {
  file.rmdirSync(getPath('var/recurse'));
});

});