webamp/js/components/MainWindow/Marquee.test.js
2018-01-03 19:52:00 -08:00

134 lines
3.8 KiB
JavaScript

import {
mod,
getBalanceText,
getVolumeText,
getPositionText,
getDoubleSizeModeText,
stepOffset,
pixelUnits,
loopText
} from "./Marquee";
describe("mod", () => {
it("behaves differently than % for negative numbers", () => {
expect(mod(-17, 5)).not.toBe(-17 % 5);
});
it("always returns positive", () => {
expect(mod(-17, 5)).toBe(3);
});
});
describe("getBalanceText", () => {
it("treats negative numbers as left", () => {
const actual = getBalanceText(-25);
const expected = "Balance: 25% Left";
expect(actual).toEqual(expected);
});
it("treats positive numbers as right", () => {
const actual = getBalanceText(25);
const expected = "Balance: 25% Right";
expect(actual).toEqual(expected);
});
it("has a special case for center", () => {
const actual = getBalanceText(0);
const expected = "Balance: Center";
expect(actual).toEqual(expected);
});
});
describe("getVolumeText", () => {
it("expresses volume as percent", () => {
const actual = getVolumeText(50);
const expected = "Volume: 50%";
expect(actual).toEqual(expected);
});
});
describe("getPositionText", () => {
it("formats a position", () => {
const duration = 86;
const seekToPercent = 85;
const actual = getPositionText(duration, seekToPercent);
const expected = "Seek to: 01:13/01:26 (85%)";
expect(actual).toEqual(expected);
});
});
describe("stepOffset", () => {
const long = "This is a long string. Longer than 30 characters!";
it("starts at 0", () => {
const actual = stepOffset(long, 0, 0);
const expected = 0;
expect(actual).toEqual(expected);
});
it("first step offsets by one character", () => {
const actual = stepOffset(long, 1, 0);
const expected = 5;
expect(actual).toEqual(expected);
});
it("resets to 0 when step === string.length", () => {
const actual = stepOffset(long, long.length, 0);
const expected = 0;
expect(actual).toEqual(expected);
});
it("offsets by one char when step = string.length + 1", () => {
const actual = stepOffset(long, long.length + 1, 0);
const expected = 5;
expect(actual).toEqual(expected);
});
it("does not try to offset strings shorter than 30 characters", () => {
const actual = stepOffset("hello", 15, 0);
const expected = 0;
expect(actual).toEqual(expected);
});
it("applies an additional pixel offset", () => {
const actual = stepOffset("hello", 1, 51); // WAT?
const expected = 0;
expect(actual).toEqual(expected);
});
});
describe("pixelUnits", () => {
it("converts an integer into a CSS offset", () => {
const actual = pixelUnits(1);
const expected = "1px";
expect(actual).toEqual(expected);
});
it("handles 0", () => {
const actual = pixelUnits(0);
const expected = "0px";
expect(actual).toEqual(expected);
});
it("handles negative values", () => {
const actual = pixelUnits(-10);
const expected = "-10px";
expect(actual).toEqual(expected);
});
});
describe("loopText", () => {
const long = "This is a long string. Longer than 30 characters!";
const short = "This is a short string.";
it("loops long string", () => {
const actual = loopText(long);
const expected = long + long;
expect(actual).toEqual(expected);
});
it("does not loop sort strings", () => {
const actual = loopText(short);
const expected = short;
expect(actual).toEqual(expected);
});
});
describe("getDoubleSizeModeText", () => {
it("prompts to enable when disabled", () => {
const actual = getDoubleSizeModeText(true);
const expected = "Disable doublesize mode";
expect(actual).toEqual(expected);
});
it("prompts to disable when enabled", () => {
const actual = getDoubleSizeModeText(false);
const expected = "Enable doublesize mode";
expect(actual).toEqual(expected);
});
});