pretty-stacktrace-processor.js 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use strict";
  2. var __extends = (this && this.__extends) || (function () {
  3. var extendStatics = function (d, b) {
  4. extendStatics = Object.setPrototypeOf ||
  5. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  6. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  7. return extendStatics(d, b);
  8. };
  9. return function (d, b) {
  10. if (typeof b !== "function" && b !== null)
  11. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  12. extendStatics(d, b);
  13. function __() { this.constructor = d; }
  14. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  15. };
  16. })();
  17. Object.defineProperty(exports, "__esModule", { value: true });
  18. exports.PrettyStacktraceProcessor = void 0;
  19. var fs = require("fs");
  20. var configuration_1 = require("../configuration");
  21. var display_processor_1 = require("../display-processor");
  22. var STACK_REG_EXP = /\((.*):(\d+):(\d+)\)/;
  23. var CONTEXT = 2;
  24. var PrettyStacktraceProcessor = /** @class */ (function (_super) {
  25. __extends(PrettyStacktraceProcessor, _super);
  26. function PrettyStacktraceProcessor() {
  27. return _super !== null && _super.apply(this, arguments) || this;
  28. }
  29. PrettyStacktraceProcessor.prototype.displaySpecErrorMessages = function (spec, log) {
  30. return this.configuration.spec.displayStacktrace === configuration_1.StacktraceOption.PRETTY ? this.displayErrorMessages(spec) : log;
  31. };
  32. PrettyStacktraceProcessor.prototype.displaySummaryErrorMessages = function (spec, log) {
  33. return this.configuration.summary.displayStacktrace === configuration_1.StacktraceOption.PRETTY ? this.displayErrorMessages(spec) : log;
  34. };
  35. PrettyStacktraceProcessor.prototype.displayErrorMessages = function (spec) {
  36. var logs = [];
  37. for (var _i = 0, _a = spec.failedExpectations; _i < _a.length; _i++) {
  38. var failedExpectation = _a[_i];
  39. logs.push(this.theme.failed("- ") + this.theme.failed(failedExpectation.message));
  40. if (failedExpectation.stack) {
  41. logs.push(this.prettifyStack(failedExpectation.stack));
  42. }
  43. }
  44. return logs.join("\n");
  45. };
  46. PrettyStacktraceProcessor.prototype.prettifyStack = function (stack) {
  47. var _this = this;
  48. var logs = [];
  49. var filteredStack = this.configuration.stacktrace.filter(stack);
  50. var stackRegExp = new RegExp(STACK_REG_EXP);
  51. filteredStack.split("\n").forEach(function (stackLine) {
  52. if (stackRegExp.test(stackLine)) {
  53. var _a = stackLine.match(stackRegExp), filename = _a[1], lineNumber = _a[2], columnNumber = _a[3];
  54. var errorContext = _this.retrieveErrorContext(filename, parseInt(lineNumber, 10), parseInt(columnNumber, 10));
  55. logs.push(_this.theme.prettyStacktraceFilename(filename) + ":" + _this.theme.prettyStacktraceLineNumber(lineNumber) + ":" + _this.theme.prettyStacktraceColumnNumber(columnNumber));
  56. logs.push(errorContext + "\n");
  57. }
  58. });
  59. return "\n" + logs.join("\n");
  60. };
  61. PrettyStacktraceProcessor.prototype.retrieveErrorContext = function (filename, lineNb, columnNb) {
  62. var logs = [];
  63. var fileLines;
  64. try {
  65. fileLines = fs.readFileSync(filename, "utf-8")
  66. .split("\n");
  67. }
  68. catch (error) {
  69. return "jasmine-spec-reporter: unable to open '" + filename + "'\n" + error;
  70. }
  71. for (var i = 0; i < fileLines.length; i++) {
  72. var errorLine = lineNb - 1;
  73. if (i >= errorLine - CONTEXT && i <= errorLine + CONTEXT) {
  74. logs.push(fileLines[i]);
  75. }
  76. if (i === errorLine) {
  77. logs.push(" ".repeat(columnNb - 1) + this.theme.prettyStacktraceError("~"));
  78. }
  79. }
  80. return logs.join("\n");
  81. };
  82. return PrettyStacktraceProcessor;
  83. }(display_processor_1.DisplayProcessor));
  84. exports.PrettyStacktraceProcessor = PrettyStacktraceProcessor;
  85. //# sourceMappingURL=pretty-stacktrace-processor.js.map