Files
core2026/app/game-frontend/test/legacyButtonFamily.test.ts
T
Hide_D 71ce057318 fix: 정보 화면 버튼을 공통 Lumen 계열로 통일
세력도시·세력정보·현재도시·내 정보·인사부·외교부의 raised control을 공통 semantic button family에 연결한다. 화면별 크기와 색상은 유지하고 실제 Chromium 상태 geometry 회귀를 추가한다.
2026-08-21 17:34:45 +00:00

99 lines
4.8 KiB
TypeScript

import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import path from 'node:path';
import { describe, it } from 'node:test';
const source = (relativePath: string) => readFile(path.resolve(import.meta.dirname, '../src', relativePath), 'utf8');
void describe('shared Lumen button family', () => {
void it('keeps fixed-height state compensation in the shared control layer', async () => {
const css = await source('assets/styles/legacy-controls.css');
assert.match(css, /\.legacy-button\.legacy-button--fixed-height\s*\{/u);
assert.match(css, /height:\s*calc\(var\(--legacy-button-height\) - 1px\)/u);
assert.match(css, /height:\s*calc\(var\(--legacy-button-height\) - 2px\)/u);
});
void it('connects every reported control to a semantic Lumen variant', async () => {
const [nationGenerals, tournamentHeader, reservedEditor] = await Promise.all([
source('views/NationGeneralsView.vue'),
source('components/tournament/TournamentPageHeader.vue'),
source('components/command/ReservedCommandEditor.vue'),
]);
assert.match(
nationGenerals,
/legacy-button legacy-button--navigation legacy-button--fixed-height top-button nation-button/u
);
assert.match(
nationGenerals,
/legacy-button legacy-button--primary legacy-button--fixed-height top-button mode-button/u
);
assert.match(
nationGenerals,
/legacy-button legacy-button--info legacy-button--fixed-height top-button columns-button/u
);
for (const label of ['돌아가기', '갱신', '보기 모드⌄', '열 선택⌄']) {
assert.match(nationGenerals, new RegExp(label, 'u'));
}
for (const label of ['토너먼트', '베팅장', '창 닫기']) {
assert.match(tournamentHeader, new RegExp(`legacy-button[\\s\\S]{0,260}${label}`, 'u'));
}
assert.match(reservedEditor, /legacy-button legacy-button--info legacy-button--fixed-height select-command/u);
assert.match(reservedEditor, /명령 선택 ▾/u);
});
void it('uses the same family for audited Ref TopBackBar navigation controls', async () => {
const files = [
'views/AuctionView.vue',
'views/BattleCenterView.vue',
'views/BoardView.vue',
'views/ChiefCenterView.vue',
'views/GlobalInfoView.vue',
'views/InheritView.vue',
'views/NationBettingView.vue',
'views/NationStratFinanView.vue',
'views/NpcControlView.vue',
'views/SurveyView.vue',
'views/TroopView.vue',
'views/YearbookView.vue',
];
const contents = await Promise.all(files.map(source));
for (const [index, content] of contents.entries()) {
assert.match(
content,
/legacy-button legacy-button--navigation/u,
`${files[index]} must opt its raised navigation control into the shared family`
);
}
});
void it('connects the information and office page actions to semantic Lumen variants', async () => {
const files = {
nationCities: await source('views/NationCitiesView.vue'),
nationInfo: await source('views/NationInfoView.vue'),
currentCity: await source('views/CurrentCityView.vue'),
myPage: await source('views/MyPageView.vue'),
personnel: await source('views/NationPersonnelView.vue'),
diplomacy: await source('views/DiplomacyView.vue'),
};
assert.match(files.nationCities, /legacy-button legacy-button--navigation back-button/u);
assert.match(files.nationCities, /legacy-button legacy-button--primary integration-button/u);
assert.match(files.nationCities, /legacy-button legacy-button--secondary extra-sort-button/u);
assert.match(files.nationCities, /legacy-button legacy-button--primary appointment-button/u);
assert.match(files.nationInfo, /legacy-button legacy-button--navigation/u);
assert.match(files.currentCity, /legacy-button legacy-button--navigation back-link/u);
assert.match(files.myPage, /legacy-button legacy-button--navigation/u);
assert.match(files.myPage, /legacy-button legacy-button--lumen legacy-button--fixed-height action-button/u);
assert.match(files.myPage, /legacy-button legacy-button--secondary item-button/u);
assert.match(
files.personnel,
/legacy-button legacy-button--lumen legacy-button--fixed-height personnel-change-button/u
);
assert.match(files.personnel, /legacy-button legacy-button--danger/u);
assert.match(files.diplomacy, /legacy-button legacy-button--primary[^>]*[\s\S]{0,80}전송/u);
});
});