revise installing a license file
[platform/upstream/nodejs.git] / test / parallel / test-fs-truncate.js
1 'use strict';
2 var common = require('../common');
3 var assert = require('assert');
4 var path = require('path');
5 var fs = require('fs');
6 var tmp = common.tmpDir;
7 var filename = path.resolve(tmp, 'truncate-file.txt');
8 var data = new Buffer(1024 * 16);
9 data.fill('x');
10
11 common.refreshTmpDir();
12
13 var stat;
14
15 // truncateSync
16 fs.writeFileSync(filename, data);
17 stat = fs.statSync(filename);
18 assert.equal(stat.size, 1024 * 16);
19
20 fs.truncateSync(filename, 1024);
21 stat = fs.statSync(filename);
22 assert.equal(stat.size, 1024);
23
24 fs.truncateSync(filename);
25 stat = fs.statSync(filename);
26 assert.equal(stat.size, 0);
27
28 // ftruncateSync
29 fs.writeFileSync(filename, data);
30 var fd = fs.openSync(filename, 'r+');
31
32 stat = fs.statSync(filename);
33 assert.equal(stat.size, 1024 * 16);
34
35 fs.ftruncateSync(fd, 1024);
36 stat = fs.statSync(filename);
37 assert.equal(stat.size, 1024);
38
39 fs.ftruncateSync(fd);
40 stat = fs.statSync(filename);
41 assert.equal(stat.size, 0);
42
43 fs.closeSync(fd);
44
45 // async tests
46 var success = 0;
47 testTruncate(function(er) {
48   if (er) throw er;
49   success++;
50   testFtruncate(function(er) {
51     if (er) throw er;
52     success++;
53   });
54 });
55
56 process.on('exit', function() {
57   assert.equal(success, 2);
58   console.log('ok');
59 });
60
61 function testTruncate(cb) {
62   fs.writeFile(filename, data, function(er) {
63     if (er) return cb(er);
64     fs.stat(filename, function(er, stat) {
65       if (er) return cb(er);
66       assert.equal(stat.size, 1024 * 16);
67
68       fs.truncate(filename, 1024, function(er) {
69         if (er) return cb(er);
70         fs.stat(filename, function(er, stat) {
71           if (er) return cb(er);
72           assert.equal(stat.size, 1024);
73
74           fs.truncate(filename, function(er) {
75             if (er) return cb(er);
76             fs.stat(filename, function(er, stat) {
77               if (er) return cb(er);
78               assert.equal(stat.size, 0);
79               cb();
80             });
81           });
82         });
83       });
84     });
85   });
86 }
87
88
89 function testFtruncate(cb) {
90   fs.writeFile(filename, data, function(er) {
91     if (er) return cb(er);
92     fs.stat(filename, function(er, stat) {
93       if (er) return cb(er);
94       assert.equal(stat.size, 1024 * 16);
95
96       fs.open(filename, 'w', function(er, fd) {
97         if (er) return cb(er);
98         fs.ftruncate(fd, 1024, function(er) {
99           if (er) return cb(er);
100           fs.stat(filename, function(er, stat) {
101             if (er) return cb(er);
102             assert.equal(stat.size, 1024);
103
104             fs.ftruncate(fd, function(er) {
105               if (er) return cb(er);
106               fs.stat(filename, function(er, stat) {
107                 if (er) return cb(er);
108                 assert.equal(stat.size, 0);
109                 fs.close(fd, cb);
110               });
111             });
112           });
113         });
114       });
115     });
116   });
117 }