var fs = require('fs')
  , watch = require('../main')
  , assert = require('assert')
  ;

//
// Demonstrate that the function of 'filter' is semantically inconsistent with
// usual convention, that returning true means 'keep this'.
//
function isDirOrQ(f, stat) { return stat.isDirectory() || f === 'Q'; }

watch.watchTree(__dirname, { filter: isDirOrQ }, function (f, curr, prev) {
  if (typeof f == 'object' && prev === null && curr === null) {
    Object.keys(f).forEach(function(name) {
      var stat = f[name];
      assert(isDirOrQ(name, stat));
    });

    // If the process never exits then `unwatchTree` failed to unwatch all
    // the files.
    watch.unwatchTree(__dirname);
  }
});