server4test 1.0.0 → 2.0.0-rc.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/README.md CHANGED
@@ -1,33 +1,54 @@
1
1
  # server4test
2
+
2
3
  server for test
3
4
 
5
+
6
+ [![npm-version](https://img.shields.io/npm/v/server4test.svg)](https://npmjs.org/package/server4test)
7
+ [![downloads](https://img.shields.io/npm/dm/server4test.svg)](https://npmjs.org/package/server4test)
8
+ [![linux](https://github.com/codenautas/server4test/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/codenautas/server4test/actions/workflows/build-and-test.yml)
9
+ [![windows](https://ci.appveyor.com/api/projects/status/github/codenautas/server4test?svg=true)](https://ci.appveyor.com/project/codenautas/server4test)
10
+ [![security](https://socket.dev/api/badge/npm/package/server4test)](https://socket.dev/npm/package/server4test)
11
+ [![qa-control](https://github.com/codenautas/server4test/actions/workflows/qa-control.yml/badge.svg)](https://github.com/codenautas/server4test/actions/workflows/qa-control.yml)
12
+
13
+
14
+ language: ![English](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-en.png)
15
+ also available in:
16
+ [![Spanish](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-es.png)](LEEME.md)
17
+
18
+
4
19
  # main goal
5
20
 
21
+
6
22
  serve static files and a bit plus.
7
23
 
24
+
8
25
  # usage
9
26
 
27
+
10
28
  ```cmd
11
29
  npm install -g server4test
12
30
 
13
31
  server4test
14
32
  ```
15
33
 
34
+
16
35
  # config
17
36
 
18
- _server4test_ reads the config from `server4test-config.yaml` or `server4test-config.json`
37
+
38
+ _server4test_ reads the config from `server4test-config.yaml` or `server4test-config.json`
19
39
  and merges with `local-config.yaml` or `local-config.json`.
20
40
 
21
41
  The config format is:
22
42
 
43
+
23
44
  ```yaml
24
45
  server4test:
25
46
  port: 8080
26
47
  verbose: true
27
48
  serve-content: # see https://www.npmjs.com/package/serve-content
28
49
  allowAllExts: false
29
- allowedExts:
30
- - png
50
+ allowedExts:
51
+ - png
31
52
  - jpg
32
53
  - svg
33
54
  - html
@@ -38,8 +59,214 @@ server4test:
38
59
  local-file-repo: # fast way to save status to files
39
60
  enabled: false # enable fast way
40
61
  delay: 200 # set an aditional delay to the responses
41
- directory: local-file-repo # directory where save files
62
+ directory: local-file-repo # directory where save files
42
63
  readRequest: { method: 'get', path: '/file-read' }
43
64
  writeRequest: { method: 'get', path: '/file-write' }
44
65
  deleteRequest: { method: 'get', path: '/file-delete' }
45
- ```
66
+ serve-index: # see https://www.npmjs.com/package/serve-index
67
+ icons: true
68
+ view: details
69
+ ```
70
+
71
+ ## `--super-insecure`
72
+
73
+
74
+ Running `server4test --super-insecure` replaces the default config with a permissive
75
+ one, intended only for local testing:
76
+
77
+
78
+ - `serve-content.allowAllExts: true` (serves any extension)
79
+ - `serve-content.dotfiles: "allow"`
80
+ - `serve-content.index: ["index.html", "index.htm", "index.js"]`
81
+ - `server4test-directory: true`
82
+ - `local-file-repo.enabled: true`
83
+ - `serve-index.hidden: true` (lists hidden files)
84
+
85
+
86
+ As the name says, do not use it to serve anything you would not publish.
87
+
88
+
89
+ # serving files
90
+
91
+
92
+ The files are served by [serve-content](https://www.npmjs.com/package/serve-content),
93
+ rooted at `public-dir` (defaults to the current working directory). `public-dir` also
94
+ accepts a list of directories, tried in order.
95
+
96
+ A file is served only if its extension is listed in `serve-content.allowedExts`
97
+ (or if `allowAllExts` is set). Extensions not in the list are not served.
98
+
99
+
100
+ ## transformed files
101
+
102
+
103
+ Some files are compiled on the fly, so they are requested **without** their extension:
104
+
105
+
106
+ | file | request | result |
107
+ | ----------- | -------------- | ------ |
108
+ | `page.jade` | `/page` | html |
109
+ | `page.md` | `/page` | html |
110
+ | `style.styl`| `/style.css` | css |
111
+
112
+
113
+ The `.jade` and `.styl` files can also be requested with their own extension
114
+ (`/page.jade`, `/style.styl`) to get the source, if the extension is allowed.
115
+
116
+
117
+ ## directory index
118
+
119
+
120
+ When the request points to a directory, the index file is resolved by
121
+ [serve-static](https://www.npmjs.com/package/serve-static), which looks for a
122
+ **literal** file name on disk. By default that is `index.html`; the list can be
123
+ changed with `serve-content.index`.
124
+
125
+
126
+ Note that the transformation described above does **not** apply here: an
127
+ `index.jade` in the directory is not compiled and served as the index, and adding
128
+ `index` to `serve-content.index` does not help either, because the lookup is a
129
+ plain file lookup with no extension resolution. To serve a jade index, request it
130
+ explicitly as `/the-directory/index`.
131
+
132
+
133
+ # directory listing
134
+
135
+
136
+ Adding `?dir` to any URL serves the directory listing for that path, using
137
+ [serve-index](https://www.npmjs.com/package/serve-index):
138
+
139
+
140
+ ```
141
+ http://localhost:8080/?dir
142
+ http://localhost:8080/some/folder?dir
143
+ ```
144
+
145
+
146
+ The listing is only available when:
147
+
148
+ - `server4test-directory` is set to `true` (it is `false` by default; `--super-insecure` sets it), and
149
+ - the path is under the **first** directory of `public-dir` (when a list is used, only the first one is listed).
150
+
151
+
152
+ In the generated listing the links to directories keep the `?dir` suffix, so the
153
+ listing can be navigated; the links to files point to the files themselves.
154
+
155
+
156
+ # echo
157
+
158
+
159
+ With `echo: true` a `/echo` service is added, that answers with the received
160
+ `query`, `path`, `headers`, `cookies`, `ip`, `originalUrl` and `xhr`. Useful to
161
+ inspect what the client is actually sending.
162
+
163
+
164
+ # webpack
165
+
166
+
167
+ If a `webpack.config.js` exists in the current directory, it is loaded and served
168
+ through [webpack-dev-middleware](https://www.npmjs.com/package/webpack-dev-middleware)
169
+ (by default under `/dist`).
170
+
171
+
172
+ Since version 2.0 `webpack` and `webpack-dev-middleware` are optional dependencies
173
+ (`peerDependencies`), so to use `webpack.config.js` they must be installed in the project:
174
+
175
+
176
+ ```sh
177
+ npm install --save-dev webpack webpack-dev-middleware
178
+ ```
179
+
180
+ # local-file-repo
181
+
182
+
183
+ A minimal file store to keep state between reloads while testing. When
184
+ `local-file-repo.enabled` is true, three services are added:
185
+
186
+
187
+ | request | action |
188
+ | ----------------------------------------- | ------ |
189
+ | `/file-read?file=NAME` | returns `{content, timestamp}` |
190
+ | `/file-write?file=NAME&content=TEXT` | writes the file, returns `{timestamp}` |
191
+ | `/file-delete?file=NAME` | deletes the file, returns `{timestamp}` |
192
+
193
+
194
+ The paths and methods are configurable with `readRequest`, `writeRequest` and
195
+ `deleteRequest`. The files are stored in `local-file-repo.directory`, and the name
196
+ is sanitized (any character outside `-A-Za-z_0-9.@` is replaced by `_`), so the
197
+ store is flat and cannot escape the directory. A random delay of up to
198
+ `local-file-repo.delay` milliseconds is added to each response, to make the
199
+ asynchrony visible while testing.
200
+
201
+
202
+ # browser-test
203
+
204
+
205
+ Runs the [mocha](https://mochajs.org/) tests in real browsers (Chrome and Firefox)
206
+ in headless mode and without drivers: _server4test_ generates a page that loads mocha
207
+ and the listed files, launches the browser pointing to that page and waits for the page
208
+ to send the result with a POST.
209
+
210
+ It is configured with the list of files to load, in order (mocha is loaded automatically,
211
+ from `node_modules/mocha`):
212
+
213
+
214
+ ```yaml
215
+ server4test:
216
+ browser-test:
217
+ files:
218
+ - node_modules/require-bro/lib/require-bro.js
219
+ - node_modules/expect.js/index.js
220
+ - my-lib.js
221
+ - test/test.js
222
+ timeout: 120000 # ms waiting for the results of each browser (default 120000)
223
+ ```
224
+
225
+
226
+ To run them and exit (with exit code 0 if all is ok and 1 otherwise):
227
+
228
+
229
+ ```sh
230
+ server4test --run-browser chrome,firefox
231
+ ```
232
+
233
+
234
+ Each browser runs separately, with a temporary profile, and the server uses a free port.
235
+ The `console` output of the page, the errors and the failed tests are shown. The run
236
+ fails if any test fails, if there are errors loading or running the files, if no test
237
+ was run, if the `timeout` expires or if the browser exits before sending the result.
238
+
239
+ The browser is searched in the environment variables `CHROME_BIN` and `FIREFOX_BIN` and,
240
+ if they are not set, in the usual places of each operating system. The `ubuntu` runners
241
+ of GitHub Actions already have Chrome and Firefox installed.
242
+
243
+ Running `server4test` without `--run-browser` the page is available at
244
+ `/server4test-browser-test` to open it manually in any browser; the result is shown in
245
+ the server console.
246
+
247
+
248
+ # using it as a library
249
+
250
+
251
+ The server can be extended to add services, overriding `directServices()`:
252
+
253
+
254
+ ```typescript
255
+ import {Server4Test, Server4TestOpts, launch} from "server4test";
256
+
257
+ class ExampleServer extends Server4Test{
258
+ directServices(){
259
+ return super.directServices().concat([
260
+ {path:'/dummy1' , html:'dummy 1'},
261
+ {path:'/up-time', html:new Date().toString()},
262
+ ])
263
+ }
264
+ }
265
+
266
+ launch({serverClass:ExampleServer, server4test:{port:3339, verbose:true}})
267
+ ```
268
+
269
+
270
+ Each service is `{path, method?}` plus either `html` (served as html) or
271
+ `middleware` (an express middleware). The default `method` is `use`.
272
+
@@ -0,0 +1,35 @@
1
+ import type { Server4Test, Server4TestOpts } from './server4test';
2
+ export declare const BROWSER_TEST_PAGE_PATH = "/server4test-browser-test";
3
+ export declare const BROWSER_TEST_RESULT_PATH = "/server4test-browser-result";
4
+ export declare const BROWSER_TEST_TIMEOUT_DEFAULT = 120000;
5
+ export type BrowserTestOpts = {
6
+ files: string[];
7
+ timeout?: number;
8
+ };
9
+ export type BrowserTestFailure = {
10
+ title: string;
11
+ message: string;
12
+ stack?: string;
13
+ };
14
+ export type BrowserTestReport = {
15
+ userAgent: string;
16
+ console: {
17
+ level: string;
18
+ text: string;
19
+ }[];
20
+ loadErrors: string[];
21
+ errors: string[];
22
+ finished: boolean;
23
+ tests: number;
24
+ passes: number;
25
+ pending: number;
26
+ failures: BrowserTestFailure[];
27
+ };
28
+ export type BrowserName = 'chrome' | 'firefox';
29
+ export declare function isBrowserName(name: string): name is BrowserName;
30
+ export declare function browserTestPage(baseUrl: string, browserTest: BrowserTestOpts): string;
31
+ export declare function parseBrowserTestReport(body: unknown): BrowserTestReport;
32
+ /** prints the report and returns true if all is ok */
33
+ export declare function printBrowserTestReport(report: BrowserTestReport, label: string): boolean;
34
+ /** runs the browser test in each browser (comma separated list), returns true if all is ok */
35
+ export declare function runBrowsers(ServerConstructor: typeof Server4Test, opts: Server4TestOpts, browserList: string | undefined): Promise<boolean>;
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BROWSER_TEST_TIMEOUT_DEFAULT = exports.BROWSER_TEST_RESULT_PATH = exports.BROWSER_TEST_PAGE_PATH = void 0;
4
+ exports.isBrowserName = isBrowserName;
5
+ exports.browserTestPage = browserTestPage;
6
+ exports.parseBrowserTestReport = parseBrowserTestReport;
7
+ exports.printBrowserTestReport = printBrowserTestReport;
8
+ exports.runBrowsers = runBrowsers;
9
+ const child_process_1 = require("child_process");
10
+ const fs_1 = require("fs");
11
+ const os = require("os");
12
+ const Path = require("path");
13
+ exports.BROWSER_TEST_PAGE_PATH = '/server4test-browser-test';
14
+ exports.BROWSER_TEST_RESULT_PATH = '/server4test-browser-result';
15
+ exports.BROWSER_TEST_TIMEOUT_DEFAULT = 120000;
16
+ function inProgramFiles(relativePath) {
17
+ return [process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)'], process.env.LOCALAPPDATA]
18
+ .filter((dir) => !!dir)
19
+ .map(dir => Path.join(dir, relativePath));
20
+ }
21
+ function inPath(names) {
22
+ var dirs = (process.env.PATH || '').split(Path.delimiter).filter(dir => !!dir);
23
+ var result = [];
24
+ names.forEach(name => dirs.forEach(dir => result.push(Path.join(dir, name))));
25
+ return result;
26
+ }
27
+ const BROWSERS = {
28
+ chrome: {
29
+ envVar: 'CHROME_BIN',
30
+ candidates: () => process.platform == 'win32' ? inProgramFiles('Google\\Chrome\\Application\\chrome.exe') :
31
+ process.platform == 'darwin' ? ['/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'] :
32
+ inPath(['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser']),
33
+ args: (profileDir, url) => [
34
+ '--headless', '--user-data-dir=' + profileDir, '--no-first-run', '--no-default-browser-check',
35
+ '--disable-gpu', '--disable-extensions', url
36
+ ]
37
+ },
38
+ firefox: {
39
+ envVar: 'FIREFOX_BIN',
40
+ candidates: () => process.platform == 'win32' ? inProgramFiles('Mozilla Firefox\\firefox.exe') :
41
+ process.platform == 'darwin' ? ['/Applications/Firefox.app/Contents/MacOS/firefox'] :
42
+ inPath(['firefox']),
43
+ args: (profileDir, url) => ['-headless', '-no-remote', '-wait-for-browser', '-profile', profileDir, url]
44
+ }
45
+ };
46
+ function isBrowserName(name) {
47
+ return Object.prototype.hasOwnProperty.call(BROWSERS, name);
48
+ }
49
+ function findExecutable(browser) {
50
+ var def = BROWSERS[browser];
51
+ var fromEnv = process.env[def.envVar];
52
+ if (fromEnv) {
53
+ if (!(0, fs_1.existsSync)(fromEnv)) {
54
+ throw new Error(`server4test: ${def.envVar}=${fromEnv} does not exist`);
55
+ }
56
+ return fromEnv;
57
+ }
58
+ var candidates = def.candidates();
59
+ var found = candidates.find(candidate => (0, fs_1.existsSync)(candidate));
60
+ if (found == null) {
61
+ throw new Error(`server4test: ${browser} not found. Set ${def.envVar}. Searched in: ${candidates.join(', ')}`);
62
+ }
63
+ return found;
64
+ }
65
+ function escapeHtmlAttr(text) {
66
+ return text.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;');
67
+ }
68
+ function jsonForScript(value) {
69
+ return JSON.stringify(value).replace(/</g, '\\u003c');
70
+ }
71
+ function browserTestPage(baseUrl, browserTest) {
72
+ var url = (file) => escapeHtmlAttr(encodeURI(baseUrl + '/' + file.replace(/\\/g, '/').replace(/^\.?\//, '')));
73
+ return `<!doctype html>
74
+ <html>
75
+ <head>
76
+ <meta charset="utf-8">
77
+ <title>server4test browser test</title>
78
+ <link rel="stylesheet" href="${url('node_modules/mocha/mocha.css')}">
79
+ <script>
80
+ (function(){
81
+ var report = {userAgent: navigator.userAgent, console: [], loadErrors: [], errors: [], finished: false, tests: 0, passes: 0, pending: 0, failures: []};
82
+ window.server4testReport = report;
83
+ function asText(x){
84
+ if(typeof x === 'string') return x;
85
+ if(x instanceof Error) return x.stack || String(x);
86
+ if(x instanceof Date) return String(x);
87
+ try{
88
+ return JSON.stringify(x);
89
+ }catch(err){
90
+ return String(x);
91
+ }
92
+ }
93
+ ['log', 'info', 'warn', 'error', 'debug'].forEach(function(level){
94
+ var original = console[level];
95
+ console[level] = function(){
96
+ report.console.push({level: level, text: Array.prototype.map.call(arguments, asText).join(' ')});
97
+ return original.apply(console, arguments);
98
+ };
99
+ });
100
+ window.addEventListener('error', function(event){
101
+ var target = event.target;
102
+ if(target && target.tagName && (target.tagName == 'SCRIPT' || target.tagName == 'LINK')){
103
+ report.loadErrors.push(target.src || target.href);
104
+ }else{
105
+ report.errors.push((event.message || 'error') + ' at ' + event.filename + ':' + event.lineno + (event.error && event.error.stack ? '\\n' + event.error.stack : ''));
106
+ }
107
+ }, true);
108
+ })();
109
+ </script>
110
+ </head>
111
+ <body>
112
+ <div id="mocha"></div>
113
+ <script src="${url('node_modules/mocha/mocha.js')}"></script>
114
+ <script>
115
+ if(typeof mocha !== 'undefined') mocha.setup({ui: 'bdd'});
116
+ </script>
117
+ ${browserTest.files.map(file => `<script src="${url(file)}"></script>`).join('\n')}
118
+ <script>
119
+ (function(){
120
+ var report = window.server4testReport;
121
+ var runId = new URLSearchParams(location.search).get('run');
122
+ function send(){
123
+ report.finished = true;
124
+ fetch(${jsonForScript(baseUrl + exports.BROWSER_TEST_RESULT_PATH)} + (runId ? '?run=' + encodeURIComponent(runId) : ''), {
125
+ method: 'POST',
126
+ headers: {'Content-Type': 'application/json'},
127
+ body: JSON.stringify(report)
128
+ }).then(function(response){
129
+ if(!response.ok) throw new Error('server4test: result not accepted, status ' + response.status);
130
+ }).catch(function(err){
131
+ document.title = 'server4test: ' + err.message;
132
+ alert('server4test: ' + err.message);
133
+ });
134
+ }
135
+ if(typeof mocha === 'undefined'){
136
+ send();
137
+ return;
138
+ }
139
+ var runner = mocha.run();
140
+ runner.on('test end', function(){ report.tests++; });
141
+ runner.on('pass', function(){ report.passes++; });
142
+ runner.on('pending', function(){ report.pending++; });
143
+ runner.on('fail', function(test, err){
144
+ report.failures.push({title: test.fullTitle(), message: String(err && err.message), stack: err && err.stack});
145
+ });
146
+ runner.on('end', send);
147
+ })();
148
+ </script>
149
+ </body>
150
+ </html>
151
+ `;
152
+ }
153
+ function isObject(x) {
154
+ return typeof x === 'object' && x !== null;
155
+ }
156
+ function asStringArray(x, name) {
157
+ if (!Array.isArray(x) || !x.every(item => typeof item === 'string')) {
158
+ throw new Error(`server4test: invalid browser test report, ${name} must be an array of strings`);
159
+ }
160
+ return x;
161
+ }
162
+ function asNumber(x, name) {
163
+ if (typeof x !== 'number') {
164
+ throw new Error(`server4test: invalid browser test report, ${name} must be a number`);
165
+ }
166
+ return x;
167
+ }
168
+ function parseBrowserTestReport(body) {
169
+ if (!isObject(body)) {
170
+ throw new Error('server4test: invalid browser test report, must be an object');
171
+ }
172
+ if (!Array.isArray(body.console) || !body.console.every(line => isObject(line) && typeof line.level === 'string' && typeof line.text === 'string')) {
173
+ throw new Error('server4test: invalid browser test report, console must be an array of {level, text}');
174
+ }
175
+ if (!Array.isArray(body.failures) || !body.failures.every(failure => isObject(failure) && typeof failure.title === 'string' && typeof failure.message === 'string' && (failure.stack == null || typeof failure.stack === 'string'))) {
176
+ throw new Error('server4test: invalid browser test report, failures must be an array of {title, message, stack}');
177
+ }
178
+ return {
179
+ userAgent: String(body.userAgent),
180
+ console: body.console,
181
+ loadErrors: asStringArray(body.loadErrors, 'loadErrors'),
182
+ errors: asStringArray(body.errors, 'errors'),
183
+ finished: body.finished === true,
184
+ tests: asNumber(body.tests, 'tests'),
185
+ passes: asNumber(body.passes, 'passes'),
186
+ pending: asNumber(body.pending, 'pending'),
187
+ failures: body.failures
188
+ };
189
+ }
190
+ /** prints the report and returns true if all is ok */
191
+ function printBrowserTestReport(report, label) {
192
+ console.log(`[${label}] ${report.userAgent}`);
193
+ report.console.forEach(line => console.log(`[${label}] ${line.level == 'log' ? '' : line.level + ': '}${line.text}`));
194
+ report.loadErrors.forEach(src => console.error(`[${label}] can not load: ${src}`));
195
+ report.errors.forEach(error => console.error(`[${label}] error: ${error}`));
196
+ report.failures.forEach((failure, i) => {
197
+ console.error(`[${label}] ${i + 1}) ${failure.title}`);
198
+ console.error(`[${label}] ${failure.stack || failure.message}`);
199
+ });
200
+ var ok = !report.loadErrors.length && !report.errors.length && !report.failures.length && report.tests > 0;
201
+ console.log(`[${label}] ${ok ? 'OK' : 'FAILED'}: ${report.tests} tests, ${report.passes} passing, ${report.failures.length} failing, ${report.pending} pending`);
202
+ if (report.tests == 0) {
203
+ console.error(`[${label}] no tests were run`);
204
+ }
205
+ return ok;
206
+ }
207
+ async function stopProcess(child) {
208
+ if (child.exitCode !== null || child.signalCode !== null)
209
+ return;
210
+ await new Promise(resolve => {
211
+ var timer = setTimeout(() => {
212
+ console.error('server4test: the browser process does not finish');
213
+ resolve();
214
+ }, 10000);
215
+ child.once('exit', () => {
216
+ clearTimeout(timer);
217
+ resolve();
218
+ });
219
+ child.kill();
220
+ });
221
+ }
222
+ async function runBrowser(server, baseUrl, browser, timeout) {
223
+ var executable = findExecutable(browser);
224
+ var profileDir = await fs_1.promises.mkdtemp(Path.join(os.tmpdir(), 'server4test-' + browser + '-'));
225
+ var runId = browser + '-' + Date.now();
226
+ var url = baseUrl + exports.BROWSER_TEST_PAGE_PATH + '?run=' + encodeURIComponent(runId);
227
+ var child = null;
228
+ var stderr = '';
229
+ console.log(`[${browser}] ${executable} ${url}`);
230
+ try {
231
+ var browserProcess = (0, child_process_1.spawn)(executable, BROWSERS[browser].args(profileDir, url), { stdio: ['ignore', 'ignore', 'pipe'] });
232
+ child = browserProcess;
233
+ var report = await new Promise((resolve, reject) => {
234
+ var _a;
235
+ var timer = setTimeout(() => reject(new Error(`server4test: timeout (${timeout}ms) waiting for ${browser} results`)), timeout);
236
+ server.browserTestListeners.set(runId, (report) => {
237
+ clearTimeout(timer);
238
+ resolve(report);
239
+ });
240
+ (_a = browserProcess.stderr) === null || _a === void 0 ? void 0 : _a.on('data', (chunk) => {
241
+ stderr = (stderr + chunk.toString()).slice(-8000);
242
+ });
243
+ browserProcess.on('error', (err) => {
244
+ clearTimeout(timer);
245
+ reject(err);
246
+ });
247
+ browserProcess.on('exit', (code, signal) => {
248
+ clearTimeout(timer);
249
+ reject(new Error(`server4test: ${browser} finished (code ${code}, signal ${signal}) before sending results`));
250
+ });
251
+ });
252
+ return printBrowserTestReport(report, browser);
253
+ }
254
+ catch (err) {
255
+ console.error(`[${browser}]`, err);
256
+ if (stderr) {
257
+ console.error(`[${browser}] browser stderr:\n${stderr}`);
258
+ }
259
+ return false;
260
+ }
261
+ finally {
262
+ server.browserTestListeners.delete(runId);
263
+ if (child) {
264
+ await stopProcess(child);
265
+ }
266
+ try {
267
+ await fs_1.promises.rm(profileDir, { recursive: true, force: true, maxRetries: 10, retryDelay: 300 });
268
+ }
269
+ catch (err) {
270
+ console.error(`[${browser}] server4test: can not remove the temporary profile ${profileDir}`, err);
271
+ }
272
+ }
273
+ }
274
+ /** runs the browser test in each browser (comma separated list), returns true if all is ok */
275
+ async function runBrowsers(ServerConstructor, opts, browserList) {
276
+ var _a;
277
+ var browserTest = opts["browser-test"];
278
+ if (browserTest == null) {
279
+ console.error('server4test: --run-browser needs "browser-test" in server4test-config');
280
+ return false;
281
+ }
282
+ if (!browserList) {
283
+ console.error('server4test: --run-browser needs a browser list, i.e.: --run-browser chrome,firefox');
284
+ return false;
285
+ }
286
+ var browsers = browserList.split(',');
287
+ var unknown = browsers.filter(browser => !isBrowserName(browser));
288
+ if (unknown.length) {
289
+ console.error(`server4test: unknown browser ${unknown.join(', ')}. Valid browsers: ${Object.keys(BROWSERS).join(', ')}`);
290
+ return false;
291
+ }
292
+ var server = new ServerConstructor(Object.assign(Object.assign({}, opts), { port: 0 }));
293
+ await server.start();
294
+ try {
295
+ var address = server.listener.address();
296
+ if (!isObject(address) || typeof address.port !== 'number') {
297
+ throw new Error('server4test: can not get the server port');
298
+ }
299
+ var baseUrl = 'http://localhost:' + address.port + opts["base-url"];
300
+ var ok = true;
301
+ for (var browser of browsers.filter(isBrowserName)) {
302
+ ok = await runBrowser(server, baseUrl, browser, (_a = browserTest.timeout) !== null && _a !== void 0 ? _a : exports.BROWSER_TEST_TIMEOUT_DEFAULT) && ok;
303
+ }
304
+ return ok;
305
+ }
306
+ finally {
307
+ await server.closeServer();
308
+ }
309
+ }
310
+ //# sourceMappingURL=browser-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-runner.js","sourceRoot":"","sources":["../src/browser-runner.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as express from 'express';
2
2
  import * as serveContent from 'serve-content';
3
3
  import * as serveIndex from 'serve-index';
4
+ import { BrowserTestOpts, BrowserTestReport } from './browser-runner';
4
5
  type RequestDefinition = {
5
6
  method: 'get' | 'post' | 'put' | 'delete' | 'use';
6
7
  path: string;
@@ -25,6 +26,7 @@ export type Server4TestOpts = {
25
26
  deleteRequest: RequestDefinition;
26
27
  };
27
28
  "serve-index": serveIndex.Options;
29
+ "browser-test"?: BrowserTestOpts;
28
30
  };
29
31
  export declare type Request = express.Request;
30
32
  export declare type Response = express.Response;
@@ -42,6 +44,7 @@ export declare class Server4Test {
42
44
  opts: Server4TestOpts;
43
45
  port: number;
44
46
  listener: any;
47
+ browserTestListeners: Map<string, (report: BrowserTestReport) => void>;
45
48
  constructor(opts: Partial<Server4TestOpts>);
46
49
  start(): Promise<void>;
47
50
  webPackService(webPackOptions: any, webpackDevMiddlewareOptions?: any): any;
@@ -58,6 +61,7 @@ export declare class Server4Test {
58
61
  path: string;
59
62
  }[];
60
63
  directServices(): Array<ServiceDef>;
64
+ browserTestServices(browserTest: BrowserTestOpts): ServiceDef[];
61
65
  serveIndex4Test(baseUrl: string, path: string): void;
62
66
  closeServer(): Promise<void>;
63
67
  }
@@ -19,6 +19,7 @@ const fs = require("fs-extra");
19
19
  const fs_1 = require("fs");
20
20
  const Path = require("path");
21
21
  const cast_error_1 = require("cast-error");
22
+ const browser_runner_1 = require("./browser-runner");
22
23
  exports.CONFIG_DEFAULT = {
23
24
  port: 8080,
24
25
  verbose: true,
@@ -65,11 +66,16 @@ exports.CONFIG_SUPER_INSECURE = Object.assign(Object.assign({}, exports.CONFIG_D
65
66
  ".styl":{extOriginal:"styl"},
66
67
  */
67
68
  }, "server4test-directory": true, "local-file-repo": Object.assign(Object.assign({}, exports.CONFIG_DEFAULT["local-file-repo"]), { enabled: true }), "serve-index": Object.assign(Object.assign({}, exports.CONFIG_DEFAULT["serve-index"]), { hidden: true }) });
68
- serveContent.transformer.jade = (0, best_globals_1.changing)(serveContent.transformer[''], { /*extOriginal:'jade', */ optionName: 'jade-direct' });
69
+ var jadeTransformer = (serveContent.transformer[''] instanceof Array ? serveContent.transformer[''] : [serveContent.transformer['']]).find(transformer => transformer.optionName == 'jade');
70
+ if (jadeTransformer == null) {
71
+ throw new Error("server4test: can not find the 'jade' transformer in serve-content");
72
+ }
73
+ serveContent.transformer.jade = (0, best_globals_1.changing)(jadeTransformer, { /*extOriginal:'jade', */ optionName: 'jade-direct' });
69
74
  serveContent.transformer.styl = (0, best_globals_1.changing)(serveContent.transformer.css, { /*extOriginal:'styl', */ optionName: 'styl-direct' });
70
75
  class Server4Test {
71
76
  constructor(opts) {
72
77
  this.port = 3000;
78
+ this.browserTestListeners = new Map();
73
79
  this.app = express();
74
80
  this.opts = (0, best_globals_1.changing)(exports.CONFIG_DEFAULT, opts);
75
81
  this.app.use(cookieParser());
@@ -111,13 +117,30 @@ class Server4Test {
111
117
  }
112
118
  server.app.use(baseUrl + '/', serveContent(path, optsGenericForFiles));
113
119
  });
114
- await new Promise(function (resolve, _reject) {
115
- server.listener = server.app.listen(server.port, resolve);
120
+ await new Promise(function (resolve, reject) {
121
+ server.listener = server.app.listen(server.port, function (error) {
122
+ if (error) {
123
+ reject(error);
124
+ }
125
+ else {
126
+ resolve();
127
+ }
128
+ });
116
129
  });
117
130
  }
118
131
  webPackService(webPackOptions, webpackDevMiddlewareOptions) {
119
- const webpack = require('webpack');
120
- const middleware = require('webpack-dev-middleware');
132
+ var webpack, middleware;
133
+ try {
134
+ webpack = require('webpack');
135
+ middleware = require('webpack-dev-middleware');
136
+ }
137
+ catch (err) {
138
+ var error = (0, cast_error_1.unexpected)(err);
139
+ if (error.code == 'MODULE_NOT_FOUND') {
140
+ throw new Error("server4test: webpack.config.js found but webpack and webpack-dev-middleware are optional and not installed. Use: npm install --save-dev webpack webpack-dev-middleware. " + error.message);
141
+ }
142
+ throw error;
143
+ }
121
144
  const compiler = webpack(webPackOptions || {
122
145
  // webpack options
123
146
  });
@@ -217,8 +240,39 @@ class Server4Test {
217
240
  services = [...services, ...this.fileServices()];
218
241
  console.log('services', services);
219
242
  }
243
+ if (this.opts["browser-test"]) {
244
+ services = [...services, ...this.browserTestServices(this.opts["browser-test"])];
245
+ }
220
246
  return services;
221
247
  }
248
+ browserTestServices(browserTest) {
249
+ var jsonParser = express.json({ limit: '10mb' });
250
+ return [
251
+ { path: browser_runner_1.BROWSER_TEST_PAGE_PATH, method: 'get', html: (0, browser_runner_1.browserTestPage)(this.opts["base-url"], browserTest) },
252
+ { path: browser_runner_1.BROWSER_TEST_RESULT_PATH, method: 'post', middleware: (req, res) => {
253
+ jsonParser(req, res, (err) => {
254
+ try {
255
+ if (err)
256
+ throw err;
257
+ var report = (0, browser_runner_1.parseBrowserTestReport)(req.body);
258
+ var runId = typeof req.query.run === "string" ? req.query.run : null;
259
+ var listener = runId == null ? undefined : this.browserTestListeners.get(runId);
260
+ if (listener) {
261
+ listener(report);
262
+ }
263
+ else {
264
+ (0, browser_runner_1.printBrowserTestReport)(report, 'browser');
265
+ }
266
+ res.send('ok');
267
+ }
268
+ catch (err) {
269
+ console.error('server4test: invalid browser test report', err);
270
+ res.status(400).send('invalid browser test report');
271
+ }
272
+ });
273
+ } },
274
+ ];
275
+ }
222
276
  serveIndex4Test(baseUrl, path) {
223
277
  var server = this;
224
278
  server.app.use(baseUrl + '/', function (req, res, next) {
@@ -263,7 +317,7 @@ class Server4Test {
263
317
  exports.Server4Test = Server4Test;
264
318
  async function launch(opts) {
265
319
  var _a, e_1, _b, _c;
266
- var _d, _e, _f, _g, _h;
320
+ var _d, _e, _f, _g, _h, _j;
267
321
  var config = await MiniTools.readConfig([
268
322
  {
269
323
  serverClass: Server4Test,
@@ -274,6 +328,11 @@ async function launch(opts) {
274
328
  'local-config',
275
329
  ], { whenNotExist: 'ignore' });
276
330
  var ServerConstructor = config.serverClass;
331
+ var runBrowserIndex = process.argv.indexOf('--run-browser');
332
+ if (runBrowserIndex >= 0) {
333
+ process.exitCode = await (0, browser_runner_1.runBrowsers)(ServerConstructor, (0, best_globals_1.changing)(exports.CONFIG_DEFAULT, config.server4test), process.argv[runBrowserIndex + 1]) ? 0 : 1;
334
+ return;
335
+ }
277
336
  var server = new ServerConstructor(config.server4test);
278
337
  server.start();
279
338
  if (config.server4test.verbose) {
@@ -281,25 +340,28 @@ async function launch(opts) {
281
340
  console.dir(config, { depth: 6 });
282
341
  }
283
342
  console.log('server listening at', 'http://localhost:' + server.port + ((_d = config.server4test['base-url']) !== null && _d !== void 0 ? _d : '') + '?dir');
343
+ if (config.server4test['browser-test']) {
344
+ console.log('browser test at', 'http://localhost:' + server.port + ((_e = config.server4test['base-url']) !== null && _e !== void 0 ? _e : '') + browser_runner_1.BROWSER_TEST_PAGE_PATH);
345
+ }
284
346
  if (!config.server4test['server4test-directory']) {
285
347
  console.error('server4test-directory is not set to true');
286
348
  console.warn('try', 'server4test --super-insecure');
287
349
  var dir = await fs.opendir('.');
288
350
  try {
289
- for (var _j = true, dir_1 = __asyncValues(dir), dir_1_1; dir_1_1 = await dir_1.next(), _a = dir_1_1.done, !_a; _j = true) {
351
+ for (var _k = true, dir_1 = __asyncValues(dir), dir_1_1; dir_1_1 = await dir_1.next(), _a = dir_1_1.done, !_a; _k = true) {
290
352
  _c = dir_1_1.value;
291
- _j = false;
353
+ _k = false;
292
354
  const dirent = _c;
293
355
  var ext = Path.extname(dirent.name);
294
- if (((_e = config.server4test['serve-content']) === null || _e === void 0 ? void 0 : _e.allowAllExts) || ext && ((_g = (_f = config.server4test['serve-content']) === null || _f === void 0 ? void 0 : _f.allowedExts) === null || _g === void 0 ? void 0 : _g.includes(ext))) {
295
- console.log(' localhost:' + server.port + ((_h = config.server4test['base-url']) !== null && _h !== void 0 ? _h : '') + '/' + dirent.name);
356
+ if (((_f = config.server4test['serve-content']) === null || _f === void 0 ? void 0 : _f.allowAllExts) || ext && ((_h = (_g = config.server4test['serve-content']) === null || _g === void 0 ? void 0 : _g.allowedExts) === null || _h === void 0 ? void 0 : _h.includes(ext))) {
357
+ console.log(' localhost:' + server.port + ((_j = config.server4test['base-url']) !== null && _j !== void 0 ? _j : '') + '/' + dirent.name);
296
358
  }
297
359
  }
298
360
  }
299
361
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
300
362
  finally {
301
363
  try {
302
- if (!_j && !_a && (_b = dir_1.return)) await _b.call(dir_1);
364
+ if (!_k && !_a && (_b = dir_1.return)) await _b.call(dir_1);
303
365
  }
304
366
  finally { if (e_1) throw e_1.error; }
305
367
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server4test.js","sourceRoot":"","sources":["../src/server4test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server4test.js","sourceRoot":"","sources":["../src/server4test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "server4test",
3
3
  "description": "server for test",
4
- "version": "1.0.0",
4
+ "version": "2.0.0-rc.0",
5
5
  "files": [
6
6
  "lib"
7
7
  ],
@@ -19,33 +19,53 @@
19
19
  "bin": {
20
20
  "server4test": "./lib/launch4test.js"
21
21
  },
22
+ "overrides": {
23
+ "@babel/core": ">=7.29.6",
24
+ "diff": ">=8.0.2",
25
+ "serialize-javascript": ">=7.0.0",
26
+ "stylus": {
27
+ "glob": "^11"
28
+ },
29
+ "uuid": ">=14.0.0"
30
+ },
22
31
  "dependencies": {
23
32
  "cookie-parser": "^1.4.7",
24
- "express": "^4.21.2",
25
- "fs-extra": "^11.2.0",
26
- "serve-index": "^1.9.1",
27
- "typescript": "^5.7.2",
28
- "webpack": "^5.97.1",
29
- "webpack-dev-middleware": "^7.4.2",
30
- "best-globals": "^1.1.6",
31
- "cast-error": "^0.1.1",
32
- "mini-tools": "^1.13.2",
33
- "serve-content": "^0.3.20"
33
+ "express": "^5.2.1",
34
+ "fs-extra": "^11.4.0",
35
+ "serve-index": "^1.9.2",
36
+ "best-globals": "^2.2.2",
37
+ "cast-error": "^0.1.5",
38
+ "mini-tools": "^1.13.10",
39
+ "serve-content": "^1.0.5"
40
+ },
41
+ "peerDependencies": {
42
+ "webpack": "^5.109.2",
43
+ "webpack-dev-middleware": "^8.1.0"
44
+ },
45
+ "peerDependenciesMeta": {
46
+ "webpack": {
47
+ "optional": true
48
+ },
49
+ "webpack-dev-middleware": {
50
+ "optional": true
51
+ }
34
52
  },
35
53
  "devDependencies": {
36
- "@types/cookie-parser": "^1.4.8",
37
- "@types/express": "^5.0.0",
54
+ "typescript": "^5.7.2",
55
+ "@types/cookie-parser": "^1.4.10",
56
+ "@types/express": "^5.0.6",
38
57
  "@types/fs-extra": "^11.0.4",
39
58
  "@types/mocha": "^10.0.10",
40
- "@types/node": "^22.10.2",
59
+ "@types/node": "^26.1.2",
41
60
  "@types/serve-index": "^1.9.4",
42
61
  "es5-shim": "^4.6.7",
43
62
  "fetch-ie8": "^1.5.0",
44
- "mocha": "^11.0.1",
63
+ "mocha": "^12.0.0-rc.5",
45
64
  "whatwg-fetch": "^3.6.20",
46
- "require-bro": "^0.3.1",
65
+ "qa-control": "^0.9.1",
66
+ "require-bro": "^0.3.6",
47
67
  "types.d.ts": "^0.6.22",
48
- "mixin-patch": "^0.4.1"
68
+ "mixin-patch": "^1.0.0-rc.3"
49
69
  },
50
70
  "engines": {
51
71
  "node": ">= 20"
@@ -65,11 +85,12 @@
65
85
  "mixin-patch": "mixin-patch"
66
86
  },
67
87
  "qa-control": {
68
- "package-version": "0.3.0",
69
88
  "coverage": 0,
70
89
  "run-in": "client",
71
- "stability": "extending",
72
- "type": "lib"
90
+ "type": "lib",
91
+ "gha": "all",
92
+ "test-appveyor": true,
93
+ "multilang": "yes"
73
94
  },
74
95
  "mixin-patch": {
75
96
  "patch": [