'use strict'; var common = require('../common'); var assert = require('assert'); var path = require('path'); var fs = require('fs'); if (process.platform === 'darwin' || common.isWindows) { var watchSeenOne = 0; var testDir = common.tmpDir; var filenameOne = 'watch.txt'; var testsubdirName = 'testsubdir'; var testsubdir = path.join(testDir, testsubdirName); var relativePathOne = path.join('testsubdir', filenameOne); var filepathOne = path.join(testsubdir, filenameOne); common.refreshTmpDir(); process.on('exit', function() { assert.ok(watchSeenOne > 0); }); function cleanup() { try { fs.unlinkSync(filepathOne); } catch (e) { } try { fs.rmdirSync(testsubdir); } catch (e) { } }; try { fs.mkdirSync(testsubdir, 0o700); } catch (e) {} assert.doesNotThrow(function() { var watcher = fs.watch(testDir, {recursive: true}); watcher.on('change', function(event, filename) { assert.ok('change' === event || 'rename' === event); // Ignore stale events generated by mkdir and other tests if (filename !== relativePathOne) return; watcher.close(); cleanup(); ++watchSeenOne; }); }); setTimeout(function() { fs.writeFileSync(filepathOne, 'world'); }, 10); } else { console.log('1..0 # Skipped: recursive option is darwin/windows specific'); }