Files
bitburner-src/test/jest/Netscript/UserInterface.test.ts

145 lines
4.8 KiB
TypeScript

import { IStyleSettings, UserInterfaceTheme } from "../../../src/ScriptEditor/NetscriptDefinitions";
import { Settings } from "../../../src/Settings/Settings";
import { defaultStyles } from "../../../src/Themes/Styles";
import { defaultTheme } from "../../../src/Themes/Themes";
import { getNS, initGameEnvironment, setupBasicTestingEnvironment } from "./Utilities";
const themeHexColor = "#abc";
const fontFamily = "monospace";
beforeAll(() => {
initGameEnvironment();
});
describe("setTheme", () => {
beforeEach(() => {
setupBasicTestingEnvironment();
Settings.theme = { ...defaultTheme };
});
describe("Success", () => {
test("Full theme", () => {
const ns = getNS();
const newTheme = ns.ui.getTheme();
newTheme.primary = themeHexColor;
ns.ui.setTheme(newTheme);
const result = ns.ui.getTheme();
expect(result.primary).toStrictEqual(themeHexColor);
expect(result.secondary).toStrictEqual(defaultTheme.secondary);
});
test("Partial theme", () => {
const ns = getNS();
const newTheme = {
primary: themeHexColor,
};
ns.ui.setTheme(newTheme as unknown as UserInterfaceTheme);
const result = ns.ui.getTheme();
expect(result.primary).toStrictEqual(themeHexColor);
expect(result.secondary).toStrictEqual(defaultTheme.secondary);
});
test("Unknown property", () => {
const ns = getNS();
const newTheme = {
primary: themeHexColor,
unknownProperty: themeHexColor,
};
ns.ui.setTheme(newTheme as unknown as UserInterfaceTheme);
const result = ns.ui.getTheme();
expect(result.primary).toStrictEqual(themeHexColor);
expect(result.secondary).toStrictEqual(defaultTheme.secondary);
// "unknownProperty" of newTheme is not changed.
expect(newTheme.unknownProperty).toStrictEqual(themeHexColor);
// "unknownProperty" is ignored when being processed.
expect((result as unknown as { unknownProperty: unknown }).unknownProperty).toBeUndefined();
});
});
describe("Failure", () => {
test("Full theme", () => {
const ns = getNS();
const newTheme = ns.ui.getTheme();
newTheme.primary = "";
ns.ui.setTheme(newTheme);
const result = ns.ui.getTheme();
expect(result.primary).toStrictEqual(defaultTheme.primary);
});
test("Partial theme", () => {
const ns = getNS();
const newTheme = {
primary: "",
};
ns.ui.setTheme(newTheme as unknown as UserInterfaceTheme);
const result = ns.ui.getTheme();
expect(result.primary).toStrictEqual(defaultTheme.primary);
});
});
});
describe("setStyles", () => {
beforeEach(() => {
setupBasicTestingEnvironment();
Settings.styles = { ...defaultStyles };
});
describe("Success", () => {
test("Full styles", () => {
const ns = getNS();
const newStyles = ns.ui.getStyles();
newStyles.fontFamily = fontFamily;
ns.ui.setStyles(newStyles);
const result = ns.ui.getStyles();
expect(result.fontFamily).toStrictEqual(fontFamily);
expect(result.fontSize).toStrictEqual(defaultStyles.fontSize);
});
test("Partial styles", () => {
const ns = getNS();
const newStyles = {
fontFamily: fontFamily,
};
ns.ui.setStyles(newStyles as unknown as IStyleSettings);
const result = ns.ui.getStyles();
expect(result.fontFamily).toStrictEqual(fontFamily);
expect(result.fontSize).toStrictEqual(defaultStyles.fontSize);
});
test("Unknown property", () => {
const ns = getNS();
const newStyles = {
fontFamily: fontFamily,
unknownProperty: themeHexColor,
};
ns.ui.setStyles(newStyles as unknown as IStyleSettings);
const result = ns.ui.getStyles();
expect(result.fontFamily).toStrictEqual(fontFamily);
expect(result.fontSize).toStrictEqual(defaultStyles.fontSize);
// "unknownProperty" of newStyles is not changed.
expect(newStyles.unknownProperty).toStrictEqual(themeHexColor);
// "unknownProperty" is ignored when being processed.
expect((result as unknown as { unknownProperty: unknown }).unknownProperty).toBeUndefined();
});
});
describe("Failure", () => {
test("Full styles", () => {
const ns = getNS();
const newStyles = ns.ui.getStyles();
(newStyles.fontFamily as unknown) = 123;
ns.ui.setStyles(newStyles);
const result = ns.ui.getStyles();
expect(result.fontFamily).toStrictEqual(defaultStyles.fontFamily);
});
test("Partial styles", () => {
const ns = getNS();
const newStyles = {
fontFamily: 123,
};
ns.ui.setStyles(newStyles as unknown as IStyleSettings);
const result = ns.ui.getStyles();
expect(result.fontFamily).toStrictEqual(defaultStyles.fontFamily);
});
});
});