@jdeighan/coffee-utils 4.0.23 → 4.1.3
Sign up to get free protection for your applications and to get access to all the features.
- package/.save/{block.test.cielo → block.test.coffee} +0 -0
- package/.save/block.test.js +129 -0
- package/.save/{block2.test.cielo → block2.test.coffee} +0 -0
- package/.save/block2.test.js +64 -0
- package/.save/{debug.test.cielo → debug.test.coffee} +4 -2
- package/.save/debug.test.js +242 -0
- package/.save/{fs.test.cielo → fs.test.coffee} +18 -2
- package/.save/fs.test.js +191 -0
- package/.save/{indent.test.cielo → indent.test.coffee} +0 -0
- package/.save/indent.test.js +136 -0
- package/.save/{log.test.cielo → log.test.coffee} +10 -6
- package/.save/log.test.js +336 -0
- package/.save/{privenv.test.cielo → privenv.test.coffee} +0 -0
- package/.save/privenv.test.js +54 -0
- package/.save/{temp.cielo → temp.coffee} +0 -0
- package/.save/temp.js +28 -0
- package/.save/{tester.test.cielo → tester.test.coffee} +0 -0
- package/.save/tester.test.js +93 -0
- package/.save/{utils.test.cielo → utils.test.coffee} +0 -0
- package/.save/utils.test.js +319 -0
- package/package.json +6 -5
- package/src/UnitTester.coffee +10 -6
- package/src/UnitTester.js +7 -1
- package/src/coffee_utils.coffee +5 -3
- package/src/coffee_utils.js +7 -3
- package/src/debug_utils.coffee +28 -7
- package/src/debug_utils.js +28 -8
- package/src/log_utils.coffee +28 -12
- package/src/log_utils.js +31 -13
- package/.save/bs.test.cielo +0 -6
File without changes
|
@@ -0,0 +1,129 @@
|
|
1
|
+
// Generated by CoffeeScript 2.6.1
|
2
|
+
// block.test.coffee
|
3
|
+
var simple;
|
4
|
+
|
5
|
+
import assert from 'assert';
|
6
|
+
|
7
|
+
import {
|
8
|
+
UnitTester
|
9
|
+
} from '@jdeighan/coffee-utils/test';
|
10
|
+
|
11
|
+
import {
|
12
|
+
blockToArray,
|
13
|
+
arrayToBlock,
|
14
|
+
firstLine,
|
15
|
+
remainingLines,
|
16
|
+
normalizeBlock,
|
17
|
+
truncateBlock,
|
18
|
+
joinBlocks,
|
19
|
+
forEachLine,
|
20
|
+
forEachBlock,
|
21
|
+
forEachSetOfBlocks
|
22
|
+
} from '@jdeighan/coffee-utils/block';
|
23
|
+
|
24
|
+
simple = new UnitTester();
|
25
|
+
|
26
|
+
// ---------------------------------------------------------------------------
|
27
|
+
simple.equal(108, blockToArray("abc\nxyz\n"), ['abc', 'xyz']);
|
28
|
+
|
29
|
+
simple.equal(113, blockToArray("abc\nxyz\n\n\n\n"), ['abc', 'xyz']);
|
30
|
+
|
31
|
+
simple.equal(118, blockToArray("abc\n\nxyz\n"), ['abc', '', 'xyz']);
|
32
|
+
|
33
|
+
// ---------------------------------------------------------------------------
|
34
|
+
simple.equal(126, arrayToBlock(['a', 'b', 'c']), "a\nb\nc\n");
|
35
|
+
|
36
|
+
// ---------------------------------------------------------------------------
|
37
|
+
simple.equal(225, firstLine(`#starbucks
|
38
|
+
do this
|
39
|
+
do that`), '#starbucks');
|
40
|
+
|
41
|
+
// ---------------------------------------------------------------------------
|
42
|
+
simple.equal(225, remainingLines(`#starbucks
|
43
|
+
do this
|
44
|
+
do that`), `do this
|
45
|
+
do that`);
|
46
|
+
|
47
|
+
// ---------------------------------------------------------------------------
|
48
|
+
(function() {
|
49
|
+
var str;
|
50
|
+
str = joinBlocks('import me', '', 'do this\ndo that');
|
51
|
+
return simple.equal(17, str, `import me
|
52
|
+
do this
|
53
|
+
do that`);
|
54
|
+
})();
|
55
|
+
|
56
|
+
// ---------------------------------------------------------------------------
|
57
|
+
simple.equal(49, normalizeBlock(`line 1
|
58
|
+
line 2`), `line 1
|
59
|
+
line 2` + '\n');
|
60
|
+
|
61
|
+
simple.equal(57, normalizeBlock(`line 1
|
62
|
+
|
63
|
+
line 2`), `line 1
|
64
|
+
line 2` + '\n');
|
65
|
+
|
66
|
+
simple.equal(66, normalizeBlock(`
|
67
|
+
line 1
|
68
|
+
|
69
|
+
line 2
|
70
|
+
|
71
|
+
`), `line 1
|
72
|
+
line 2` + '\n');
|
73
|
+
|
74
|
+
// ---------------------------------------------------------------------------
|
75
|
+
simple.equal(96, truncateBlock(`line 1
|
76
|
+
line 2
|
77
|
+
line 3
|
78
|
+
line 4`, 2), `line 1
|
79
|
+
line 2` + '\n');
|
80
|
+
|
81
|
+
// ---------------------------------------------------------------------------
|
82
|
+
(function() {
|
83
|
+
var lBlocks, str;
|
84
|
+
lBlocks = ["import {say} from '@jdeighan/coffee-utils'", "", "<script>\n\tx = 42\n</script>", ""];
|
85
|
+
str = joinBlocks(...lBlocks);
|
86
|
+
return simple.equal(34, str, `import {say} from '@jdeighan/coffee-utils'
|
87
|
+
<script>
|
88
|
+
x = 42
|
89
|
+
</script>`);
|
90
|
+
})();
|
91
|
+
|
92
|
+
// ---------------------------------------------------------------------------
|
93
|
+
(function() {
|
94
|
+
var code, lImports, str;
|
95
|
+
lImports = ["import {say} from '@jdeighan/coffee-utils'"];
|
96
|
+
code = `if (x==42)
|
97
|
+
log "line 2 in unit test"`;
|
98
|
+
str = joinBlocks(...lImports, code);
|
99
|
+
return simple.equal(34, str, `
|
100
|
+
import {say} from '@jdeighan/coffee-utils'
|
101
|
+
if (x==42)
|
102
|
+
log "line 2 in unit test"`);
|
103
|
+
})();
|
104
|
+
|
105
|
+
// ---------------------------------------------------------------------------
|
106
|
+
// test forEachLine()
|
107
|
+
(async function() {
|
108
|
+
var callback, filepath, lLines;
|
109
|
+
lLines = [];
|
110
|
+
callback = function(line) {
|
111
|
+
lLines.push(line);
|
112
|
+
};
|
113
|
+
filepath = "c:/Users/johnd/coffee-utils/test/data/file2.txt";
|
114
|
+
await forEachLine(filepath, callback);
|
115
|
+
return simple.equal(55, lLines, ["abc", "def", "ghi", "jkl"]);
|
116
|
+
})();
|
117
|
+
|
118
|
+
// ---------------------------------------------------------------------------
|
119
|
+
// test forEachBlock()
|
120
|
+
(async function() {
|
121
|
+
var callback, filepath, lBlocks;
|
122
|
+
lBlocks = [];
|
123
|
+
callback = function(block) {
|
124
|
+
lBlocks.push(block);
|
125
|
+
};
|
126
|
+
filepath = "c:/Users/johnd/coffee-utils/test/data/file3.txt";
|
127
|
+
await forEachBlock(filepath, callback);
|
128
|
+
return simple.equal(76, lBlocks, ["abc\ndef", "abc\ndef\nghi", "abc\ndef\nghi\njkl"]);
|
129
|
+
})();
|
File without changes
|
@@ -0,0 +1,64 @@
|
|
1
|
+
// Generated by CoffeeScript 2.6.1
|
2
|
+
// block2.test.coffee
|
3
|
+
var filepath, simple, testDir;
|
4
|
+
|
5
|
+
import assert from 'assert';
|
6
|
+
|
7
|
+
import test from 'ava';
|
8
|
+
|
9
|
+
import {
|
10
|
+
undef,
|
11
|
+
say,
|
12
|
+
isString,
|
13
|
+
isHash,
|
14
|
+
isEmpty,
|
15
|
+
nonEmpty
|
16
|
+
} from '@jdeighan/coffee-utils';
|
17
|
+
|
18
|
+
import {
|
19
|
+
mydir,
|
20
|
+
mkpath
|
21
|
+
} from '@jdeighan/coffee-utils/fs';
|
22
|
+
|
23
|
+
import {
|
24
|
+
UnitTester
|
25
|
+
} from '@jdeighan/coffee-utils/test';
|
26
|
+
|
27
|
+
import {
|
28
|
+
forEachLine,
|
29
|
+
forEachBlock,
|
30
|
+
forEachSetOfBlocks
|
31
|
+
} from '@jdeighan/coffee-utils/block';
|
32
|
+
|
33
|
+
testDir = mydir(import.meta.url);
|
34
|
+
|
35
|
+
simple = new UnitTester();
|
36
|
+
|
37
|
+
filepath = mkpath(testDir, 'code2.test.txt');
|
38
|
+
|
39
|
+
// ----------------------------------------------------------------------------
|
40
|
+
(function() {
|
41
|
+
var callback, lFirstBlocks;
|
42
|
+
lFirstBlocks = undef;
|
43
|
+
callback = function(lBlocks) {
|
44
|
+
lFirstBlocks = lBlocks;
|
45
|
+
return true; // we're only interested in the first set
|
46
|
+
};
|
47
|
+
return test("line 29", async function(t) {
|
48
|
+
await forEachSetOfBlocks(filepath, callback);
|
49
|
+
return t.deepEqual(lFirstBlocks, ["f()", "f"]);
|
50
|
+
});
|
51
|
+
})();
|
52
|
+
|
53
|
+
// ----------------------------------------------------------------------------
|
54
|
+
(function() {
|
55
|
+
var callback, lAllBlockSets;
|
56
|
+
lAllBlockSets = [];
|
57
|
+
callback = function(lBlocks) {
|
58
|
+
lAllBlockSets.push(lBlocks);
|
59
|
+
};
|
60
|
+
return test("line 44", async function(t) {
|
61
|
+
await forEachSetOfBlocks(filepath, callback);
|
62
|
+
return t.deepEqual(lAllBlockSets, [["f()", "f"], ["f = (key=undef) ->\n\tswitch key\n\t\twhen 'ok'\n\t\t\tsay 'all is OK'", "f,say,mkpath"]]);
|
63
|
+
});
|
64
|
+
})();
|
@@ -250,8 +250,10 @@ tester = new TraceTester()
|
|
250
250
|
simple.equal 250, lLines, [
|
251
251
|
"enter myfunc"
|
252
252
|
"└─> return from myfunc:"
|
253
|
-
"
|
254
|
-
"
|
253
|
+
" =========================================="
|
254
|
+
" this is one very long line"
|
255
|
+
" this is another very long line"
|
256
|
+
" =========================================="
|
255
257
|
"Answer is 42"
|
256
258
|
]
|
257
259
|
)()
|
@@ -0,0 +1,242 @@
|
|
1
|
+
// Generated by CoffeeScript 2.6.1
|
2
|
+
// debug.test.coffee
|
3
|
+
var TraceTester, lLines, simple, tester;
|
4
|
+
|
5
|
+
import {
|
6
|
+
undef,
|
7
|
+
OL
|
8
|
+
} from '@jdeighan/coffee-utils';
|
9
|
+
|
10
|
+
import {
|
11
|
+
blockToArray,
|
12
|
+
arrayToBlock
|
13
|
+
} from '@jdeighan/coffee-utils/block';
|
14
|
+
|
15
|
+
import {
|
16
|
+
log,
|
17
|
+
setLogger
|
18
|
+
} from '@jdeighan/coffee-utils/log';
|
19
|
+
|
20
|
+
import {
|
21
|
+
setDebugging,
|
22
|
+
debug,
|
23
|
+
resetDebugging,
|
24
|
+
funcMatch
|
25
|
+
} from '@jdeighan/coffee-utils/debug';
|
26
|
+
|
27
|
+
import {
|
28
|
+
UnitTester
|
29
|
+
} from '@jdeighan/coffee-utils/test';
|
30
|
+
|
31
|
+
simple = new UnitTester();
|
32
|
+
|
33
|
+
// ---------------------------------------------------------------------------
|
34
|
+
lLines = undef;
|
35
|
+
|
36
|
+
setLogger(function(str) {
|
37
|
+
return lLines.push(str);
|
38
|
+
});
|
39
|
+
|
40
|
+
setDebugging(true);
|
41
|
+
|
42
|
+
// ---------------------------------------------------------------------------
|
43
|
+
(function() {
|
44
|
+
lLines = [];
|
45
|
+
debug('abc');
|
46
|
+
return simple.equal(24, lLines, ['abc']);
|
47
|
+
})();
|
48
|
+
|
49
|
+
// ---------------------------------------------------------------------------
|
50
|
+
TraceTester = class TraceTester extends UnitTester {
|
51
|
+
initialize() {
|
52
|
+
return lLines = [];
|
53
|
+
}
|
54
|
+
|
55
|
+
transformValue(block) {
|
56
|
+
var i, len, line, ref;
|
57
|
+
ref = blockToArray(block);
|
58
|
+
for (i = 0, len = ref.length; i < len; i++) {
|
59
|
+
line = ref[i];
|
60
|
+
debug(line);
|
61
|
+
}
|
62
|
+
return arrayToBlock(lLines);
|
63
|
+
}
|
64
|
+
|
65
|
+
normalize(text) {
|
66
|
+
return text;
|
67
|
+
}
|
68
|
+
|
69
|
+
};
|
70
|
+
|
71
|
+
tester = new TraceTester();
|
72
|
+
|
73
|
+
// ---------------------------------------------------------------------------
|
74
|
+
(function() {
|
75
|
+
lLines = [];
|
76
|
+
debug('enter myfunc');
|
77
|
+
debug('something');
|
78
|
+
debug('more');
|
79
|
+
debug('return 42 from myfunc');
|
80
|
+
debug("Answer is 42");
|
81
|
+
return simple.equal(54, lLines, ["enter myfunc", "│ something", "│ more", "└─> return 42 from myfunc", "Answer is 42"]);
|
82
|
+
})();
|
83
|
+
|
84
|
+
// ---------------------------------------------------------------------------
|
85
|
+
(function() {
|
86
|
+
lLines = [];
|
87
|
+
debug('enter myfunc');
|
88
|
+
debug('something');
|
89
|
+
debug('enter newfunc');
|
90
|
+
debug('something else');
|
91
|
+
debug('return abc from newfunc');
|
92
|
+
debug('return 42 from myfunc');
|
93
|
+
return simple.equal(73, lLines, ["enter myfunc", "│ something", "│ enter newfunc", "│ │ something else", "│ └─> return abc from newfunc", "└─> return 42 from myfunc"]);
|
94
|
+
})();
|
95
|
+
|
96
|
+
// ---------------------------------------------------------------------------
|
97
|
+
(function() {
|
98
|
+
var obj;
|
99
|
+
lLines = [];
|
100
|
+
obj = {
|
101
|
+
first: 1,
|
102
|
+
second: 2
|
103
|
+
};
|
104
|
+
debug('enter myfunc');
|
105
|
+
debug('something');
|
106
|
+
debug('obj', obj);
|
107
|
+
debug('return 42 from myfunc');
|
108
|
+
return simple.equal(95, lLines, ["enter myfunc", "│ something", '│ obj = {"first":1,"second":2}', "└─> return 42 from myfunc"]);
|
109
|
+
})();
|
110
|
+
|
111
|
+
// ---------------------------------------------------------------------------
|
112
|
+
(function() {
|
113
|
+
var obj;
|
114
|
+
lLines = [];
|
115
|
+
obj = {
|
116
|
+
first: "this is the first item in the hash",
|
117
|
+
second: "this is the second item in the hash"
|
118
|
+
};
|
119
|
+
debug('enter myfunc');
|
120
|
+
debug('something');
|
121
|
+
debug('obj', obj);
|
122
|
+
debug('return 42 from myfunc');
|
123
|
+
return simple.equal(115, lLines, ["enter myfunc", "│ something", "│ obj:", "│ ---", "│ first: this is the first item in the hash", "│ second: this is the second item in the hash", "└─> return 42 from myfunc"]);
|
124
|
+
})();
|
125
|
+
|
126
|
+
// ---------------------------------------------------------------------------
|
127
|
+
// --- Test ability to debug only a particular function
|
128
|
+
(function() {
|
129
|
+
lLines = [];
|
130
|
+
resetDebugging();
|
131
|
+
setDebugging('innerFunc');
|
132
|
+
debug("enter myfunc");
|
133
|
+
debug("something");
|
134
|
+
debug("enter innerFunc");
|
135
|
+
debug("something else");
|
136
|
+
debug("return nothing from innerFunc");
|
137
|
+
debug("this should not appear");
|
138
|
+
debug("return 42 from myfunc");
|
139
|
+
simple.equal(141, lLines, ["enter innerFunc", "│ something else", "└─> return nothing from innerFunc"]);
|
140
|
+
return setDebugging(false);
|
141
|
+
})();
|
142
|
+
|
143
|
+
// ---------------------------------------------------------------------------
|
144
|
+
// --- Test ability to debug only a particular function
|
145
|
+
// using actual functions!
|
146
|
+
(function() {
|
147
|
+
var innerFunc, outerFunc;
|
148
|
+
lLines = [];
|
149
|
+
resetDebugging();
|
150
|
+
setDebugging('innerFunc');
|
151
|
+
innerFunc = function() {
|
152
|
+
var x;
|
153
|
+
debug("enter innerFunc()");
|
154
|
+
debug("answer is 42");
|
155
|
+
x = 42;
|
156
|
+
debug("return from innerFunc()");
|
157
|
+
};
|
158
|
+
outerFunc = function() {
|
159
|
+
debug("enter outerFunc()");
|
160
|
+
innerFunc();
|
161
|
+
debug("return from outerFunc()");
|
162
|
+
};
|
163
|
+
outerFunc();
|
164
|
+
simple.equal(175, lLines, ["enter innerFunc()", "│ answer is 42", "└─> return from innerFunc()"]);
|
165
|
+
return setDebugging(false);
|
166
|
+
})();
|
167
|
+
|
168
|
+
// ---------------------------------------------------------------------------
|
169
|
+
(function() {
|
170
|
+
setDebugging('get');
|
171
|
+
simple.truthy(188, funcMatch('get'));
|
172
|
+
simple.truthy(189, funcMatch('StringInput.get'));
|
173
|
+
return setDebugging(false);
|
174
|
+
})();
|
175
|
+
|
176
|
+
// ---------------------------------------------------------------------------
|
177
|
+
(function() {
|
178
|
+
var line;
|
179
|
+
resetDebugging();
|
180
|
+
setDebugging(true);
|
181
|
+
lLines = [];
|
182
|
+
line = 'first line';
|
183
|
+
debug(`line is ${OL(line)}`);
|
184
|
+
simple.equal(203, lLines.length, 1);
|
185
|
+
simple.equal(204, lLines, ["line is 'first line'"]);
|
186
|
+
return setDebugging(false);
|
187
|
+
})();
|
188
|
+
|
189
|
+
// ---------------------------------------------------------------------------
|
190
|
+
(function() {
|
191
|
+
var obj;
|
192
|
+
resetDebugging();
|
193
|
+
setDebugging(true);
|
194
|
+
lLines = [];
|
195
|
+
obj = {
|
196
|
+
first: "this is the first item in the hash",
|
197
|
+
second: "this is the second item in the hash"
|
198
|
+
};
|
199
|
+
debug('enter myfunc');
|
200
|
+
debug('return from myfunc', obj);
|
201
|
+
debug("Answer is 42");
|
202
|
+
return simple.equal(225, lLines, ["enter myfunc", "└─> return from myfunc:", " ---", " first: this is the first item in the hash", " second: this is the second item in the hash", "Answer is 42"]);
|
203
|
+
})();
|
204
|
+
|
205
|
+
// ---------------------------------------------------------------------------
|
206
|
+
(function() {
|
207
|
+
var longBlock;
|
208
|
+
resetDebugging();
|
209
|
+
setDebugging(true);
|
210
|
+
lLines = [];
|
211
|
+
longBlock = `this is one very long line
|
212
|
+
this is another very long line`;
|
213
|
+
debug('enter myfunc');
|
214
|
+
debug('return from myfunc', longBlock);
|
215
|
+
debug("Answer is 42");
|
216
|
+
return simple.equal(250, lLines, ["enter myfunc", "└─> return from myfunc:", " ==========================================", " this is one very long line", " this is another very long line", " ==========================================", "Answer is 42"]);
|
217
|
+
})();
|
218
|
+
|
219
|
+
// ---------------------------------------------------------------------------
|
220
|
+
(function() {
|
221
|
+
var block;
|
222
|
+
resetDebugging();
|
223
|
+
setDebugging('get');
|
224
|
+
block = `enter myfunc
|
225
|
+
enter get
|
226
|
+
enter fetch
|
227
|
+
return from fetch
|
228
|
+
return from get
|
229
|
+
enter nofunc
|
230
|
+
return from nofunc
|
231
|
+
enter get
|
232
|
+
something
|
233
|
+
return from get
|
234
|
+
return from myfunc`;
|
235
|
+
return tester.equal(279, block, `enter get
|
236
|
+
│ enter fetch
|
237
|
+
│ └─> return from fetch
|
238
|
+
└─> return from get
|
239
|
+
enter get
|
240
|
+
│ something
|
241
|
+
└─> return from get`);
|
242
|
+
})();
|
@@ -11,8 +11,9 @@ import {UnitTester} from '@jdeighan/coffee-utils/test'
|
|
11
11
|
import {say, undef} from '@jdeighan/coffee-utils'
|
12
12
|
import {debug} from '@jdeighan/coffee-utils/debug'
|
13
13
|
import {
|
14
|
-
mydir, mkpath,
|
14
|
+
mydir, mkpath, isFile, isDir, isSimpleFileName,
|
15
15
|
getSubDirs, pathTo, getFullPath, parseSource, fileExt,
|
16
|
+
withExt, withUnderScore,
|
16
17
|
} from '@jdeighan/coffee-utils/fs'
|
17
18
|
|
18
19
|
simple = new UnitTester()
|
@@ -22,7 +23,21 @@ assert existsSync(dir)
|
|
22
23
|
|
23
24
|
# ---------------------------------------------------------------------------
|
24
25
|
|
25
|
-
|
26
|
+
hOpt = {removeLeadingUnderScore: true}
|
27
|
+
|
28
|
+
simple.equal 21, withExt('file.py', 'svelte'), 'file.svelte'
|
29
|
+
simple.equal 21, withExt('file.py', 'svelte', hOpt), 'file.svelte'
|
30
|
+
simple.equal 21, withExt('_file.py', 'svelte', hOpt), 'file.svelte'
|
31
|
+
|
32
|
+
simple.equal 21, withExt('/bin/file.py', 'svelte'), '/bin/file.svelte'
|
33
|
+
simple.equal 21, withExt('/bin/file.py', 'svelte', hOpt), '/bin/file.svelte'
|
34
|
+
simple.equal 21, withExt('/bin/_file.py', 'svelte', hOpt), '/bin/file.svelte'
|
35
|
+
|
36
|
+
simple.equal 21, withUnderScore('file.py', 'svelte'), '_file.py'
|
37
|
+
simple.equal 21, withUnderScore('_file.py', 'svelte'), '__file.py'
|
38
|
+
|
39
|
+
simple.equal 21, withUnderScore('/bin/file.py', 'svelte'), '/bin/_file.py'
|
40
|
+
simple.equal 21, withUnderScore('/bin/_file.py', 'svelte'), '/bin/__file.py'
|
26
41
|
|
27
42
|
# ---------------------------------------------------------------------------
|
28
43
|
|
@@ -45,6 +60,7 @@ simple.equal 39, pathTo('test.txt', dir), \
|
|
45
60
|
# ---------------------------------------------------------------------------
|
46
61
|
|
47
62
|
simple.equal 44, mkpath('/usr/lib', 'johnd'), '/usr/lib/johnd'
|
63
|
+
simple.equal 48, mkpath('', '/usr/lib', undef, 'johnd'), '/usr/lib/johnd'
|
48
64
|
simple.equal 45, mkpath("c:", 'local/user'), 'c:/local/user'
|
49
65
|
simple.equal 46, mkpath('/usr', 'lib', 'local', 'johnd'),
|
50
66
|
'/usr/lib/local/johnd'
|
package/.save/fs.test.js
ADDED
@@ -0,0 +1,191 @@
|
|
1
|
+
// Generated by CoffeeScript 2.6.1
|
2
|
+
// fs.test.coffee
|
3
|
+
var dir, hOpt, myfname, mypath, rootdir, simple, wd;
|
4
|
+
|
5
|
+
import assert from 'assert';
|
6
|
+
|
7
|
+
import {
|
8
|
+
dirname,
|
9
|
+
resolve
|
10
|
+
} from 'path';
|
11
|
+
|
12
|
+
import {
|
13
|
+
fileURLToPath
|
14
|
+
} from 'url';
|
15
|
+
|
16
|
+
import {
|
17
|
+
existsSync,
|
18
|
+
copyFileSync,
|
19
|
+
readFileSync,
|
20
|
+
writeFileSync
|
21
|
+
} from 'fs';
|
22
|
+
|
23
|
+
import {
|
24
|
+
UnitTester
|
25
|
+
} from '@jdeighan/coffee-utils/test';
|
26
|
+
|
27
|
+
import {
|
28
|
+
say,
|
29
|
+
undef
|
30
|
+
} from '@jdeighan/coffee-utils';
|
31
|
+
|
32
|
+
import {
|
33
|
+
debug
|
34
|
+
} from '@jdeighan/coffee-utils/debug';
|
35
|
+
|
36
|
+
import {
|
37
|
+
mydir,
|
38
|
+
mkpath,
|
39
|
+
isFile,
|
40
|
+
isDir,
|
41
|
+
isSimpleFileName,
|
42
|
+
getSubDirs,
|
43
|
+
pathTo,
|
44
|
+
getFullPath,
|
45
|
+
parseSource,
|
46
|
+
fileExt,
|
47
|
+
withExt,
|
48
|
+
withUnderScore
|
49
|
+
} from '@jdeighan/coffee-utils/fs';
|
50
|
+
|
51
|
+
simple = new UnitTester();
|
52
|
+
|
53
|
+
dir = mydir(import.meta.url);
|
54
|
+
|
55
|
+
assert(existsSync(dir));
|
56
|
+
|
57
|
+
// ---------------------------------------------------------------------------
|
58
|
+
hOpt = {
|
59
|
+
removeLeadingUnderScore: true
|
60
|
+
};
|
61
|
+
|
62
|
+
simple.equal(21, withExt('file.py', 'svelte'), 'file.svelte');
|
63
|
+
|
64
|
+
simple.equal(21, withExt('file.py', 'svelte', hOpt), 'file.svelte');
|
65
|
+
|
66
|
+
simple.equal(21, withExt('_file.py', 'svelte', hOpt), 'file.svelte');
|
67
|
+
|
68
|
+
simple.equal(21, withExt('/bin/file.py', 'svelte'), '/bin/file.svelte');
|
69
|
+
|
70
|
+
simple.equal(21, withExt('/bin/file.py', 'svelte', hOpt), '/bin/file.svelte');
|
71
|
+
|
72
|
+
simple.equal(21, withExt('/bin/_file.py', 'svelte', hOpt), '/bin/file.svelte');
|
73
|
+
|
74
|
+
simple.equal(21, withUnderScore('file.py', 'svelte'), '_file.py');
|
75
|
+
|
76
|
+
simple.equal(21, withUnderScore('_file.py', 'svelte'), '__file.py');
|
77
|
+
|
78
|
+
simple.equal(21, withUnderScore('/bin/file.py', 'svelte'), '/bin/_file.py');
|
79
|
+
|
80
|
+
simple.equal(21, withUnderScore('/bin/_file.py', 'svelte'), '/bin/__file.py');
|
81
|
+
|
82
|
+
// ---------------------------------------------------------------------------
|
83
|
+
(function() {
|
84
|
+
var fname;
|
85
|
+
fname = 'debug.test.coffee';
|
86
|
+
simple.truthy(29, existsSync(`${dir}/${fname}`));
|
87
|
+
simple.falsy(30, existsSync(`${dir}/nosuchfile.test.coffee`));
|
88
|
+
return simple.equal(31, pathTo(`${fname}`, dir), `${dir}/${fname}`);
|
89
|
+
})();
|
90
|
+
|
91
|
+
// ---------------------------------------------------------------------------
|
92
|
+
|
93
|
+
// --- dirs are returned in alphabetical order
|
94
|
+
simple.equal(37, getSubDirs(dir), ['data', 'markdown', 'subdirectory']);
|
95
|
+
|
96
|
+
simple.equal(39, pathTo('test.txt', dir), `${dir}/subdirectory/test.txt`);
|
97
|
+
|
98
|
+
// ---------------------------------------------------------------------------
|
99
|
+
simple.equal(44, mkpath('/usr/lib', 'johnd'), '/usr/lib/johnd');
|
100
|
+
|
101
|
+
simple.equal(48, mkpath('', '/usr/lib', undef, 'johnd'), '/usr/lib/johnd');
|
102
|
+
|
103
|
+
simple.equal(45, mkpath("c:", 'local/user'), 'c:/local/user');
|
104
|
+
|
105
|
+
simple.equal(46, mkpath('/usr', 'lib', 'local', 'johnd'), '/usr/lib/local/johnd');
|
106
|
+
|
107
|
+
simple.equal(48, mkpath('\\usr\\lib', 'johnd'), '/usr/lib/johnd');
|
108
|
+
|
109
|
+
simple.equal(49, mkpath("c:", 'local\\user'), 'c:/local/user');
|
110
|
+
|
111
|
+
simple.equal(50, mkpath('\\usr', 'lib', 'local', 'johnd'), '/usr/lib/local/johnd');
|
112
|
+
|
113
|
+
simple.equal(55, mkpath('C:\\Users\\johnd', 'cielo'), 'c:/Users/johnd/cielo');
|
114
|
+
|
115
|
+
// ---------------------------------------------------------------------------
|
116
|
+
// test getFullPath()
|
117
|
+
|
118
|
+
// --- current working directory is the root dir, i.e. parent of this directory
|
119
|
+
wd = mkpath(process.cwd());
|
120
|
+
|
121
|
+
myfname = 'fs.test.coffee';
|
122
|
+
|
123
|
+
mypath = mkpath(dir, myfname);
|
124
|
+
|
125
|
+
rootdir = mkpath(resolve(dir, '..'));
|
126
|
+
|
127
|
+
assert(rootdir === wd, `${rootdir} should equal ${wd}`);
|
128
|
+
|
129
|
+
debug(`Current Working Directory = '${wd}'`);
|
130
|
+
|
131
|
+
debug(`dir = '${dir}'`);
|
132
|
+
|
133
|
+
debug(`myfname = '${myfname}'`);
|
134
|
+
|
135
|
+
debug(`mypath = '${mypath}'`);
|
136
|
+
|
137
|
+
debug(`rootdir = '${rootdir}'`);
|
138
|
+
|
139
|
+
// --- given a full path, only change \ to /
|
140
|
+
simple.equal(72, getFullPath(mypath), mypath);
|
141
|
+
|
142
|
+
// --- given a simple file name, prepend the current working directory
|
143
|
+
simple.equal(75, getFullPath(myfname), mkpath(rootdir, myfname));
|
144
|
+
|
145
|
+
// --- leading . should be resolved
|
146
|
+
simple.equal(78, getFullPath(`./${myfname}`), mkpath(rootdir, myfname));
|
147
|
+
|
148
|
+
// --- leading .. should be resolved
|
149
|
+
simple.equal(81, getFullPath(`./test/../${myfname}`), mkpath(rootdir, myfname));
|
150
|
+
|
151
|
+
simple.equal(86, parseSource('unit test'), {
|
152
|
+
filename: 'unit test',
|
153
|
+
stub: 'unit test'
|
154
|
+
});
|
155
|
+
|
156
|
+
simple.equal(91, parseSource("c:/Users/johnd/oz/src/test.js"), {
|
157
|
+
dir: 'c:/Users/johnd/oz/src',
|
158
|
+
fullpath: 'c:/Users/johnd/oz/src/test.js',
|
159
|
+
filename: 'test.js',
|
160
|
+
stub: 'test',
|
161
|
+
ext: '.js'
|
162
|
+
});
|
163
|
+
|
164
|
+
simple.equal(91, parseSource("c:\\Users\\johnd\\oz\\src\\test.js"), {
|
165
|
+
dir: 'c:/Users/johnd/oz/src',
|
166
|
+
fullpath: 'c:/Users/johnd/oz/src/test.js',
|
167
|
+
filename: 'test.js',
|
168
|
+
stub: 'test',
|
169
|
+
ext: '.js'
|
170
|
+
});
|
171
|
+
|
172
|
+
if (process.platform === 'win32') {
|
173
|
+
simple.truthy(108, isDir('c:/Users'));
|
174
|
+
simple.truthy(109, isDir('c:/Program Files'));
|
175
|
+
simple.falsy(110, isFile('c:/Users'));
|
176
|
+
simple.falsy(111, isFile('c:/Program Files'));
|
177
|
+
simple.falsy(113, isDir('c:/Windows/notepad.exe'));
|
178
|
+
simple.falsy(114, isDir('c:/Program Files/Windows Media Player/wmplayer.exe'));
|
179
|
+
simple.truthy(115, isFile('c:/Windows/notepad.exe'));
|
180
|
+
simple.truthy(116, isFile('c:/Program Files/Windows Media Player/wmplayer.exe'));
|
181
|
+
simple.truthy(118, isSimpleFileName('notepad.exe'));
|
182
|
+
simple.falsy(119, isSimpleFileName('c:/Program Files/Windows Media Player/wmplayer.exe'));
|
183
|
+
}
|
184
|
+
|
185
|
+
simple.equal(121, fileExt('file.txt'), '.txt');
|
186
|
+
|
187
|
+
simple.equal(122, fileExt('file.'), '');
|
188
|
+
|
189
|
+
simple.equal(123, fileExt('file.99'), '.99');
|
190
|
+
|
191
|
+
simple.equal(124, fileExt('file._txt'), '._txt');
|
File without changes
|