simple-ascii-chart
Version:
Simple ascii chart generator
163 lines (162 loc) • 5.64 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var defaults_1 = require("../defaults");
var constants_1 = require("../../constants");
describe('Chart Helper Functions', function () {
describe('getSymbols', function () {
it('should return default symbols when none are provided', function () {
var symbols = (0, defaults_1.getSymbols)({});
expect(symbols).toEqual({
axisSymbols: constants_1.AXIS,
emptySymbol: constants_1.EMPTY,
backgroundSymbol: constants_1.EMPTY,
borderSymbol: undefined,
});
});
it('should override default symbols when provided', function () {
var customSymbols = {
axis: { x: 'X', y: 'Y' },
empty: '-',
background: '=',
border: '#',
};
var symbols = (0, defaults_1.getSymbols)({ symbols: customSymbols });
expect(symbols).toEqual({
axisSymbols: __assign(__assign({}, constants_1.AXIS), customSymbols.axis),
emptySymbol: customSymbols.empty,
backgroundSymbol: customSymbols.background,
borderSymbol: customSymbols.border,
});
});
});
describe('getChartSize', function () {
it('should return default sizes when width and height are not provided', function () {
var input = [
[
[1, 2],
[2, 4],
[3, 6],
],
];
var size = (0, defaults_1.getChartSize)({ input: input });
expect(size).toEqual({
minX: 1,
minY: 2,
plotWidth: 3, // length of rangeX
plotHeight: 5, // maxY - minY + 1
expansionX: [1, 3],
expansionY: [2, 6],
});
});
it('should use provided width and height', function () {
var input = [
[
[1, 2],
[2, 4],
[3, 6],
],
];
var size = (0, defaults_1.getChartSize)({ input: input, width: 10, height: 10 });
expect(size).toEqual({
minX: 1,
minY: 2,
plotWidth: 10,
plotHeight: 10,
expansionX: [1, 3],
expansionY: [2, 6],
});
});
it('should adjust for small values without height', function () {
var input = [
[
[1, 2],
[2, 4],
],
];
var size = (0, defaults_1.getChartSize)({ input: input });
expect(size).toEqual({
minX: 1,
minY: 2,
plotWidth: 2, // length of rangeX
plotHeight: 3, // length of rangeY since it's less than 3 without provided height
expansionX: [1, 2],
expansionY: [2, 4],
});
});
it('should handle a mix of positive and negative values', function () {
var input = [
[
[-3, -2],
[-2, 4],
[0, 0],
[3, -1],
],
];
var size = (0, defaults_1.getChartSize)({ input: input });
expect(size).toEqual({
minX: -3,
minY: -2,
plotWidth: 4, // length of rangeX
plotHeight: 7, // maxY - minY + 1
expansionX: [-3, 3],
expansionY: [-2, 4],
});
});
});
describe('getLabelShift', function () {
it('should calculate label shifts correctly', function () {
var input = [
[
[1, 2],
[3, 4],
[5, 6],
],
];
var transformLabel = function (value) { return value.toString(); };
var result = (0, defaults_1.getLabelShift)({
input: input,
transformLabel: transformLabel,
expansionX: [1, 5],
expansionY: [2, 6],
minX: 1,
});
expect(result.xShift).toBe(1);
expect(result.yShift).toBe(1);
});
});
describe('getInput', function () {
it('should convert singleline input to multiline', function () {
var input = [
[1, 2],
[3, 4],
];
var result = (0, defaults_1.getInput)({ rawInput: input });
expect(result).toEqual([input]);
});
it('should keep multiline input unchanged', function () {
var input = [
[
[1, 2],
[3, 4],
],
[
[5, 6],
[7, 8],
],
];
var result = (0, defaults_1.getInput)({ rawInput: input });
expect(result).toEqual(input);
});
});
});