@neurodevs/meta-node 0.5.0 → 0.6.1
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/build/__tests__/AbstractPackageTest.d.ts +5 -0
- package/build/__tests__/AbstractPackageTest.js +16 -0
- package/build/__tests__/AbstractPackageTest.js.map +1 -0
- package/build/__tests__/modules/GitAutocloner.test.d.ts +2 -3
- package/build/__tests__/modules/GitAutocloner.test.js +3 -38
- package/build/__tests__/modules/GitAutocloner.test.js.map +1 -1
- package/build/__tests__/modules/ImplAutomodule.test.d.ts +13 -4
- package/build/__tests__/modules/ImplAutomodule.test.js +96 -4
- package/build/__tests__/modules/ImplAutomodule.test.js.map +1 -1
- package/build/__tests__/modules/NpmAutopackage.test.d.ts +2 -2
- package/build/__tests__/modules/NpmAutopackage.test.js +3 -35
- package/build/__tests__/modules/NpmAutopackage.test.js.map +1 -1
- package/build/__tests__/modules/PackageAutodocumenter.test.d.ts +7 -0
- package/build/__tests__/modules/PackageAutodocumenter.test.js +31 -0
- package/build/__tests__/modules/PackageAutodocumenter.test.js.map +1 -0
- package/build/index.d.ts +6 -0
- package/build/index.js +11 -1
- package/build/index.js.map +1 -1
- package/build/modules/ImplAutomodule.d.ts +16 -1
- package/build/modules/ImplAutomodule.js +76 -3
- package/build/modules/ImplAutomodule.js.map +1 -1
- package/build/modules/PackageAutodocumenter.d.ts +8 -0
- package/build/modules/PackageAutodocumenter.js +10 -0
- package/build/modules/PackageAutodocumenter.js.map +1 -0
- package/build/scripts/runAutomodule.js +3 -2
- package/build/scripts/runAutomodule.js.map +1 -1
- package/build/testDoubles/Autodocumenter/FakeAutodocumenter.d.ts +6 -0
- package/build/testDoubles/Autodocumenter/FakeAutodocumenter.js +13 -0
- package/build/testDoubles/Autodocumenter/FakeAutodocumenter.js.map +1 -0
- package/build/testDoubles/fs/fakeReadFile.d.ts +5 -0
- package/build/testDoubles/fs/fakeReadFile.js +20 -0
- package/build/testDoubles/fs/fakeReadFile.js.map +1 -0
- package/build/testDoubles/fs/fakeWriteFile.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/AbstractPackageTest.ts +11 -0
- package/src/__tests__/modules/GitAutocloner.test.ts +3 -10
- package/src/__tests__/modules/ImplAutomodule.test.ts +123 -9
- package/src/__tests__/modules/NpmAutopackage.test.ts +3 -6
- package/src/__tests__/modules/PackageAutodocumenter.test.ts +24 -0
- package/src/index.ts +11 -0
- package/src/modules/ImplAutomodule.ts +102 -6
- package/src/modules/PackageAutodocumenter.ts +13 -0
- package/src/scripts/runAutomodule.ts +4 -2
- package/src/testDoubles/Autodocumenter/FakeAutodocumenter.ts +13 -0
- package/src/testDoubles/fs/fakeReadFile.ts +18 -0
- package/src/testDoubles/fs/fakeWriteFile.ts +4 -1
|
@@ -8,9 +8,11 @@ const path_1 = __importDefault(require("path"));
|
|
|
8
8
|
const pathExists_1 = __importDefault(require("./pathExists"));
|
|
9
9
|
class ImplAutomodule {
|
|
10
10
|
constructor(options) {
|
|
11
|
-
|
|
11
|
+
this.indexFilePath = './src/index.ts';
|
|
12
|
+
const { testSaveDir, moduleSaveDir, fakeSaveDir, interfaceName, implName, } = options;
|
|
12
13
|
this.testSaveDir = testSaveDir;
|
|
13
14
|
this.moduleSaveDir = moduleSaveDir;
|
|
15
|
+
this.fakeSaveDir = fakeSaveDir;
|
|
14
16
|
this.interfaceName = interfaceName;
|
|
15
17
|
this.implName = implName;
|
|
16
18
|
}
|
|
@@ -20,21 +22,33 @@ class ImplAutomodule {
|
|
|
20
22
|
async run() {
|
|
21
23
|
await this.throwIfTestDirDoesNotExist();
|
|
22
24
|
await this.throwIfModuleDirDoesNotExist();
|
|
25
|
+
await this.throwIfFakeDirDoesNotExist();
|
|
23
26
|
await this.createTestFile();
|
|
24
27
|
await this.createModuleFile();
|
|
28
|
+
await this.createFakeFile();
|
|
29
|
+
await this.updateIndexFileExports();
|
|
25
30
|
}
|
|
26
31
|
async throwIfTestDirDoesNotExist() {
|
|
27
32
|
const testDirExists = await this.pathExists(this.testSaveDir);
|
|
28
33
|
if (!testDirExists) {
|
|
29
|
-
throw
|
|
34
|
+
this.throw(`testSaveDir does not exist: ${this.testSaveDir}!`);
|
|
30
35
|
}
|
|
31
36
|
}
|
|
32
37
|
async throwIfModuleDirDoesNotExist() {
|
|
33
38
|
const moduleDirExists = await this.pathExists(this.moduleSaveDir);
|
|
34
39
|
if (!moduleDirExists) {
|
|
35
|
-
throw
|
|
40
|
+
this.throw(`moduleSaveDir does not exist: ${this.moduleSaveDir}!`);
|
|
36
41
|
}
|
|
37
42
|
}
|
|
43
|
+
async throwIfFakeDirDoesNotExist() {
|
|
44
|
+
const fakeDirExists = await this.pathExists(this.fakeSaveDir);
|
|
45
|
+
if (!fakeDirExists) {
|
|
46
|
+
this.throw(`fakeSaveDir does not exist: ${this.fakeSaveDir}!`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw(err) {
|
|
50
|
+
throw new Error(err);
|
|
51
|
+
}
|
|
38
52
|
async createTestFile() {
|
|
39
53
|
await this.writeFile(this.testFileName, this.testFilePattern);
|
|
40
54
|
}
|
|
@@ -47,9 +61,25 @@ class ImplAutomodule {
|
|
|
47
61
|
get moduleFileName() {
|
|
48
62
|
return path_1.default.join(this.moduleSaveDir, `${this.implName}.ts`);
|
|
49
63
|
}
|
|
64
|
+
async createFakeFile() {
|
|
65
|
+
await this.writeFile(this.fakeFileName, this.fakeFilePattern);
|
|
66
|
+
}
|
|
67
|
+
get fakeFileName() {
|
|
68
|
+
return path_1.default.join(this.fakeSaveDir, `Fake${this.interfaceName}.ts`);
|
|
69
|
+
}
|
|
70
|
+
async updateIndexFileExports() {
|
|
71
|
+
this.originalIndexFile = await this.loadOriginalIndexFile();
|
|
72
|
+
await this.writeFile(this.indexFilePath, this.sortedIndexFile);
|
|
73
|
+
}
|
|
74
|
+
async loadOriginalIndexFile() {
|
|
75
|
+
return await this.readFile(this.indexFilePath, 'utf-8');
|
|
76
|
+
}
|
|
50
77
|
get pathExists() {
|
|
51
78
|
return ImplAutomodule.pathExists;
|
|
52
79
|
}
|
|
80
|
+
get readFile() {
|
|
81
|
+
return ImplAutomodule.readFile;
|
|
82
|
+
}
|
|
53
83
|
get writeFile() {
|
|
54
84
|
return ImplAutomodule.writeFile;
|
|
55
85
|
}
|
|
@@ -95,8 +125,51 @@ class ImplAutomodule {
|
|
|
95
125
|
export type ${this.interfaceName}Constructor = new () => ${this.interfaceName}
|
|
96
126
|
`;
|
|
97
127
|
}
|
|
128
|
+
get fakeFilePattern() {
|
|
129
|
+
return `
|
|
130
|
+
import { ${this.interfaceName} } from '../../modules/${this.implName}'
|
|
131
|
+
|
|
132
|
+
export default class Fake${this.interfaceName} implements ${this.interfaceName} {
|
|
133
|
+
public static numCallsToConstructor = 0
|
|
134
|
+
|
|
135
|
+
public constructor() {
|
|
136
|
+
Fake${this.interfaceName}.numCallsToConstructor++
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
public static resetTestDouble() {
|
|
140
|
+
Fake${this.interfaceName}.numCallsToConstructor = 0
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
`;
|
|
144
|
+
}
|
|
145
|
+
get indexFilePattern() {
|
|
146
|
+
return `
|
|
147
|
+
${this.originalIndexFile}
|
|
148
|
+
|
|
149
|
+
// ${this.interfaceName}
|
|
150
|
+
|
|
151
|
+
export { default as ${this.implName} } from './modules/${this.implName}'
|
|
152
|
+
export * from './modules/${this.implName}'
|
|
153
|
+
|
|
154
|
+
export { default as Fake${this.interfaceName} } from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
|
|
155
|
+
export * from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
|
|
156
|
+
`;
|
|
157
|
+
}
|
|
158
|
+
get sortedIndexFile() {
|
|
159
|
+
const blocks = this.indexFilePattern
|
|
160
|
+
.split(/(?=\/\/)/)
|
|
161
|
+
.map((s) => s.trim())
|
|
162
|
+
.filter(Boolean);
|
|
163
|
+
blocks.sort((a, b) => {
|
|
164
|
+
const aKey = a.match(/^\/\/\s*([^\n]*)/)?.[1]?.trim() ?? '';
|
|
165
|
+
const bKey = b.match(/^\/\/\s*([^\n]*)/)?.[1]?.trim() ?? '';
|
|
166
|
+
return aKey.localeCompare(bKey);
|
|
167
|
+
});
|
|
168
|
+
return blocks.join('\n\n');
|
|
169
|
+
}
|
|
98
170
|
}
|
|
99
171
|
ImplAutomodule.pathExists = pathExists_1.default;
|
|
172
|
+
ImplAutomodule.readFile = promises_1.readFile;
|
|
100
173
|
ImplAutomodule.writeFile = promises_1.writeFile;
|
|
101
174
|
exports.default = ImplAutomodule;
|
|
102
175
|
//# sourceMappingURL=ImplAutomodule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImplAutomodule.js","sourceRoot":"","sources":["../../src/modules/ImplAutomodule.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"ImplAutomodule.js","sourceRoot":"","sources":["../../src/modules/ImplAutomodule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default class PackageAutodocumenter implements Autodocumenter {
|
|
2
|
+
static Class?: AutodocumenterConstructor;
|
|
3
|
+
protected constructor();
|
|
4
|
+
static Create(): PackageAutodocumenter;
|
|
5
|
+
}
|
|
6
|
+
export interface Autodocumenter {
|
|
7
|
+
}
|
|
8
|
+
export type AutodocumenterConstructor = new () => Autodocumenter;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class PackageAutodocumenter {
|
|
4
|
+
constructor() { }
|
|
5
|
+
static Create() {
|
|
6
|
+
return new (this.Class ?? this)();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.default = PackageAutodocumenter;
|
|
10
|
+
//# sourceMappingURL=PackageAutodocumenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageAutodocumenter.js","sourceRoot":"","sources":["../../src/modules/PackageAutodocumenter.ts"],"names":[],"mappings":";;AAAA,MAAqB,qBAAqB;IAGtC,gBAAyB,CAAC;IAEnB,MAAM,CAAC,MAAM;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAA;IACrC,CAAC;CACJ;AARD,wCAQC"}
|
|
@@ -9,8 +9,9 @@ async function main() {
|
|
|
9
9
|
const instance = ImplAutomodule_1.default.Create({
|
|
10
10
|
testSaveDir: '/Users/ericthecurious/dev/meta-node/src/__tests__/modules',
|
|
11
11
|
moduleSaveDir: '/Users/ericthecurious/dev/meta-node/src/modules',
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
fakeSaveDir: '/Users/ericthecurious/dev/meta-node/src/testDoubles/Autodocumenter',
|
|
13
|
+
interfaceName: 'Autodocumenter',
|
|
14
|
+
implName: 'PackageAutodocumenter',
|
|
14
15
|
});
|
|
15
16
|
await instance.run();
|
|
16
17
|
console.log('Finished running automodule!\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runAutomodule.js","sourceRoot":"","sources":["../../src/scripts/runAutomodule.ts"],"names":[],"mappings":";;;;;AAAA,+EAAsD;AAEtD,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAEtC,MAAM,QAAQ,GAAG,wBAAc,CAAC,MAAM,CAAC;QACnC,WAAW,EACP,2DAA2D;QAC/D,aAAa,EAAE,iDAAiD;QAChE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"runAutomodule.js","sourceRoot":"","sources":["../../src/scripts/runAutomodule.ts"],"names":[],"mappings":";;;;;AAAA,+EAAsD;AAEtD,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAEtC,MAAM,QAAQ,GAAG,wBAAc,CAAC,MAAM,CAAC;QACnC,WAAW,EACP,2DAA2D;QAC/D,aAAa,EAAE,iDAAiD;QAChE,WAAW,EACP,oEAAoE;QACxE,aAAa,EAAE,gBAAgB;QAC/B,QAAQ,EAAE,uBAAuB;KACpC,CAAC,CAAA;IAEF,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAA;IAEpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;AACjD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class FakeAutodocumenter {
|
|
4
|
+
constructor() {
|
|
5
|
+
FakeAutodocumenter.numCallsToConstructor++;
|
|
6
|
+
}
|
|
7
|
+
static resetTestDouble() {
|
|
8
|
+
FakeAutodocumenter.numCallsToConstructor = 0;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
FakeAutodocumenter.numCallsToConstructor = 0;
|
|
12
|
+
exports.default = FakeAutodocumenter;
|
|
13
|
+
//# sourceMappingURL=FakeAutodocumenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeAutodocumenter.js","sourceRoot":"","sources":["../../../src/testDoubles/Autodocumenter/FakeAutodocumenter.ts"],"names":[],"mappings":";;AAEA,MAAqB,kBAAkB;IAGnC;QACI,kBAAkB,CAAC,qBAAqB,EAAE,CAAA;IAC9C,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,kBAAkB,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAChD,CAAC;;AARa,wCAAqB,GAAG,CAAC,CAAA;kBADtB,kBAAkB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare let callsToReadFile: string[];
|
|
2
|
+
export declare function resetCallsToReadFile(): void;
|
|
3
|
+
export declare let fakeReadFileResult: string;
|
|
4
|
+
export declare function setFakeReadFileResult(result: string): void;
|
|
5
|
+
export default function fakeReadFile(file: string): Promise<string>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fakeReadFileResult = exports.callsToReadFile = void 0;
|
|
4
|
+
exports.resetCallsToReadFile = resetCallsToReadFile;
|
|
5
|
+
exports.setFakeReadFileResult = setFakeReadFileResult;
|
|
6
|
+
exports.default = fakeReadFile;
|
|
7
|
+
const test_utils_1 = require("@sprucelabs/test-utils");
|
|
8
|
+
exports.callsToReadFile = [];
|
|
9
|
+
function resetCallsToReadFile() {
|
|
10
|
+
exports.callsToReadFile = [];
|
|
11
|
+
}
|
|
12
|
+
exports.fakeReadFileResult = (0, test_utils_1.generateId)();
|
|
13
|
+
function setFakeReadFileResult(result) {
|
|
14
|
+
exports.fakeReadFileResult = result;
|
|
15
|
+
}
|
|
16
|
+
async function fakeReadFile(file) {
|
|
17
|
+
exports.callsToReadFile.push(file);
|
|
18
|
+
return exports.fakeReadFileResult;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=fakeReadFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fakeReadFile.js","sourceRoot":"","sources":["../../../src/testDoubles/fs/fakeReadFile.ts"],"names":[],"mappings":";;;AAIA,oDAEC;AAID,sDAEC;AAED,+BAGC;AAjBD,uDAAmD;AAExC,QAAA,eAAe,GAAa,EAAE,CAAA;AAEzC,SAAgB,oBAAoB;IAChC,uBAAe,GAAG,EAAE,CAAA;AACxB,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,uBAAU,GAAE,CAAA;AAE5C,SAAgB,qBAAqB,CAAC,MAAc;IAChD,0BAAkB,GAAG,MAAM,CAAA;AAC/B,CAAC;AAEc,KAAK,UAAU,YAAY,CAAC,IAAY;IACnD,uBAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,0BAAkB,CAAA;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeWriteFile.js","sourceRoot":"","sources":["../../../src/testDoubles/fs/fakeWriteFile.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fakeWriteFile.js","sourceRoot":"","sources":["../../../src/testDoubles/fs/fakeWriteFile.ts"],"names":[],"mappings":";;;AAKA,sDAEC;AAED,gCAEC;AAXU,QAAA,gBAAgB,GAGrB,EAAE,CAAA;AAER,SAAgB,qBAAqB;IACjC,wBAAgB,GAAG,EAAE,CAAA;AACzB,CAAC;AAEc,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY;IAClE,wBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import AbstractSpruceTest from '@sprucelabs/test-utils'
|
|
2
|
+
|
|
3
|
+
export default class AbstractPackageTest extends AbstractSpruceTest {
|
|
4
|
+
protected static async beforeEach() {
|
|
5
|
+
await super.beforeEach()
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
protected static normalize(input: string) {
|
|
9
|
+
return input.replace(/\s+/g, ' ').trim()
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { chdir } from 'process'
|
|
2
|
-
import
|
|
3
|
-
test,
|
|
4
|
-
assert,
|
|
5
|
-
generateId,
|
|
6
|
-
} from '@sprucelabs/test-utils'
|
|
2
|
+
import { test, assert, generateId } from '@sprucelabs/test-utils'
|
|
7
3
|
import GitAutocloner, {
|
|
8
4
|
Autocloner,
|
|
9
5
|
AutoclonerOptions,
|
|
10
6
|
} from '../../modules/GitAutocloner'
|
|
7
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
11
8
|
|
|
12
|
-
export default class AutoclonerTest extends
|
|
9
|
+
export default class AutoclonerTest extends AbstractPackageTest {
|
|
13
10
|
private static instance: Autocloner
|
|
14
11
|
private static originalDir = process.cwd()
|
|
15
12
|
private static originalExecSync = GitAutocloner.execSync
|
|
@@ -128,10 +125,6 @@ export default class AutoclonerTest extends AbstractSpruceTest {
|
|
|
128
125
|
return `https://github.com/${generateId()}.git`
|
|
129
126
|
}
|
|
130
127
|
|
|
131
|
-
private static normalize(input: string) {
|
|
132
|
-
return input.replace(/\s+/g, ' ').trim()
|
|
133
|
-
}
|
|
134
|
-
|
|
135
128
|
private static get gitCloneFailedMessage() {
|
|
136
129
|
return `Git clone failed for repo: ${this.urls[0]}! Error: \n\n${this.gitCloneFailedError}\n\n`
|
|
137
130
|
}
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import { writeFile } from 'fs/promises'
|
|
2
|
-
import
|
|
3
|
-
test,
|
|
4
|
-
assert,
|
|
5
|
-
generateId,
|
|
6
|
-
} from '@sprucelabs/test-utils'
|
|
1
|
+
import { readFile, writeFile } from 'fs/promises'
|
|
2
|
+
import { test, assert, generateId } from '@sprucelabs/test-utils'
|
|
7
3
|
import ImplAutomodule, { Automodule } from '../../modules/ImplAutomodule'
|
|
8
4
|
import fakePathExists, {
|
|
9
5
|
setPathShouldExist,
|
|
10
6
|
} from '../../testDoubles/fs/fakePathExists'
|
|
7
|
+
import fakeReadFile, {
|
|
8
|
+
fakeReadFileResult,
|
|
9
|
+
resetCallsToReadFile,
|
|
10
|
+
setFakeReadFileResult,
|
|
11
|
+
} from '../../testDoubles/fs/fakeReadFile'
|
|
11
12
|
import fakeWriteFile, {
|
|
12
13
|
callsToWriteFile,
|
|
13
14
|
resetCallsToWriteFile,
|
|
14
15
|
} from '../../testDoubles/fs/fakeWriteFile'
|
|
16
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
15
17
|
|
|
16
|
-
export default class ImplAutomoduleTest extends
|
|
18
|
+
export default class ImplAutomoduleTest extends AbstractPackageTest {
|
|
17
19
|
private static instance: Automodule
|
|
18
20
|
|
|
19
21
|
protected static async beforeEach() {
|
|
20
22
|
await super.beforeEach()
|
|
21
23
|
|
|
22
24
|
this.setFakePathExists()
|
|
25
|
+
this.setFakeReadFile()
|
|
23
26
|
this.setFakeWriteFile()
|
|
24
27
|
|
|
25
28
|
this.instance = this.ImplAutomodule()
|
|
@@ -56,6 +59,19 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
|
|
|
56
59
|
)
|
|
57
60
|
}
|
|
58
61
|
|
|
62
|
+
@test()
|
|
63
|
+
protected static async runThrowsIfFakeSaveDirMissing() {
|
|
64
|
+
setPathShouldExist(this.fakeSaveDir, false)
|
|
65
|
+
|
|
66
|
+
const err = await assert.doesThrowAsync(async () => await this.run())
|
|
67
|
+
|
|
68
|
+
assert.isEqual(
|
|
69
|
+
err.message,
|
|
70
|
+
`fakeSaveDir does not exist: ${this.fakeSaveDir}!`,
|
|
71
|
+
'Did not receive the expected error!'
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
|
|
59
75
|
@test()
|
|
60
76
|
protected static async createsTestFileAsExpected() {
|
|
61
77
|
await this.run()
|
|
@@ -84,6 +100,45 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
|
|
|
84
100
|
)
|
|
85
101
|
}
|
|
86
102
|
|
|
103
|
+
@test()
|
|
104
|
+
protected static async createsFakeFileAsExpected() {
|
|
105
|
+
await this.run()
|
|
106
|
+
|
|
107
|
+
assert.isEqualDeep(
|
|
108
|
+
callsToWriteFile[2],
|
|
109
|
+
{
|
|
110
|
+
file: `${this.fakeSaveDir}/Fake${this.interfaceName}.ts`,
|
|
111
|
+
data: this.fakeFilePattern,
|
|
112
|
+
},
|
|
113
|
+
'Did not write expected fake file!'
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@test()
|
|
118
|
+
protected static async sortsIndexFileExportsAlphabetically() {
|
|
119
|
+
setFakeReadFileResult(`
|
|
120
|
+
// A-${fakeReadFileResult}
|
|
121
|
+
|
|
122
|
+
// C-${fakeReadFileResult}
|
|
123
|
+
`)
|
|
124
|
+
|
|
125
|
+
await this.run()
|
|
126
|
+
|
|
127
|
+
const call = callsToWriteFile[3]
|
|
128
|
+
|
|
129
|
+
assert.isEqualDeep(
|
|
130
|
+
{
|
|
131
|
+
file: call.file,
|
|
132
|
+
data: this.normalize(call.data),
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
file: this.indexFilePath,
|
|
136
|
+
data: this.normalize(this.sortedIndexFile),
|
|
137
|
+
},
|
|
138
|
+
'Did not update index file as expected!'
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
87
142
|
private static async run() {
|
|
88
143
|
return await this.instance.run()
|
|
89
144
|
}
|
|
@@ -93,17 +148,25 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
|
|
|
93
148
|
|
|
94
149
|
setPathShouldExist(this.testSaveDir, true)
|
|
95
150
|
setPathShouldExist(this.moduleSaveDir, true)
|
|
151
|
+
setPathShouldExist(this.fakeSaveDir, true)
|
|
152
|
+
setPathShouldExist(this.indexFilePath, true)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private static setFakeReadFile() {
|
|
156
|
+
ImplAutomodule.readFile = fakeReadFile as unknown as typeof readFile
|
|
157
|
+
resetCallsToReadFile()
|
|
96
158
|
}
|
|
97
159
|
|
|
98
160
|
private static setFakeWriteFile() {
|
|
99
161
|
ImplAutomodule.writeFile = fakeWriteFile as typeof writeFile
|
|
100
162
|
resetCallsToWriteFile()
|
|
101
163
|
}
|
|
164
|
+
private static readonly interfaceName = `B-${generateId()}`
|
|
165
|
+
private static readonly implName = generateId()
|
|
102
166
|
|
|
103
167
|
private static readonly testSaveDir = generateId()
|
|
104
168
|
private static readonly moduleSaveDir = generateId()
|
|
105
|
-
private static readonly
|
|
106
|
-
private static readonly implName = generateId()
|
|
169
|
+
private static readonly fakeSaveDir = generateId()
|
|
107
170
|
|
|
108
171
|
private static get testFilePattern() {
|
|
109
172
|
return `
|
|
@@ -149,10 +212,61 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
|
|
|
149
212
|
`
|
|
150
213
|
}
|
|
151
214
|
|
|
215
|
+
private static get fakeFilePattern() {
|
|
216
|
+
return `
|
|
217
|
+
import { ${this.interfaceName} } from '../../modules/${this.implName}'
|
|
218
|
+
|
|
219
|
+
export default class Fake${this.interfaceName} implements ${this.interfaceName} {
|
|
220
|
+
public static numCallsToConstructor = 0
|
|
221
|
+
|
|
222
|
+
public constructor() {
|
|
223
|
+
Fake${this.interfaceName}.numCallsToConstructor++
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
public static resetTestDouble() {
|
|
227
|
+
Fake${this.interfaceName}.numCallsToConstructor = 0
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
`
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private static readonly indexFilePath = './src/index.ts'
|
|
234
|
+
|
|
235
|
+
private static get indexFilePattern() {
|
|
236
|
+
return `
|
|
237
|
+
${fakeReadFileResult}
|
|
238
|
+
|
|
239
|
+
// ${this.interfaceName}
|
|
240
|
+
|
|
241
|
+
export { default as ${this.implName} } from './modules/${this.implName}'
|
|
242
|
+
export * from './modules/${this.implName}'
|
|
243
|
+
|
|
244
|
+
export { default as Fake${this.interfaceName} } from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
|
|
245
|
+
export * from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
|
|
246
|
+
|
|
247
|
+
`
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private static get sortedIndexFile() {
|
|
251
|
+
const blocks = this.indexFilePattern
|
|
252
|
+
.split(/(?=\/\/)/)
|
|
253
|
+
.map((s) => s.trim())
|
|
254
|
+
.filter(Boolean)
|
|
255
|
+
|
|
256
|
+
blocks.sort((a, b) => {
|
|
257
|
+
const aKey = a.match(/^\/\/\s*([^\n]*)/)?.[1]?.trim() ?? ''
|
|
258
|
+
const bKey = b.match(/^\/\/\s*([^\n]*)/)?.[1]?.trim() ?? ''
|
|
259
|
+
return aKey.localeCompare(bKey)
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
return blocks.join('\n\n')
|
|
263
|
+
}
|
|
264
|
+
|
|
152
265
|
private static ImplAutomodule() {
|
|
153
266
|
return ImplAutomodule.Create({
|
|
154
267
|
testSaveDir: this.testSaveDir,
|
|
155
268
|
moduleSaveDir: this.moduleSaveDir,
|
|
269
|
+
fakeSaveDir: this.fakeSaveDir,
|
|
156
270
|
interfaceName: this.interfaceName,
|
|
157
271
|
implName: this.implName,
|
|
158
272
|
})
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
test,
|
|
3
|
-
assert,
|
|
4
|
-
generateId,
|
|
5
|
-
} from '@sprucelabs/test-utils'
|
|
1
|
+
import { test, assert, generateId } from '@sprucelabs/test-utils'
|
|
6
2
|
import NpmAutopackage, {
|
|
7
3
|
Autopackage,
|
|
8
4
|
AutopackageOptions,
|
|
9
5
|
} from '../../modules/NpmAutopackage'
|
|
6
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
10
7
|
|
|
11
|
-
export default class NpmAutopackageTest extends
|
|
8
|
+
export default class NpmAutopackageTest extends AbstractPackageTest {
|
|
12
9
|
private static instance: Autopackage
|
|
13
10
|
|
|
14
11
|
private static callsToChdir: string[] = []
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { test, assert } from '@sprucelabs/test-utils'
|
|
2
|
+
import PackageAutodocumenter, {
|
|
3
|
+
Autodocumenter,
|
|
4
|
+
} from '../../modules/PackageAutodocumenter'
|
|
5
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
6
|
+
|
|
7
|
+
export default class PackageAutodocumenterTest extends AbstractPackageTest {
|
|
8
|
+
private static instance: Autodocumenter
|
|
9
|
+
|
|
10
|
+
protected static async beforeEach() {
|
|
11
|
+
await super.beforeEach()
|
|
12
|
+
|
|
13
|
+
this.instance = this.PackageAutodocumenter()
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@test()
|
|
17
|
+
protected static async createsInstance() {
|
|
18
|
+
assert.isTruthy(this.instance, 'Failed to create instance!')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private static PackageAutodocumenter() {
|
|
22
|
+
return PackageAutodocumenter.Create()
|
|
23
|
+
}
|
|
24
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,14 @@ export * from './modules/GitAutocloner'
|
|
|
6
6
|
export { default as FakeAutocloner } from './testDoubles/Autocloner/FakeAutocloner'
|
|
7
7
|
export * from './testDoubles/Autocloner/FakeAutocloner'
|
|
8
8
|
|
|
9
|
+
// Autodocumenter
|
|
10
|
+
|
|
11
|
+
export { default as PackageAutodocumenter } from './modules/PackageAutodocumenter'
|
|
12
|
+
export * from './modules/PackageAutodocumenter'
|
|
13
|
+
|
|
14
|
+
export { default as FakeAutodocumenter } from './testDoubles/Autodocumenter/FakeAutodocumenter'
|
|
15
|
+
export * from './testDoubles/Autodocumenter/FakeAutodocumenter'
|
|
16
|
+
|
|
9
17
|
// Automodule
|
|
10
18
|
|
|
11
19
|
export { default as ImplAutomodule } from './modules/ImplAutomodule'
|
|
@@ -27,5 +35,8 @@ export * from './testDoubles/Autopackage/FakeAutopackage'
|
|
|
27
35
|
export { default as fakePathExists } from './testDoubles/fs/fakePathExists'
|
|
28
36
|
export * from './testDoubles/fs/fakePathExists'
|
|
29
37
|
|
|
38
|
+
export { default as fakeReadFile } from './testDoubles/fs/fakeReadFile'
|
|
39
|
+
export * from './testDoubles/fs/fakeReadFile'
|
|
40
|
+
|
|
30
41
|
export { default as fakeWriteFile } from './testDoubles/fs/fakeWriteFile'
|
|
31
42
|
export * from './testDoubles/fs/fakeWriteFile'
|