UNPKG

5.75 kBJavaScriptView Raw
1var
2 vows = require('vows'),
3 assert = require('assert'),
4
5 path = require('path'),
6 fs = require('fs'),
7 existsSync = fs.existsSync || path.existsSync,
8
9 tmp = require('../lib/tmp.js'),
10 Test = require('./base.js');
11
12
13function _testFile(mode, fdTest) {
14 return function _testFileGenerated(err, name, fd) {
15 assert.ok(existsSync(name), 'should exist');
16
17 var stat = fs.statSync(name);
18 assert.equal(stat.size, 0, 'should have zero size');
19 assert.ok(stat.isFile(), 'should be a file');
20
21 Test.testStat(stat, mode);
22
23 // check with fstat as well (fd checking)
24 if (fdTest) {
25 var fstat = fs.fstatSync(fd);
26 assert.deepEqual(fstat, stat, 'fstat results should be the same');
27
28 var data = new Buffer('something');
29 assert.equal(fs.writeSync(fd, data, 0, data.length, 0), data.length, 'should be writable');
30 assert.ok(!fs.closeSync(fd), 'should not return with error');
31 }
32 };
33}
34
35vows.describe('File creation').addBatch({
36 'when using without parameters': {
37 topic: function () {
38 tmp.file(this.callback);
39 },
40
41 'should not return with an error': assert.isNull,
42 'should return with a name': Test.assertName,
43 'should be a file': _testFile(0100600, true),
44 'should have the default prefix': Test.testPrefix('tmp-'),
45 'should have the default postfix': Test.testPostfix('.tmp')
46 },
47
48 'when using with prefix': {
49 topic: function () {
50 tmp.file({ prefix: 'something' }, this.callback);
51 },
52
53 'should not return with an error': assert.isNull,
54 'should return with a name': Test.assertName,
55 'should be a file': _testFile(0100600, true),
56 'should have the provided prefix': Test.testPrefix('something')
57 },
58
59 'when using with postfix': {
60 topic: function () {
61 tmp.file({ postfix: '.txt' }, this.callback);
62 },
63
64 'should not return with an error': assert.isNull,
65 'should return with a name': Test.assertName,
66 'should be a file': _testFile(0100600, true),
67 'should have the provided postfix': Test.testPostfix('.txt')
68 },
69
70 'when using template': {
71 topic: function () {
72 tmp.file({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback);
73 },
74
75 'should not return with an error': assert.isNull,
76 'should return with a name': Test.assertName,
77 'should be a file': _testFile(0100600, true),
78 'should have the provided prefix': Test.testPrefix('clike-'),
79 'should have the provided postfix': Test.testPostfix('-postfix')
80 },
81
82 'when using name': {
83 topic: function () {
84 tmp.file({ name: 'using-name.tmp' }, this.callback);
85 },
86
87 'should not return with an error': assert.isNull,
88 'should return with a name': Test.assertName,
89 'should have the provided name': Test.testName(path.join(tmp.tmpdir, 'using-name.tmp')),
90 'should be a file': function (err, name) {
91 _testFile(0100600, true);
92 fs.unlinkSync(name);
93 }
94 },
95
96 'when using multiple options': {
97 topic: function () {
98 tmp.file({ prefix: 'foo', postfix: 'bar', mode: 0640 }, this.callback);
99 },
100
101 'should not return with an error': assert.isNull,
102 'should return with a name': Test.assertName,
103 'should be a file': _testFile(0100640, true),
104 'should have the provided prefix': Test.testPrefix('foo'),
105 'should have the provided postfix': Test.testPostfix('bar')
106 },
107
108 'when using multiple options and mode': {
109 topic: function () {
110 tmp.file({ prefix: 'complicated', postfix: 'options', mode: 0644 }, this.callback);
111 },
112
113 'should not return with an error': assert.isNull,
114 'should return with a name': Test.assertName,
115 'should be a file': _testFile(0100644, true),
116 'should have the provided prefix': Test.testPrefix('complicated'),
117 'should have the provided postfix': Test.testPostfix('options')
118 },
119
120 'no tries': {
121 topic: function () {
122 tmp.file({ tries: -1 }, this.callback);
123 },
124
125 'should not be created': assert.isObject
126 },
127
128 'keep testing': {
129 topic: function () {
130 Test.testKeep('file', '1', this.callback);
131 },
132
133 'should not return with an error': assert.isNull,
134 'should return with a name': Test.assertName,
135 'should be a file': function (err, name) {
136 _testFile(0100600, false)(err, name, null);
137 fs.unlinkSync(name);
138 }
139 },
140
141 'unlink testing': {
142 topic: function () {
143 Test.testKeep('file', '0', this.callback);
144 },
145
146 'should not return with an error': assert.isNull,
147 'should return with a name': Test.assertName,
148 'should not exist': function (err, name) {
149 assert.ok(!existsSync(name), 'File should be removed');
150 }
151 },
152
153 'non graceful testing': {
154 topic: function () {
155 Test.testGraceful('file', '0', this.callback);
156 },
157
158 'should not return with error': assert.isNull,
159 'should return with a name': Test.assertName,
160 'should be a file': function (err, name) {
161 _testFile(0100600, false)(err, name, null);
162 fs.unlinkSync(name);
163 }
164 },
165
166 'graceful testing': {
167 topic: function () {
168 Test.testGraceful('file', '1', this.callback);
169 },
170
171 'should not return with an error': assert.isNull,
172 'should return with a name': Test.assertName,
173 'should not exist': function (err, name) {
174 assert.ok(!existsSync(name), 'File should be removed');
175 }
176 },
177
178 'remove callback': {
179 topic: function () {
180 tmp.file(this.callback);
181 },
182
183 'should not return with an error': assert.isNull,
184 'should return with a name': Test.assertName,
185 'removeCallback should remove file': function (_err, name, _fd, removeCallback) {
186 removeCallback();
187 assert.ok(!existsSync(name), 'File should be removed');
188 }
189 }
190
191}).exportTo(module);