@jdeighan/coffee-utils 4.1.5 → 4.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -2
- package/src/block_utils.coffee +1 -0
- package/src/block_utils.js +1 -0
- package/src/coffee_utils.coffee +40 -2
- package/src/coffee_utils.js +43 -2
- package/src/debug_utils.coffee +1 -0
- package/src/debug_utils.js +1 -0
- package/src/fs_utils.coffee +29 -3
- package/src/fs_utils.js +33 -3
- package/src/indent_utils.coffee +4 -1
- package/src/indent_utils.js +9 -4
- package/temp.js +26 -0
- package/.save/block.test.coffee +0 -185
- package/.save/block.test.js +0 -129
- package/.save/block2.test.coffee +0 -47
- package/.save/block2.test.js +0 -64
- package/.save/debug.test.coffee +0 -290
- package/.save/debug.test.js +0 -242
- package/.save/fs.test.coffee +0 -148
- package/.save/fs.test.js +0 -191
- package/.save/indent.test.coffee +0 -130
- package/.save/indent.test.js +0 -136
- package/.save/log.test.coffee +0 -315
- package/.save/log.test.js +0 -336
- package/.save/privenv.test.coffee +0 -38
- package/.save/privenv.test.js +0 -54
- package/.save/temp.coffee +0 -19
- package/.save/temp.js +0 -28
- package/.save/tester.test.coffee +0 -75
- package/.save/tester.test.js +0 -93
- package/.save/utils.test.coffee +0 -214
- package/.save/utils.test.js +0 -319
- package/src/private_env.coffee +0 -52
- package/src/private_env.js +0 -63
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jdeighan/coffee-utils",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.1.
|
|
4
|
+
"version": "4.1.9",
|
|
5
5
|
"description": "A set of utility functions for CoffeeScript",
|
|
6
6
|
"main": "coffee_utils.js",
|
|
7
7
|
"exports": {
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
"./debug": "./src/debug_utils.js",
|
|
14
14
|
"./svelte": "./src/svelte_utils.js",
|
|
15
15
|
"./test": "./src/UnitTester.js",
|
|
16
|
-
"./privenv": "./src/private_env.js",
|
|
17
16
|
"./package.json": "./package.json"
|
|
18
17
|
},
|
|
19
18
|
"engines": {
|
package/src/block_utils.coffee
CHANGED
package/src/block_utils.js
CHANGED
|
@@ -110,6 +110,7 @@ export var joinBlocks = function(...lBlocks) {
|
|
|
110
110
|
lNonEmptyBlocks = [];
|
|
111
111
|
for (i = 0, len1 = lBlocks.length; i < len1; i++) {
|
|
112
112
|
block = lBlocks[i];
|
|
113
|
+
assert(isString(block), "joinBlocks(): block is not a string");
|
|
113
114
|
if (nonEmpty(block)) {
|
|
114
115
|
lNonEmptyBlocks.push(block);
|
|
115
116
|
}
|
package/src/coffee_utils.coffee
CHANGED
|
@@ -100,6 +100,14 @@ export isHash = (x) ->
|
|
|
100
100
|
|
|
101
101
|
return (getClassName(x) == 'Object')
|
|
102
102
|
|
|
103
|
+
# ---------------------------------------------------------------------------
|
|
104
|
+
|
|
105
|
+
export hashHasKey = (x, key) ->
|
|
106
|
+
|
|
107
|
+
assert isHash(x), "hashHasKey(): not a hash"
|
|
108
|
+
assert isString(key), "hashHasKey(): key not a string"
|
|
109
|
+
return x.hasOwnProperty(key)
|
|
110
|
+
|
|
103
111
|
# ---------------------------------------------------------------------------
|
|
104
112
|
# isEmpty
|
|
105
113
|
# - string is whitespace, array has no elements, hash has no keys
|
|
@@ -149,6 +157,7 @@ export setCommentRegexp = (regexp) ->
|
|
|
149
157
|
|
|
150
158
|
export isComment = (str) ->
|
|
151
159
|
|
|
160
|
+
assert isString(str), "isComment(): not a string"
|
|
152
161
|
return if str.match(commentRegExp) then true else false
|
|
153
162
|
|
|
154
163
|
# ---------------------------------------------------------------------------
|
|
@@ -215,13 +224,23 @@ export warn = (message) ->
|
|
|
215
224
|
|
|
216
225
|
log "WARNING: #{message}"
|
|
217
226
|
|
|
227
|
+
# ---------------------------------------------------------------------------
|
|
228
|
+
# hashToStr - stringify a hash
|
|
229
|
+
|
|
230
|
+
export hashToStr = (h) ->
|
|
231
|
+
|
|
232
|
+
return JSON.stringify(h, Object.keys(h).sort(), 3)
|
|
233
|
+
|
|
218
234
|
# ---------------------------------------------------------------------------
|
|
219
235
|
# say - print to the console (for now)
|
|
220
236
|
# later, on a web page, call alert(str)
|
|
221
237
|
|
|
222
|
-
export say = (
|
|
238
|
+
export say = (x) ->
|
|
223
239
|
|
|
224
|
-
|
|
240
|
+
if isHash(x)
|
|
241
|
+
console.log hashToStr(x)
|
|
242
|
+
else
|
|
243
|
+
console.log x
|
|
225
244
|
return
|
|
226
245
|
|
|
227
246
|
# ---------------------------------------------------------------------------
|
|
@@ -254,6 +273,7 @@ export titleLine = (title, char='=', padding=2, linelen=42) ->
|
|
|
254
273
|
|
|
255
274
|
export rtrim = (line) ->
|
|
256
275
|
|
|
276
|
+
assert isString(line), "rtrim(): line is not a string"
|
|
257
277
|
lMatches = line.match(/\s+$/)
|
|
258
278
|
if lMatches?
|
|
259
279
|
n = lMatches[0].length # num chars to remove
|
|
@@ -347,3 +367,21 @@ export extractMatches = (line, regexp, convertFunc=undef) ->
|
|
|
347
367
|
return lStrings
|
|
348
368
|
|
|
349
369
|
# ---------------------------------------------------------------------------
|
|
370
|
+
|
|
371
|
+
export envVarsWithPrefix = (prefix, hOptions={}) ->
|
|
372
|
+
# --- valid options:
|
|
373
|
+
# stripPrefix
|
|
374
|
+
|
|
375
|
+
assert prefix, "envVarsWithPrefix: empty prefix!"
|
|
376
|
+
plen = prefix.length
|
|
377
|
+
h = {}
|
|
378
|
+
for key in Object.keys(process.env)
|
|
379
|
+
if key.indexOf(prefix) == 0
|
|
380
|
+
if hOptions.stripPrefix
|
|
381
|
+
h[key.substr(plen)] = process.env[key]
|
|
382
|
+
else
|
|
383
|
+
h[key] = process.env[key]
|
|
384
|
+
return h
|
|
385
|
+
|
|
386
|
+
# ---------------------------------------------------------------------------
|
|
387
|
+
|
package/src/coffee_utils.js
CHANGED
|
@@ -97,6 +97,13 @@ export var isHash = function(x) {
|
|
|
97
97
|
return getClassName(x) === 'Object';
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
export var hashHasKey = function(x, key) {
|
|
102
|
+
assert(isHash(x), "hashHasKey(): not a hash");
|
|
103
|
+
assert(isString(key), "hashHasKey(): key not a string");
|
|
104
|
+
return x.hasOwnProperty(key);
|
|
105
|
+
};
|
|
106
|
+
|
|
100
107
|
// ---------------------------------------------------------------------------
|
|
101
108
|
// isEmpty
|
|
102
109
|
// - string is whitespace, array has no elements, hash has no keys
|
|
@@ -147,6 +154,7 @@ export var setCommentRegexp = function(regexp) {
|
|
|
147
154
|
|
|
148
155
|
// ---------------------------------------------------------------------------
|
|
149
156
|
export var isComment = function(str) {
|
|
157
|
+
assert(isString(str), "isComment(): not a string");
|
|
150
158
|
if (str.match(commentRegExp)) {
|
|
151
159
|
return true;
|
|
152
160
|
} else {
|
|
@@ -221,11 +229,21 @@ export var warn = function(message) {
|
|
|
221
229
|
return log(`WARNING: ${message}`);
|
|
222
230
|
};
|
|
223
231
|
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
233
|
+
// hashToStr - stringify a hash
|
|
234
|
+
export var hashToStr = function(h) {
|
|
235
|
+
return JSON.stringify(h, Object.keys(h).sort(), 3);
|
|
236
|
+
};
|
|
237
|
+
|
|
224
238
|
// ---------------------------------------------------------------------------
|
|
225
239
|
// say - print to the console (for now)
|
|
226
240
|
// later, on a web page, call alert(str)
|
|
227
|
-
export var say = function(
|
|
228
|
-
|
|
241
|
+
export var say = function(x) {
|
|
242
|
+
if (isHash(x)) {
|
|
243
|
+
console.log(hashToStr(x));
|
|
244
|
+
} else {
|
|
245
|
+
console.log(x);
|
|
246
|
+
}
|
|
229
247
|
};
|
|
230
248
|
|
|
231
249
|
// ---------------------------------------------------------------------------
|
|
@@ -256,6 +274,7 @@ export var titleLine = function(title, char = '=', padding = 2, linelen = 42) {
|
|
|
256
274
|
// rtrim - strip trailing whitespace
|
|
257
275
|
export var rtrim = function(line) {
|
|
258
276
|
var lMatches, n;
|
|
277
|
+
assert(isString(line), "rtrim(): line is not a string");
|
|
259
278
|
lMatches = line.match(/\s+$/);
|
|
260
279
|
if (lMatches != null) {
|
|
261
280
|
n = lMatches[0].length; // num chars to remove
|
|
@@ -382,3 +401,25 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
|
382
401
|
};
|
|
383
402
|
|
|
384
403
|
// ---------------------------------------------------------------------------
|
|
404
|
+
export var envVarsWithPrefix = function(prefix, hOptions = {}) {
|
|
405
|
+
var h, i, key, len, plen, ref;
|
|
406
|
+
// --- valid options:
|
|
407
|
+
// stripPrefix
|
|
408
|
+
assert(prefix, "envVarsWithPrefix: empty prefix!");
|
|
409
|
+
plen = prefix.length;
|
|
410
|
+
h = {};
|
|
411
|
+
ref = Object.keys(process.env);
|
|
412
|
+
for (i = 0, len = ref.length; i < len; i++) {
|
|
413
|
+
key = ref[i];
|
|
414
|
+
if (key.indexOf(prefix) === 0) {
|
|
415
|
+
if (hOptions.stripPrefix) {
|
|
416
|
+
h[key.substr(plen)] = process.env[key];
|
|
417
|
+
} else {
|
|
418
|
+
h[key] = process.env[key];
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return h;
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
// ---------------------------------------------------------------------------
|
package/src/debug_utils.coffee
CHANGED
package/src/debug_utils.js
CHANGED
|
@@ -204,6 +204,7 @@ reMethod = /^([A-Za-z_][A-Za-z0-9_]*)\.([A-Za-z_][A-Za-z0-9_]*)$/;
|
|
|
204
204
|
// --- export only to allow unit tests
|
|
205
205
|
export var funcMatch = function(curFunc) {
|
|
206
206
|
var _, cls, lMatches, meth;
|
|
207
|
+
assert(isString(curFunc), "funcMatch(): not a string");
|
|
207
208
|
if (lDebugFuncs.includes(curFunc)) {
|
|
208
209
|
return true;
|
|
209
210
|
} else if ((lMatches = curFunc.match(reMethod)) && ([_, cls, meth] = lMatches) && lDebugFuncs.includes(meth)) {
|
package/src/fs_utils.coffee
CHANGED
|
@@ -6,7 +6,7 @@ import fs from 'fs'
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
assert, undef, pass, rtrim, error, nonEmpty,
|
|
9
|
-
isRegExp, isFunction, croak,
|
|
9
|
+
isString, isRegExp, isFunction, croak,
|
|
10
10
|
} from '@jdeighan/coffee-utils'
|
|
11
11
|
import {log} from '@jdeighan/coffee-utils/log'
|
|
12
12
|
import {debug} from '@jdeighan/coffee-utils/debug'
|
|
@@ -34,6 +34,7 @@ export isSimpleFileName = (path) ->
|
|
|
34
34
|
|
|
35
35
|
export fileExt = (path) ->
|
|
36
36
|
|
|
37
|
+
assert isString(path), "fileExt(): path not a string"
|
|
37
38
|
if lMatches = path.match(/\.[A-Za-z0-9_]+$/)
|
|
38
39
|
return lMatches[0]
|
|
39
40
|
else
|
|
@@ -45,8 +46,14 @@ export fileExt = (path) ->
|
|
|
45
46
|
|
|
46
47
|
export mydir = (url) ->
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
debug "url = #{url}"
|
|
50
|
+
path = urllib.fileURLToPath(url)
|
|
51
|
+
debug "path = #{path}"
|
|
52
|
+
dir = pathlib.dirname(path)
|
|
53
|
+
debug "dir = #{dir}"
|
|
54
|
+
final = mkpath(dir)
|
|
55
|
+
debug "final = #{final}"
|
|
56
|
+
return final
|
|
50
57
|
|
|
51
58
|
# ---------------------------------------------------------------------------
|
|
52
59
|
|
|
@@ -129,6 +136,25 @@ export withExt = (path, newExt, hOptions={}) ->
|
|
|
129
136
|
name = name.substr(1)
|
|
130
137
|
return mkpath(dir, "#{name}#{newExt}")
|
|
131
138
|
|
|
139
|
+
# ---------------------------------------------------------------------------
|
|
140
|
+
# removeFileWithExt - remove file with different ext
|
|
141
|
+
|
|
142
|
+
export removeFileWithExt = (path, newExt, hOptions={}) ->
|
|
143
|
+
# --- Valid options:
|
|
144
|
+
# doLog
|
|
145
|
+
# removeLeadingUnderScore
|
|
146
|
+
|
|
147
|
+
fullpath = withExt(path, newExt, hOptions)
|
|
148
|
+
try
|
|
149
|
+
fs.unlinkSync fullpath
|
|
150
|
+
if hOptions.doLog
|
|
151
|
+
log " unlink #{filename}"
|
|
152
|
+
success = true
|
|
153
|
+
catch err
|
|
154
|
+
log " UNLINK FAILED: #{err.message}"
|
|
155
|
+
success = false
|
|
156
|
+
return success
|
|
157
|
+
|
|
132
158
|
# ---------------------------------------------------------------------------
|
|
133
159
|
# withUnderScore - add '_' to file name
|
|
134
160
|
|
package/src/fs_utils.js
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
rtrim,
|
|
14
14
|
error,
|
|
15
15
|
nonEmpty,
|
|
16
|
+
isString,
|
|
16
17
|
isRegExp,
|
|
17
18
|
isFunction,
|
|
18
19
|
croak
|
|
@@ -46,6 +47,7 @@ export var isSimpleFileName = function(path) {
|
|
|
46
47
|
// ---------------------------------------------------------------------------
|
|
47
48
|
export var fileExt = function(path) {
|
|
48
49
|
var lMatches;
|
|
50
|
+
assert(isString(path), "fileExt(): path not a string");
|
|
49
51
|
if (lMatches = path.match(/\.[A-Za-z0-9_]+$/)) {
|
|
50
52
|
return lMatches[0];
|
|
51
53
|
} else {
|
|
@@ -57,9 +59,15 @@ export var fileExt = function(path) {
|
|
|
57
59
|
// mydir() - pass argument `import.meta.url` and it will return
|
|
58
60
|
// the directory your file is in
|
|
59
61
|
export var mydir = function(url) {
|
|
60
|
-
var dir;
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
var dir, final, path;
|
|
63
|
+
debug(`url = ${url}`);
|
|
64
|
+
path = urllib.fileURLToPath(url);
|
|
65
|
+
debug(`path = ${path}`);
|
|
66
|
+
dir = pathlib.dirname(path);
|
|
67
|
+
debug(`dir = ${dir}`);
|
|
68
|
+
final = mkpath(dir);
|
|
69
|
+
debug(`final = ${final}`);
|
|
70
|
+
return final;
|
|
63
71
|
};
|
|
64
72
|
|
|
65
73
|
// ---------------------------------------------------------------------------
|
|
@@ -148,6 +156,28 @@ export var withExt = function(path, newExt, hOptions = {}) {
|
|
|
148
156
|
return mkpath(dir, `${name}${newExt}`);
|
|
149
157
|
};
|
|
150
158
|
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// removeFileWithExt - remove file with different ext
|
|
161
|
+
export var removeFileWithExt = function(path, newExt, hOptions = {}) {
|
|
162
|
+
var err, fullpath, success;
|
|
163
|
+
// --- Valid options:
|
|
164
|
+
// doLog
|
|
165
|
+
// removeLeadingUnderScore
|
|
166
|
+
fullpath = withExt(path, newExt, hOptions);
|
|
167
|
+
try {
|
|
168
|
+
fs.unlinkSync(fullpath);
|
|
169
|
+
if (hOptions.doLog) {
|
|
170
|
+
log(` unlink ${filename}`);
|
|
171
|
+
}
|
|
172
|
+
success = true;
|
|
173
|
+
} catch (error1) {
|
|
174
|
+
err = error1;
|
|
175
|
+
log(` UNLINK FAILED: ${err.message}`);
|
|
176
|
+
success = false;
|
|
177
|
+
}
|
|
178
|
+
return success;
|
|
179
|
+
};
|
|
180
|
+
|
|
151
181
|
// ---------------------------------------------------------------------------
|
|
152
182
|
// withUnderScore - add '_' to file name
|
|
153
183
|
export var withUnderScore = function(path) {
|
package/src/indent_utils.coffee
CHANGED
|
@@ -14,7 +14,7 @@ import {arrayToBlock, blockToArray} from '@jdeighan/coffee-utils/block'
|
|
|
14
14
|
export splitLine = (line) ->
|
|
15
15
|
|
|
16
16
|
assert line?, "splitLine(): line is undef"
|
|
17
|
-
assert (
|
|
17
|
+
assert isString(line), "splitLine(): line is not a string"
|
|
18
18
|
line = rtrim(line)
|
|
19
19
|
lMatches = line.match(/^(\s*)(.*)$/)
|
|
20
20
|
return [lMatches[1].length, lMatches[2]]
|
|
@@ -34,6 +34,7 @@ export indentation = (level) ->
|
|
|
34
34
|
|
|
35
35
|
export indentLevel = (str) ->
|
|
36
36
|
|
|
37
|
+
assert isString(str), "indentLevel(): not a string"
|
|
37
38
|
lMatches = str.match(/^\t*/)
|
|
38
39
|
return lMatches[0].length
|
|
39
40
|
|
|
@@ -76,6 +77,8 @@ export undented = (text, level=undef) ->
|
|
|
76
77
|
return ''
|
|
77
78
|
else if isArray(text)
|
|
78
79
|
lLines = text
|
|
80
|
+
for line in lLines
|
|
81
|
+
assert isString(line), "undented(): input array is not all strings"
|
|
79
82
|
if (lLines.length == 0)
|
|
80
83
|
return []
|
|
81
84
|
else
|
package/src/indent_utils.js
CHANGED
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
export var splitLine = function(line) {
|
|
26
26
|
var lMatches;
|
|
27
27
|
assert(line != null, "splitLine(): line is undef");
|
|
28
|
-
assert(
|
|
28
|
+
assert(isString(line), "splitLine(): line is not a string");
|
|
29
29
|
line = rtrim(line);
|
|
30
30
|
lMatches = line.match(/^(\s*)(.*)$/);
|
|
31
31
|
return [lMatches[1].length, lMatches[2]];
|
|
@@ -44,6 +44,7 @@ export var indentation = function(level) {
|
|
|
44
44
|
// it's OK if the string is ONLY indentation
|
|
45
45
|
export var indentLevel = function(str) {
|
|
46
46
|
var lMatches;
|
|
47
|
+
assert(isString(str), "indentLevel(): not a string");
|
|
47
48
|
lMatches = str.match(/^\t*/);
|
|
48
49
|
return lMatches[0].length;
|
|
49
50
|
};
|
|
@@ -84,7 +85,7 @@ export var indented = function(input, level = 0) {
|
|
|
84
85
|
// indentation is removed
|
|
85
86
|
// - returns same type as text, i.e. either string or array
|
|
86
87
|
export var undented = function(text, level = undef) {
|
|
87
|
-
var i, lLines, lMatches, lNewLines, len, line, nToRemove, toRemove;
|
|
88
|
+
var i, j, lLines, lMatches, lNewLines, len, len1, line, nToRemove, toRemove;
|
|
88
89
|
if ((level != null) && (level === 0)) {
|
|
89
90
|
return text;
|
|
90
91
|
}
|
|
@@ -95,6 +96,10 @@ export var undented = function(text, level = undef) {
|
|
|
95
96
|
}
|
|
96
97
|
} else if (isArray(text)) {
|
|
97
98
|
lLines = text;
|
|
99
|
+
for (i = 0, len = lLines.length; i < len; i++) {
|
|
100
|
+
line = lLines[i];
|
|
101
|
+
assert(isString(line), "undented(): input array is not all strings");
|
|
102
|
+
}
|
|
98
103
|
if (lLines.length === 0) {
|
|
99
104
|
return [];
|
|
100
105
|
}
|
|
@@ -111,8 +116,8 @@ export var undented = function(text, level = undef) {
|
|
|
111
116
|
}
|
|
112
117
|
nToRemove = toRemove.length;
|
|
113
118
|
lNewLines = [];
|
|
114
|
-
for (
|
|
115
|
-
line = lLines[
|
|
119
|
+
for (j = 0, len1 = lLines.length; j < len1; j++) {
|
|
120
|
+
line = lLines[j];
|
|
116
121
|
if (isEmpty(line)) {
|
|
117
122
|
lNewLines.push('');
|
|
118
123
|
} else {
|
package/temp.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Generated by CoffeeScript 2.6.1
|
|
2
|
+
// temp.coffee
|
|
3
|
+
var dir;
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
say
|
|
7
|
+
} from '@jdeighan/coffee-utils';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
log
|
|
11
|
+
} from '@jdeighan/coffee-utils/log';
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
setDebugging
|
|
15
|
+
} from '@jdeighan/coffee-utils/debug';
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
mydir,
|
|
19
|
+
mkpath
|
|
20
|
+
} from '@jdeighan/coffee-utils/fs';
|
|
21
|
+
|
|
22
|
+
setDebugging(true);
|
|
23
|
+
|
|
24
|
+
dir = mydir(import.meta.url);
|
|
25
|
+
|
|
26
|
+
say(`dir = ${dir}`);
|
package/.save/block.test.coffee
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# block.test.coffee
|
|
2
|
-
|
|
3
|
-
import assert from 'assert'
|
|
4
|
-
|
|
5
|
-
import {UnitTester} from '@jdeighan/coffee-utils/test'
|
|
6
|
-
import {
|
|
7
|
-
blockToArray, arrayToBlock, firstLine, remainingLines,
|
|
8
|
-
normalizeBlock, truncateBlock,
|
|
9
|
-
joinBlocks, forEachLine, forEachBlock, forEachSetOfBlocks,
|
|
10
|
-
} from '@jdeighan/coffee-utils/block'
|
|
11
|
-
|
|
12
|
-
simple = new UnitTester()
|
|
13
|
-
|
|
14
|
-
# ---------------------------------------------------------------------------
|
|
15
|
-
|
|
16
|
-
simple.equal 108, blockToArray("abc\nxyz\n"), [
|
|
17
|
-
'abc'
|
|
18
|
-
'xyz'
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
simple.equal 113, blockToArray("abc\nxyz\n\n\n\n"), [
|
|
22
|
-
'abc'
|
|
23
|
-
'xyz'
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
simple.equal 118, blockToArray("abc\n\nxyz\n"), [
|
|
27
|
-
'abc'
|
|
28
|
-
''
|
|
29
|
-
'xyz'
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
# ---------------------------------------------------------------------------
|
|
33
|
-
|
|
34
|
-
simple.equal 126, arrayToBlock(['a','b','c']), "a\nb\nc\n"
|
|
35
|
-
|
|
36
|
-
# ---------------------------------------------------------------------------
|
|
37
|
-
|
|
38
|
-
simple.equal 225, firstLine("""
|
|
39
|
-
#starbucks
|
|
40
|
-
do this
|
|
41
|
-
do that
|
|
42
|
-
"""), '#starbucks'
|
|
43
|
-
|
|
44
|
-
# ---------------------------------------------------------------------------
|
|
45
|
-
|
|
46
|
-
simple.equal 225, remainingLines("""
|
|
47
|
-
#starbucks
|
|
48
|
-
do this
|
|
49
|
-
do that
|
|
50
|
-
"""), """
|
|
51
|
-
do this
|
|
52
|
-
do that
|
|
53
|
-
"""
|
|
54
|
-
|
|
55
|
-
# ---------------------------------------------------------------------------
|
|
56
|
-
|
|
57
|
-
(() ->
|
|
58
|
-
str = joinBlocks('import me', '', 'do this\ndo that')
|
|
59
|
-
simple.equal 17, str, """
|
|
60
|
-
import me
|
|
61
|
-
do this
|
|
62
|
-
do that
|
|
63
|
-
"""
|
|
64
|
-
)()
|
|
65
|
-
|
|
66
|
-
# ---------------------------------------------------------------------------
|
|
67
|
-
|
|
68
|
-
simple.equal 49, normalizeBlock("""
|
|
69
|
-
line 1
|
|
70
|
-
line 2
|
|
71
|
-
"""), """
|
|
72
|
-
line 1
|
|
73
|
-
line 2
|
|
74
|
-
""" + '\n'
|
|
75
|
-
|
|
76
|
-
simple.equal 57, normalizeBlock("""
|
|
77
|
-
line 1
|
|
78
|
-
|
|
79
|
-
line 2
|
|
80
|
-
"""), """
|
|
81
|
-
line 1
|
|
82
|
-
line 2
|
|
83
|
-
""" + '\n'
|
|
84
|
-
|
|
85
|
-
simple.equal 66, normalizeBlock("""
|
|
86
|
-
|
|
87
|
-
line 1
|
|
88
|
-
|
|
89
|
-
line 2
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
"""), """
|
|
93
|
-
line 1
|
|
94
|
-
line 2
|
|
95
|
-
""" + '\n'
|
|
96
|
-
|
|
97
|
-
# ---------------------------------------------------------------------------
|
|
98
|
-
|
|
99
|
-
simple.equal 96, truncateBlock("""
|
|
100
|
-
line 1
|
|
101
|
-
line 2
|
|
102
|
-
line 3
|
|
103
|
-
line 4
|
|
104
|
-
""", 2), """
|
|
105
|
-
line 1
|
|
106
|
-
line 2
|
|
107
|
-
""" + '\n'
|
|
108
|
-
|
|
109
|
-
# ---------------------------------------------------------------------------
|
|
110
|
-
|
|
111
|
-
(() ->
|
|
112
|
-
lBlocks = [
|
|
113
|
-
"import {say} from '@jdeighan/coffee-utils'",
|
|
114
|
-
"",
|
|
115
|
-
"<script>\n\tx = 42\n</script>",
|
|
116
|
-
"",
|
|
117
|
-
]
|
|
118
|
-
str = joinBlocks(lBlocks...)
|
|
119
|
-
simple.equal 34, str, """
|
|
120
|
-
import {say} from '@jdeighan/coffee-utils'
|
|
121
|
-
<script>
|
|
122
|
-
x = 42
|
|
123
|
-
</script>
|
|
124
|
-
"""
|
|
125
|
-
)()
|
|
126
|
-
|
|
127
|
-
# ---------------------------------------------------------------------------
|
|
128
|
-
|
|
129
|
-
(() ->
|
|
130
|
-
lImports = [
|
|
131
|
-
"import {say} from '@jdeighan/coffee-utils'",
|
|
132
|
-
]
|
|
133
|
-
code = """
|
|
134
|
-
if (x==42)
|
|
135
|
-
log "line 2 in unit test"
|
|
136
|
-
"""
|
|
137
|
-
str = joinBlocks(lImports..., code)
|
|
138
|
-
simple.equal 34, str, """
|
|
139
|
-
|
|
140
|
-
import {say} from '@jdeighan/coffee-utils'
|
|
141
|
-
if (x==42)
|
|
142
|
-
log "line 2 in unit test"
|
|
143
|
-
"""
|
|
144
|
-
)()
|
|
145
|
-
|
|
146
|
-
# ---------------------------------------------------------------------------
|
|
147
|
-
# test forEachLine()
|
|
148
|
-
|
|
149
|
-
(() ->
|
|
150
|
-
lLines = []
|
|
151
|
-
|
|
152
|
-
callback = (line) ->
|
|
153
|
-
lLines.push line
|
|
154
|
-
return
|
|
155
|
-
|
|
156
|
-
filepath = "c:/Users/johnd/coffee-utils/test/data/file2.txt"
|
|
157
|
-
await forEachLine filepath, callback
|
|
158
|
-
|
|
159
|
-
simple.equal 55, lLines, [
|
|
160
|
-
"abc",
|
|
161
|
-
"def",
|
|
162
|
-
"ghi",
|
|
163
|
-
"jkl",
|
|
164
|
-
]
|
|
165
|
-
)()
|
|
166
|
-
|
|
167
|
-
# ---------------------------------------------------------------------------
|
|
168
|
-
# test forEachBlock()
|
|
169
|
-
|
|
170
|
-
(() ->
|
|
171
|
-
lBlocks = []
|
|
172
|
-
|
|
173
|
-
callback = (block) ->
|
|
174
|
-
lBlocks.push block
|
|
175
|
-
return
|
|
176
|
-
|
|
177
|
-
filepath = "c:/Users/johnd/coffee-utils/test/data/file3.txt"
|
|
178
|
-
await forEachBlock filepath, callback
|
|
179
|
-
|
|
180
|
-
simple.equal 76, lBlocks, [
|
|
181
|
-
"abc\ndef",
|
|
182
|
-
"abc\ndef\nghi",
|
|
183
|
-
"abc\ndef\nghi\njkl",
|
|
184
|
-
]
|
|
185
|
-
)()
|