From 73f0f19bb9189d9149bb1f92c42a61901d4e30f2 Mon Sep 17 00:00:00 2001 From: yatsenko-julia Date: Tue, 16 Oct 2018 11:21:49 -0400 Subject: [PATCH] Fix #523: added tests for fs.ftruncate() (#524) * Fix #523: added tests for fs.ftruncate() * fix #523: moved a function from truncate to ftruncate and made a few minor changes * Fixed indentation --- tests/index.js | 1 + tests/spec/fs.ftruncate.spec.js | 133 ++++++++++++++++++++++++++++++++ tests/spec/fs.truncate.spec.js | 26 ------- 3 files changed, 134 insertions(+), 26 deletions(-) create mode 100644 tests/spec/fs.ftruncate.spec.js diff --git a/tests/index.js b/tests/index.js index e49c342..9a6b9dc 100644 --- a/tests/index.js +++ b/tests/index.js @@ -29,6 +29,7 @@ require('./spec/fs.lseek.spec'); require('./spec/fs.symlink.spec'); require('./spec/fs.readlink.spec'); require('./spec/fs.truncate.spec'); +require('./spec/fs.ftruncate.spec'); require('./spec/fs.utimes.spec'); require('./spec/fs.xattr.spec'); require('./spec/fs.stats.spec'); diff --git a/tests/spec/fs.ftruncate.spec.js b/tests/spec/fs.ftruncate.spec.js new file mode 100644 index 0000000..5884b5c --- /dev/null +++ b/tests/spec/fs.ftruncate.spec.js @@ -0,0 +1,133 @@ +const util = require('../lib/test-utils.js'); +const expect = require('chai').expect; + +describe('fs.ftruncate', function() { + beforeEach(util.setup); + afterEach(util.cleanup); + + it('should be a function', function() { + let fs = util.fs(); + expect(fs.ftruncate).to.be.a('function'); + }); + + it('should return an error if length is negative', function(done) { + let fs = util.fs(); + let contents = 'This is a file.'; + + fs.writeFile('/myfile', contents, function(error) { + if(error) throw error; + + fs.open('/myfile', 'w', function(err, fd) { + + fs.ftruncate(fd, -1, function(error) { + expect(error).to.exist; + expect(error.code).to.equal('EINVAL'); + done(); + }); + + // Close file descriptor when done + fs.close(fd); + }); + }); + }); + + it('should return an error if file descriptor is negative', function(done) { + let fs = util.fs(); + + // File descriptor should be a non-negative number + fs.ftruncate(-1, 0, function(error) { + expect(error).to.exist; + expect(error.code).to.equal('EBADF'); + done(); + }); + }); + + it('should truncate a file', function(done) { + let fs = util.fs(); + let buffer = new Buffer([1, 2, 3, 4, 5, 6, 7, 8]); + let truncated = new Buffer([1, 2]); + + fs.open('/myfile', 'w', function(error, result) { + if(error) throw error; + let fd = result; + + fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { + if(error) throw error; + expect(result).to.equal(buffer.length); + + // Truncate file to first two bytes + fs.ftruncate(fd, 2, function(error) { + expect(error).not.to.exist; + }); + + fs.close(fd, function(error) { + if(error) throw error; + + fs.readFile('/myfile', function(error, result) { + if(error) throw error; + + expect(result).to.deep.equal(truncated); + done(); + }); + }); + }); + }); + }); + + it('should truncate a valid descriptor', function(done) { + var fs = util.fs(); + var buffer = new Buffer([1, 2, 3, 4, 5, 6, 7, 8]); + + fs.open('/myfile', 'w', function(error, result) { + if(error) throw error; + + var fd = result; + fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { + if(error) throw error; + expect(result).to.equal(buffer.length); + + fs.ftruncate(fd, 0, function(error) { + expect(error).not.to.exist; + + fs.fstat(fd, function(error, result) { + if(error) throw error; + + expect(result.size).to.equal(0); + done(); + }); + }); + }); + }); + }); + + it('should pad a file with zeros when the length is greater than the file size', function(done) { + let fs = util.fs(); + let buffer = new Buffer([1, 2, 3, 4, 5, 6, 7, 8]); + let truncated = new Buffer([1, 2, 3, 4, 5, 6, 7, 8, 0]); + + fs.open('/myfile', 'w', function(error, result) { + if(error) throw error; + + let fd = result; + fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { + if(error) throw error; + expect(result).to.equal(buffer.length); + + fs.ftruncate(fd, 9, function(error) { + expect(error).not.to.exist; + }); + + fs.close(fd, function(error) { + if(error) throw error; + + fs.readFile('/myfile', function(error, result) { + if(error) throw error; + + expect(result).to.deep.equal(truncated); + done(); + }); + }); + }); + }); + }); +}); diff --git a/tests/spec/fs.truncate.spec.js b/tests/spec/fs.truncate.spec.js index 657150d..1bc7550 100644 --- a/tests/spec/fs.truncate.spec.js +++ b/tests/spec/fs.truncate.spec.js @@ -173,32 +173,6 @@ describe('fs.truncate', function() { }); }); - it('should truncate a valid descriptor', function(done) { - var fs = util.fs(); - var buffer = new Buffer([1, 2, 3, 4, 5, 6, 7, 8]); - - fs.open('/myfile', 'w', function(error, result) { - if(error) throw error; - - var fd = result; - fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { - if(error) throw error; - expect(result).to.equal(buffer.length); - - fs.ftruncate(fd, 0, function(error) { - expect(error).not.to.exist; - - fs.fstat(fd, function(error, result) { - if(error) throw error; - - expect(result.size).to.equal(0); - done(); - }); - }); - }); - }); - }); - it('should follow symbolic links', function(done) { var fs = util.fs(); var buffer = new Buffer([1, 2, 3, 4, 5, 6, 7, 8]);