##// END OF EJS Templates
Added 'Attrs', 'Events' type parameters to DjxWidgetBase, typed 'on' and 'emit' methods
Added 'Attrs', 'Events' type parameters to DjxWidgetBase, typed 'on' and 'emit' methods

File last commit:

r1:b6ccfccf314f default
r30:a46488b209e8 v1.0.0-rc14 default
Show More
Tap.ts
148 lines | 3.5 KiB | video/mp2t | TypeScriptLexer
cin
typescript strict mode...
r1 import { stringify } from "yaml";
export interface TapWriter {
version(): void;
plan(n: number): void;
fail(e: any): void;
ok(msg: string): void;
skip(msg: string): void;
bailOut(msg: string): void;
comment(msg: string): void;
yaml(data: any): void;
end(): void;
}
enum TapState {
Init,
VersionWritten,
Ready,
ReadyWithoutPlan,
End
}
export abstract class AbstractTapWriter implements TapWriter {
private _state = TapState.Init;
private _version = 13;
private _testIndex = 1;
private _moveVersion() {
switch (this._state) {
case TapState.Init:
this._state = TapState.VersionWritten;
break;
default:
throw new Error("Invalid operation");
}
}
private _movePlan() {
switch (this._state) {
case TapState.Init:
case TapState.VersionWritten:
this._state = TapState.Ready;
break;
case TapState.ReadyWithoutPlan:
this._state = TapState.End;
break;
default:
throw new Error("Invalid operation");
}
}
private _moveTestResult() {
switch (this._state) {
case TapState.Init:
case TapState.VersionWritten:
this._state = TapState.ReadyWithoutPlan;
break;
case TapState.Ready:
case TapState.ReadyWithoutPlan:
break;
default:
throw new Error("Invalid operation");
}
}
private _moveEnd() {
switch (this._state) {
case TapState.End:
throw new Error("Invalid operation");
default:
this._state = TapState.End;
}
}
private _moveDiag() {
switch (this._state) {
case TapState.Init:
case TapState.VersionWritten:
this._state = TapState.ReadyWithoutPlan;
break;
case TapState.Ready:
case TapState.ReadyWithoutPlan:
break;
default:
throw new Error("Invalid operation");
}
}
version() {
this._moveVersion();
this._writeLine(`TAP version ${this._version}`);
}
plan(n: number) {
this._movePlan();
this._writeLine(`1..${n}`);
}
fail(e: any) {
this._moveTestResult();
this._writeText(`not ok ${this._testIndex} ${e}`);
this._testIndex++;
}
ok(msg: string) {
this._moveTestResult();
this._writeText(`ok ${this._testIndex} ${msg}`);
this._testIndex++;
}
skip(msg: string) {
this._moveTestResult();
this._writeText(`ok ${this._testIndex} # SKIPPED: ${msg}`);
this._testIndex++;
}
bailOut(msg: string) {
this._moveEnd();
this._writeText(`Bail out! ${msg}`);
}
comment(msg: string) {
this._moveDiag();
this._writeText(`# ${msg}`);
}
yaml(data: any) {
this._moveDiag();
this._writeLine(" ---");
stringify(data).split("\r\n?").forEach(line => this._writeLine(" " + line));
this._writeLine(" ...");
}
end() {
this._moveEnd();
}
private _writeText(text: string) {
text.split("\r\n?").forEach((line, i) => this._writeLine(i ? "# " + line : line));
}
abstract _writeLine(text: string): void;
}