59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
import { TestCase } from "./framework/test_case.js";
|
|
import { setupDom, teardownDom } from "./framework/dom.js";
|
|
import {
|
|
MENU_BACKGROUNDS,
|
|
applyMenuBackground,
|
|
pickMenuBackground,
|
|
} from "../client/js/menu_background.js";
|
|
|
|
function fakeBody() {
|
|
const classes = new Set();
|
|
return {
|
|
classList: {
|
|
add: (name) => classes.add(name),
|
|
remove: (name) => classes.delete(name),
|
|
contains: (name) => classes.has(name),
|
|
},
|
|
};
|
|
}
|
|
|
|
export class MenuBackgroundTest extends TestCase {
|
|
test_ships_two_distinct_backgrounds() {
|
|
this.assertSize(MENU_BACKGROUNDS, 2);
|
|
this.assertNotEqual(MENU_BACKGROUNDS[0].source, MENU_BACKGROUNDS[1].source);
|
|
this.assertNotEqual(MENU_BACKGROUNDS[0].class, MENU_BACKGROUNDS[1].class);
|
|
}
|
|
|
|
test_random_pick_covers_both_ends() {
|
|
this.assertEqual(pickMenuBackground(() => 0), MENU_BACKGROUNDS[0]);
|
|
this.assertEqual(pickMenuBackground(() => 0.499), MENU_BACKGROUNDS[0]);
|
|
this.assertEqual(pickMenuBackground(() => 0.5), MENU_BACKGROUNDS[1]);
|
|
this.assertEqual(pickMenuBackground(() => 1), MENU_BACKGROUNDS[1]);
|
|
}
|
|
|
|
test_apply_swaps_the_class_on_the_body() {
|
|
const body = fakeBody();
|
|
applyMenuBackground(MENU_BACKGROUNDS[1], body);
|
|
this.assertTrue(body.classList.contains(MENU_BACKGROUNDS[1].class));
|
|
this.assertFalse(body.classList.contains(MENU_BACKGROUNDS[0].class));
|
|
|
|
applyMenuBackground(MENU_BACKGROUNDS[0], body);
|
|
this.assertTrue(body.classList.contains(MENU_BACKGROUNDS[0].class));
|
|
this.assertFalse(body.classList.contains(MENU_BACKGROUNDS[1].class));
|
|
}
|
|
|
|
async test_app_launch_picks_a_background() {
|
|
const env = await setupDom();
|
|
try {
|
|
await import(`../client/js/app.js?background=${Date.now()}`);
|
|
const classes = env.window.document.body.classList;
|
|
this.assert(
|
|
classes.contains("menu-bg-0") || classes.contains("menu-bg-1"),
|
|
"a background class is applied at launch"
|
|
);
|
|
} finally {
|
|
teardownDom(env);
|
|
}
|
|
}
|
|
}
|