@iobroker/testing 2.5.4 → 2.6.0
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/CHANGELOG.md +11 -0
- package/build/index.js +5 -1
- package/build/lib/adapterTools.d.ts +1 -10
- package/build/lib/adapterTools.js +10 -7
- package/build/tests/integration/index.d.ts +3 -0
- package/build/tests/integration/index.js +22 -7
- package/build/tests/integration/lib/adapterSetup.js +5 -1
- package/build/tests/integration/lib/controllerSetup.js +5 -1
- package/build/tests/integration/lib/dbConnection.d.ts +2 -1
- package/build/tests/integration/lib/dbConnection.js +10 -16
- package/build/tests/integration/lib/harness.d.ts +1 -0
- package/build/tests/integration/lib/harness.js +9 -4
- package/build/tests/integration/lib/logger.d.ts +2 -0
- package/build/tests/integration/lib/logger.js +26 -0
- package/build/tests/integration/lib/tools.js +5 -1
- package/build/tests/packageFiles/index.js +18 -1
- package/build/tests/unit/mocks/mockAdapterCore.js +5 -1
- package/package.json +20 -20
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,17 @@
|
|
|
4
4
|
PLACEHOLDER for next version:
|
|
5
5
|
## __WORK IN PROGRESS__
|
|
6
6
|
-->
|
|
7
|
+
## 2.6.0 (2022-04-18)
|
|
8
|
+
* The loglevel for the adapter and DB instances is now configurable and defaults to `"debug"` in both cases
|
|
9
|
+
|
|
10
|
+
## 2.5.6 (2022-03-05)
|
|
11
|
+
* Allow immediate exit with code `0` for `once` and `subscribe` adapters too
|
|
12
|
+
|
|
13
|
+
## 2.5.5 (2022-03-04)
|
|
14
|
+
* Allow immediate exit with code `0` for `schedule` adapters
|
|
15
|
+
* Check that `npm` is not listed as a local dependency in `package.json`
|
|
16
|
+
* Updated dependencies
|
|
17
|
+
|
|
7
18
|
## 2.5.4 (2022-02-02)
|
|
8
19
|
* Modifying ioBroker databases now uses the same methods that JS-Controller uses internally. This ensures that the testing is compatible with the `jsonl` database format.
|
|
9
20
|
* Testing adapters with adapter dependencies that try to access the databases during installation now works.
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -9,16 +9,7 @@ export declare function loadNpmPackage(adapterDir: string): Record<string, any>;
|
|
|
9
9
|
* @param adapterDir The directory the adapter resides in
|
|
10
10
|
*/
|
|
11
11
|
export declare function loadIoPackage(adapterDir: string): Record<string, any>;
|
|
12
|
-
|
|
13
|
-
* Checks if an adapter claims that it supports compact mode
|
|
14
|
-
* @param ioPackage The contents of io-package.json in object format
|
|
15
|
-
*/
|
|
16
|
-
export declare function adapterShouldSupportCompactMode(ioPackage: Record<string, any>): boolean;
|
|
17
|
-
/**
|
|
18
|
-
* Checks if an adapter claims that it supports compact mode
|
|
19
|
-
* @param adapterDir The directory the adapter resides in
|
|
20
|
-
*/
|
|
21
|
-
export declare function adapterShouldSupportCompactMode(adapterDir: string): boolean;
|
|
12
|
+
export declare function getAdapterExecutionMode(adapterDir: string): ioBroker.AdapterCommon["mode"];
|
|
22
13
|
/**
|
|
23
14
|
* Locates an adapter's main file
|
|
24
15
|
* @param adapterDir The directory the adapter resides in
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -22,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
27
|
};
|
|
24
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.getAdapterDependencies = exports.getAdapterFullName = exports.getAdapterName = exports.getAppName = exports.loadInstanceObjects = exports.loadAdapterCommon = exports.loadAdapterConfig = exports.locateAdapterMainFile = exports.
|
|
29
|
+
exports.getAdapterDependencies = exports.getAdapterFullName = exports.getAdapterName = exports.getAppName = exports.loadInstanceObjects = exports.loadAdapterCommon = exports.loadAdapterConfig = exports.locateAdapterMainFile = exports.getAdapterExecutionMode = exports.loadIoPackage = exports.loadNpmPackage = void 0;
|
|
26
30
|
// Add debug logging for tests
|
|
27
31
|
const typeguards_1 = require("alcalzone-shared/typeguards");
|
|
28
32
|
const debug_1 = __importDefault(require("debug"));
|
|
@@ -45,12 +49,11 @@ function loadIoPackage(adapterDir) {
|
|
|
45
49
|
return require(path.join(adapterDir, "io-package.json"));
|
|
46
50
|
}
|
|
47
51
|
exports.loadIoPackage = loadIoPackage;
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return dirOrIoPack.common.compact === true;
|
|
52
|
+
function getAdapterExecutionMode(adapterDir) {
|
|
53
|
+
const ioPackage = loadIoPackage(adapterDir);
|
|
54
|
+
return ioPackage.common.mode;
|
|
52
55
|
}
|
|
53
|
-
exports.
|
|
56
|
+
exports.getAdapterExecutionMode = getAdapterExecutionMode;
|
|
54
57
|
/**
|
|
55
58
|
* Locates an adapter's main file
|
|
56
59
|
* @param adapterDir The directory the adapter resides in
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
/// <reference types="iobroker" />
|
|
1
2
|
import { TestHarness } from "./lib/harness";
|
|
2
3
|
export interface TestAdapterOptions {
|
|
3
4
|
allowedExitCodes?: (number | string)[];
|
|
5
|
+
/** The loglevel to use for DB and adapter related logs */
|
|
6
|
+
loglevel?: ioBroker.LogLevel;
|
|
4
7
|
/** How long to wait before the adapter startup is considered successful */
|
|
5
8
|
waitBeforeStartupSuccess?: number;
|
|
6
9
|
/** Allows you to define additional tests */
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -28,6 +32,7 @@ const adapterSetup_1 = require("./lib/adapterSetup");
|
|
|
28
32
|
const controllerSetup_1 = require("./lib/controllerSetup");
|
|
29
33
|
const dbConnection_1 = require("./lib/dbConnection");
|
|
30
34
|
const harness_1 = require("./lib/harness");
|
|
35
|
+
const logger_1 = require("./lib/logger");
|
|
31
36
|
function testAdapter(adapterDir, options = {}) {
|
|
32
37
|
const appName = (0, adapterTools_1.getAppName)(adapterDir);
|
|
33
38
|
const adapterName = (0, adapterTools_1.getAdapterName)(adapterDir);
|
|
@@ -43,6 +48,7 @@ function testAdapter(adapterDir, options = {}) {
|
|
|
43
48
|
let objectsBackup;
|
|
44
49
|
let statesBackup;
|
|
45
50
|
before(async function () {
|
|
51
|
+
var _a;
|
|
46
52
|
// Installation may take a while - especially if rsa-compat needs to be installed
|
|
47
53
|
const oneMinute = 60000;
|
|
48
54
|
this.timeout(30 * oneMinute);
|
|
@@ -57,7 +63,7 @@ function testAdapter(adapterDir, options = {}) {
|
|
|
57
63
|
// Only then we can install the adapter, because some (including VIS) try to access
|
|
58
64
|
// the databases if JS Controller is installed
|
|
59
65
|
await adapterSetup.installAdapterInTestDir();
|
|
60
|
-
const dbConnection = new dbConnection_1.DBConnection(appName, testDir);
|
|
66
|
+
const dbConnection = new dbConnection_1.DBConnection(appName, testDir, (0, logger_1.createLogger)((_a = options.loglevel) !== null && _a !== void 0 ? _a : "debug"));
|
|
61
67
|
await dbConnection.start();
|
|
62
68
|
controllerSetup.setupSystemConfig(dbConnection);
|
|
63
69
|
await controllerSetup.disableAdminInstances(dbConnection);
|
|
@@ -69,8 +75,9 @@ function testAdapter(adapterDir, options = {}) {
|
|
|
69
75
|
await dbConnection.backup());
|
|
70
76
|
});
|
|
71
77
|
beforeEach(async function () {
|
|
78
|
+
var _a, _b;
|
|
72
79
|
this.timeout(30000);
|
|
73
|
-
dbConnection = new dbConnection_1.DBConnection(appName, testDir);
|
|
80
|
+
dbConnection = new dbConnection_1.DBConnection(appName, testDir, (0, logger_1.createLogger)((_a = options.loglevel) !== null && _a !== void 0 ? _a : "debug"));
|
|
74
81
|
// Clean up before every single test
|
|
75
82
|
await Promise.all([
|
|
76
83
|
controllerSetup.clearDBDir(),
|
|
@@ -80,11 +87,11 @@ function testAdapter(adapterDir, options = {}) {
|
|
|
80
87
|
// Create a new test harness
|
|
81
88
|
await dbConnection.start();
|
|
82
89
|
harness = new harness_1.TestHarness(adapterDir, testDir, dbConnection);
|
|
83
|
-
// Enable the adapter and set its loglevel to
|
|
90
|
+
// Enable the adapter and set its loglevel to the selected one
|
|
84
91
|
await harness.changeAdapterConfig(adapterName, {
|
|
85
92
|
common: {
|
|
86
93
|
enabled: true,
|
|
87
|
-
loglevel: "debug",
|
|
94
|
+
loglevel: (_b = options.loglevel) !== null && _b !== void 0 ? _b : "debug",
|
|
88
95
|
},
|
|
89
96
|
});
|
|
90
97
|
// And enable the sendTo emulation
|
|
@@ -98,7 +105,16 @@ function testAdapter(adapterDir, options = {}) {
|
|
|
98
105
|
harness.removeAllListeners();
|
|
99
106
|
});
|
|
100
107
|
it("The adapter starts", function () {
|
|
108
|
+
var _a;
|
|
101
109
|
this.timeout(60000);
|
|
110
|
+
const allowedExitCodes = new Set((_a = options.allowedExitCodes) !== null && _a !== void 0 ? _a : []);
|
|
111
|
+
// Adapters with these modes are allowed to "immediately" exit with code 0
|
|
112
|
+
switch (harness.getAdapterExecutionMode()) {
|
|
113
|
+
case "schedule":
|
|
114
|
+
case "once":
|
|
115
|
+
case "subscribe":
|
|
116
|
+
allowedExitCodes.add(0);
|
|
117
|
+
}
|
|
102
118
|
return new Promise((resolve, reject) => {
|
|
103
119
|
// Register a handler to check the alive state and exit codes
|
|
104
120
|
harness
|
|
@@ -114,8 +130,7 @@ function testAdapter(adapterDir, options = {}) {
|
|
|
114
130
|
}
|
|
115
131
|
})
|
|
116
132
|
.on("failed", (code) => {
|
|
117
|
-
if (
|
|
118
|
-
options.allowedExitCodes.indexOf(code) === -1) {
|
|
133
|
+
if (!allowedExitCodes.has(code)) {
|
|
119
134
|
reject(new Error(`The adapter startup was interrupted unexpectedly with ${typeof code === "number"
|
|
120
135
|
? "code"
|
|
121
136
|
: "signal"} ${code}`));
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,11 +11,12 @@ export interface DBConnection {
|
|
|
11
11
|
export declare class DBConnection extends EventEmitter {
|
|
12
12
|
private appName;
|
|
13
13
|
private testDir;
|
|
14
|
+
private logger;
|
|
14
15
|
/**
|
|
15
16
|
* @param appName The branded name of "iobroker"
|
|
16
17
|
* @param testDir The directory the integration tests are executed in
|
|
17
18
|
*/
|
|
18
|
-
constructor(appName: string, testDir: string);
|
|
19
|
+
constructor(appName: string, testDir: string, logger: ioBroker.Logger);
|
|
19
20
|
private testDataDir;
|
|
20
21
|
private testControllerDir;
|
|
21
22
|
private _objectsServer;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -29,24 +33,17 @@ const fs_extra_1 = require("fs-extra");
|
|
|
29
33
|
const path = __importStar(require("path"));
|
|
30
34
|
const tools_1 = require("./tools");
|
|
31
35
|
const debug = (0, debug_1.default)("testing:integration:DBConnection");
|
|
32
|
-
/** The logger instance for the objects and states DB */
|
|
33
|
-
const logger = {
|
|
34
|
-
silly: console.log,
|
|
35
|
-
debug: console.log,
|
|
36
|
-
info: console.log,
|
|
37
|
-
warn: console.warn,
|
|
38
|
-
error: console.error,
|
|
39
|
-
};
|
|
40
36
|
/** The DB connection capsules access to the states and objects DB */
|
|
41
37
|
class DBConnection extends events_1.default {
|
|
42
38
|
/**
|
|
43
39
|
* @param appName The branded name of "iobroker"
|
|
44
40
|
* @param testDir The directory the integration tests are executed in
|
|
45
41
|
*/
|
|
46
|
-
constructor(appName, testDir) {
|
|
42
|
+
constructor(appName, testDir, logger) {
|
|
47
43
|
super();
|
|
48
44
|
this.appName = appName;
|
|
49
45
|
this.testDir = testDir;
|
|
46
|
+
this.logger = logger;
|
|
50
47
|
this._isRunning = false;
|
|
51
48
|
this.getObject = async (id) => {
|
|
52
49
|
if (!this._objectsClient) {
|
|
@@ -136,7 +133,6 @@ class DBConnection extends events_1.default {
|
|
|
136
133
|
if (wasRunning)
|
|
137
134
|
await this.start();
|
|
138
135
|
}
|
|
139
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
140
136
|
setSystemConfig(systemConfig) {
|
|
141
137
|
const systemFilename = path.join(this.testDataDir, `${this.appName}.json`);
|
|
142
138
|
(0, fs_extra_1.writeJSONSync)(systemFilename, systemConfig, { spaces: 2 });
|
|
@@ -189,7 +185,7 @@ class DBConnection extends events_1.default {
|
|
|
189
185
|
noFileCache: false,
|
|
190
186
|
connectTimeout: 2000,
|
|
191
187
|
},
|
|
192
|
-
logger,
|
|
188
|
+
logger: this.logger,
|
|
193
189
|
};
|
|
194
190
|
const objectsDbPath = require.resolve(`@iobroker/db-objects-${objectsType}`, {
|
|
195
191
|
paths: [
|
|
@@ -237,7 +233,7 @@ class DBConnection extends events_1.default {
|
|
|
237
233
|
retry_max_delay: 15000,
|
|
238
234
|
},
|
|
239
235
|
},
|
|
240
|
-
logger,
|
|
236
|
+
logger: this.logger,
|
|
241
237
|
};
|
|
242
238
|
const statesDbPath = require.resolve(`@iobroker/db-states-${statesType}`, {
|
|
243
239
|
paths: [
|
|
@@ -276,9 +272,7 @@ class DBConnection extends events_1.default {
|
|
|
276
272
|
}
|
|
277
273
|
return this._statesClient.subscribeMessage(id);
|
|
278
274
|
}
|
|
279
|
-
pushMessage(instanceId,
|
|
280
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
281
|
-
msg, callback) {
|
|
275
|
+
pushMessage(instanceId, msg, callback) {
|
|
282
276
|
if (!this._statesClient) {
|
|
283
277
|
throw new Error("States DB is not running");
|
|
284
278
|
}
|
|
@@ -61,6 +61,7 @@ export declare class TestHarness extends EventEmitter {
|
|
|
61
61
|
* Updates the adapter config. The changes can be a subset of the target object
|
|
62
62
|
*/
|
|
63
63
|
changeAdapterConfig(adapterName: string, changes: Record<string, any>): Promise<void>;
|
|
64
|
+
getAdapterExecutionMode(): ioBroker.AdapterCommon["mode"];
|
|
64
65
|
/** Enables the sendTo method */
|
|
65
66
|
enableSendTo(): Promise<void>;
|
|
66
67
|
private sendToID;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -222,6 +226,9 @@ class TestHarness extends events_1.EventEmitter {
|
|
|
222
226
|
await this.dbConnection.setObject(adapterInstanceId, obj);
|
|
223
227
|
}
|
|
224
228
|
}
|
|
229
|
+
getAdapterExecutionMode() {
|
|
230
|
+
return (0, adapterTools_1.getAdapterExecutionMode)(this.testAdapterDir);
|
|
231
|
+
}
|
|
225
232
|
/** Enables the sendTo method */
|
|
226
233
|
async enableSendTo() {
|
|
227
234
|
await this.dbConnection.setObject(fromAdapterID, {
|
|
@@ -232,9 +239,7 @@ class TestHarness extends events_1.EventEmitter {
|
|
|
232
239
|
this.dbConnection.subscribeMessage(fromAdapterID);
|
|
233
240
|
}
|
|
234
241
|
/** Sends a message to an adapter instance */
|
|
235
|
-
sendTo(target, command,
|
|
236
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
237
|
-
message, callback) {
|
|
242
|
+
sendTo(target, command, message, callback) {
|
|
238
243
|
const stateChangedHandler = (id, state) => {
|
|
239
244
|
if (id === `messagebox.${fromAdapterID}`) {
|
|
240
245
|
callback(state.message);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLogger = void 0;
|
|
4
|
+
var LoglevelOrder;
|
|
5
|
+
(function (LoglevelOrder) {
|
|
6
|
+
LoglevelOrder[LoglevelOrder["error"] = 0] = "error";
|
|
7
|
+
LoglevelOrder[LoglevelOrder["warn"] = 1] = "warn";
|
|
8
|
+
LoglevelOrder[LoglevelOrder["info"] = 2] = "info";
|
|
9
|
+
LoglevelOrder[LoglevelOrder["debug"] = 3] = "debug";
|
|
10
|
+
LoglevelOrder[LoglevelOrder["silly"] = 4] = "silly";
|
|
11
|
+
})(LoglevelOrder || (LoglevelOrder = {}));
|
|
12
|
+
function createLogger(loglevel) {
|
|
13
|
+
var _a;
|
|
14
|
+
const loglevelNumeric = (_a = LoglevelOrder[loglevel !== null && loglevel !== void 0 ? loglevel : "debug"]) !== null && _a !== void 0 ? _a : LoglevelOrder.debug;
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
16
|
+
const ignore = () => { };
|
|
17
|
+
return {
|
|
18
|
+
error: loglevelNumeric >= LoglevelOrder.error ? console.error : ignore,
|
|
19
|
+
warn: loglevelNumeric >= LoglevelOrder.warn ? console.warn : ignore,
|
|
20
|
+
info: loglevelNumeric >= LoglevelOrder.info ? console.log : ignore,
|
|
21
|
+
debug: loglevelNumeric >= LoglevelOrder.debug ? console.log : ignore,
|
|
22
|
+
silly: loglevelNumeric >= LoglevelOrder.silly ? console.log : ignore,
|
|
23
|
+
level: loglevel,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
exports.createLogger = createLogger;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -111,6 +115,19 @@ function validatePackageFiles(adapterDir) {
|
|
|
111
115
|
it(`The repository type is "git"`, () => {
|
|
112
116
|
(0, chai_1.expect)(packageContent.repository.type).to.equal("git");
|
|
113
117
|
});
|
|
118
|
+
it("npm is not listed as a dependency", () => {
|
|
119
|
+
for (const depType of [
|
|
120
|
+
"dependencies",
|
|
121
|
+
"devDependencies",
|
|
122
|
+
"optionalDependencies",
|
|
123
|
+
"peerDependencies",
|
|
124
|
+
]) {
|
|
125
|
+
if ((0, typeguards_1.isObject)(packageContent[depType]) &&
|
|
126
|
+
"npm" in packageContent[depType]) {
|
|
127
|
+
throw new chai_1.AssertionError(`npm must not be listed in ${depType}, found "${packageContent[depType].npm}"!`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
114
131
|
});
|
|
115
132
|
describe(`Check contents of io-package.json`, () => {
|
|
116
133
|
var _a;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iobroker/testing",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Shared utilities for adapter and module testing in ioBroker",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -38,38 +38,38 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://github.com/AlCalzone/testing#readme",
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@alcalzone/release-script": "^3.5.
|
|
42
|
-
"@alcalzone/release-script-plugin-license": "^3.5.
|
|
43
|
-
"@iobroker/adapter-core": "^2.
|
|
41
|
+
"@alcalzone/release-script": "^3.5.6",
|
|
42
|
+
"@alcalzone/release-script-plugin-license": "^3.5.3",
|
|
43
|
+
"@iobroker/adapter-core": "^2.6.0",
|
|
44
44
|
"@tsconfig/node12": "^1.0.9",
|
|
45
45
|
"@types/chai": "^4.3.0",
|
|
46
|
-
"@types/chai-as-promised": "^7.1.
|
|
46
|
+
"@types/chai-as-promised": "^7.1.5",
|
|
47
47
|
"@types/debug": "4.1.7",
|
|
48
48
|
"@types/fs-extra": "^9.0.13",
|
|
49
|
-
"@types/iobroker": "^
|
|
50
|
-
"@types/mocha": "^9.
|
|
51
|
-
"@types/node": "^16.
|
|
52
|
-
"@types/sinon": "^10.0.
|
|
49
|
+
"@types/iobroker": "^4.0.1",
|
|
50
|
+
"@types/mocha": "^9.1.0",
|
|
51
|
+
"@types/node": "^16.11.26",
|
|
52
|
+
"@types/sinon": "^10.0.11",
|
|
53
53
|
"@types/sinon-chai": "^3.2.8",
|
|
54
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
55
|
-
"@typescript-eslint/parser": "^
|
|
56
|
-
"eslint": "^
|
|
57
|
-
"eslint-config-prettier": "^8.
|
|
54
|
+
"@typescript-eslint/eslint-plugin": "^5.17.0",
|
|
55
|
+
"@typescript-eslint/parser": "^5.13.0",
|
|
56
|
+
"eslint": "^8.12.0",
|
|
57
|
+
"eslint-config-prettier": "^8.5.0",
|
|
58
58
|
"eslint-plugin-prettier": "^4.0.0",
|
|
59
|
-
"prettier": "^2.
|
|
59
|
+
"prettier": "^2.6.1",
|
|
60
60
|
"rimraf": "^3.0.2",
|
|
61
61
|
"source-map-support": "^0.5.21",
|
|
62
|
-
"ts-node": "^10.
|
|
63
|
-
"typescript": "~4.
|
|
62
|
+
"ts-node": "^10.6.0",
|
|
63
|
+
"typescript": "~4.6.2"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"alcalzone-shared": "~4.0.1",
|
|
67
|
-
"chai": "^4.3.
|
|
67
|
+
"chai": "^4.3.6",
|
|
68
68
|
"chai-as-promised": "^7.1.1",
|
|
69
69
|
"debug": "^4.3.3",
|
|
70
|
-
"fs-extra": "^10.0.
|
|
71
|
-
"mocha": "^9.
|
|
72
|
-
"sinon": "^
|
|
70
|
+
"fs-extra": "^10.0.1",
|
|
71
|
+
"mocha": "^9.2.2",
|
|
72
|
+
"sinon": "^13.0.1",
|
|
73
73
|
"sinon-chai": "^3.7.0"
|
|
74
74
|
}
|
|
75
75
|
}
|