Files
Battle-for-Tismo/tests/run_tests.js
T

128 lines
3.9 KiB
JavaScript

// Test runner. Instantiates every suite, calls its `test_*` methods and prints
// a summary, exiting non-zero when anything fails. Run with:
//
// node tests/run_tests.js
import { HexTest } from "./hex_test.js";
import { NoiseTest } from "./noise_test.js";
import { RngTest } from "./rng_test.js";
import { DataTest } from "./data_test.js";
import { MapGeneratorTest } from "./map_generator_test.js";
import { HexPathfinderTest } from "./hex_pathfinder_test.js";
import { TerrainStatsTest } from "./terrain_stats_test.js";
import { RoadsTest } from "./roads_test.js";
import { EconomyTest } from "./economy_test.js";
import { TextFormatTest } from "./text_format_test.js";
import { GameClockTest } from "./game_clock_test.js";
import { LoginManagerTest } from "./login_manager_test.js";
import { RulesTest } from "./rules_test.js";
import { CombatTest } from "./combat_test.js";
import { StackingTest, PillageTest } from "./stacking_test.js";
import { SiegeTest } from "./siege_test.js";
import { AttackOrderTest, ScheduledOrderTest } from "./orders_test.js";
import { GameStateTest } from "./game_state_test.js";
import { GameStateBuildingsTest } from "./game_state_buildings_test.js";
import { GameStateGovernmentTest } from "./game_state_government_test.js";
import { GameStateTechnologyTest } from "./game_state_technology_test.js";
import { DiplomacyStateTest, DiplomacyServerTest } from "./diplomacy_test.js";
import { ConflictsStateTest, ConflictsModalTest } from "./conflicts_test.js";
import { GameServerTest, GameServerOrdersTest, GameServerLoginTest, GameServerLobbyTest } from "./game_server_test.js";
import { ServerStaticTest, ServerLoopTest, ServerProtocolTest } from "./server_test.js";
import { WebSocketProtocolTest } from "./websocket_test.js";
import { NetTest } from "./net_test.js";
import { MapViewTest } from "./map_view_test.js";
import { AirTest } from "./air_test.js";
import { CityModalTest, NationModalTest, ConfirmModalTest, NewsModalTest } from "./modals_test.js";
import { GameScreenTest } from "./game_screen_test.js";
import { GameFeedTest } from "./feed_test.js";
import { AppTest } from "./app_test.js";
import {
OrderStateRegressionTest,
EconomyOrderEdgesTest,
AttritionTest,
CasualtyRecordingTest,
CatalogueSplitTest,
TextFormatRegressionTest,
} from "./regression_test.js";
const SUITES = [
HexTest,
NoiseTest,
RngTest,
DataTest,
MapGeneratorTest,
HexPathfinderTest,
TerrainStatsTest,
RoadsTest,
EconomyTest,
TextFormatTest,
GameClockTest,
LoginManagerTest,
RulesTest,
CombatTest,
StackingTest,
PillageTest,
SiegeTest,
AttackOrderTest,
ScheduledOrderTest,
GameStateTest,
GameStateBuildingsTest,
GameStateGovernmentTest,
GameStateTechnologyTest,
DiplomacyStateTest,
DiplomacyServerTest,
ConflictsStateTest,
ConflictsModalTest,
GameServerTest,
GameServerOrdersTest,
GameServerLoginTest,
GameServerLobbyTest,
ServerStaticTest,
ServerLoopTest,
ServerProtocolTest,
WebSocketProtocolTest,
NetTest,
MapViewTest,
AirTest,
CityModalTest,
NationModalTest,
ConfirmModalTest,
NewsModalTest,
GameScreenTest,
GameFeedTest,
AppTest,
OrderStateRegressionTest,
EconomyOrderEdgesTest,
AttritionTest,
CasualtyRecordingTest,
CatalogueSplitTest,
TextFormatRegressionTest,
];
let passed = 0;
const failures = [];
for (const Suite of SUITES) {
const instance = new Suite();
const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(instance))
.filter((name) => name.startsWith("test_") && name !== "constructor")
.sort();
for (const method of methods) {
try {
await instance[method]();
passed += 1;
} catch (error) {
failures.push(`${Suite.name}::${method}: ${error.message}`);
}
}
}
console.log("");
if (failures.length === 0) {
console.log(`PASS: ${passed} test(s) passed.`);
process.exit(0);
}
console.log(`FAIL: ${passed} passed, ${failures.length} failed.`);
for (const failure of failures) console.log(` - ${failure}`);
process.exit(1);