A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
53 lines
1.1 KiB
5 years ago
|
import * as http from 'http';
|
||
|
import * as net from 'net'
|
||
|
import express from 'express';
|
||
|
|
||
|
type HandlerFunc = (req: express.Request, res: express.Response) => void;
|
||
|
|
||
|
export default class TestServer {
|
||
|
private http?: http.Server;
|
||
|
|
||
|
private app: express.Application;
|
||
|
|
||
|
constructor(
|
||
|
private port = 0,
|
||
|
private address = '127.0.0.1',
|
||
|
){
|
||
|
this.app = express();
|
||
|
}
|
||
|
|
||
|
handle(path: string, f: HandlerFunc): TestServer {
|
||
|
this.app.get(path, f);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
receiveContent(path: string, content: string): TestServer {
|
||
|
this.app.get(path, (_req: express.Request, res: express.Response) => {
|
||
|
res.status(200).send(content)
|
||
|
});
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
url(path: string = '/'): string {
|
||
|
if (!this.http) {
|
||
|
throw new Error('http server not started');
|
||
|
}
|
||
|
|
||
|
let addr = this.http.address() as net.AddressInfo;
|
||
|
return `http://${addr.address}:${addr.port}${path}`
|
||
|
}
|
||
|
|
||
|
listen() {
|
||
|
this.http = http.createServer(this.app)
|
||
|
this.http.listen(this.port, this.address);
|
||
|
}
|
||
|
|
||
|
close(): void {
|
||
|
if (!this.http) {
|
||
|
return;
|
||
|
}
|
||
|
this.http.close();
|
||
|
this.http = undefined;
|
||
|
}
|
||
|
}
|