#include "global.h" #include "test/test.h" #include "battle_main.h" #include "item.h" #include "text.h" #include "constants/abilities.h" #include "constants/items.h" #include "constants/moves.h" TEST("Move names fit on Pokemon Summary Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 72; u32 move = MOVE_NONE; for (i = 1; i < MOVES_COUNT; i++) { PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } TEST("Move names fit on Battle Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 64; u32 move = MOVE_NONE; for (i = 1; i < MOVES_COUNT; i++) { PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } TEST("Move names fit on Contest Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 61; u32 move = MOVE_NONE; for (i = 1; i < MOVES_COUNT; i++) { PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } // All moves explicitly listed here are too big to fit. switch (move) { case MOVE_NATURES_MADNESS: EXPECT_GT(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); break; default: EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); break; } } TEST("Move names fit on TMs & HMs Bag Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 63; u32 move = MOVE_NONE; for (i = 1; i < ITEMS_COUNT; i++) { if (gItemsInfo[i].pocket == POCKET_TM_HM) { PARAMETRIZE_LABEL("%S", gMovesInfo[gItemsInfo[i].secondaryId].name) { move = gItemsInfo[i].secondaryId; } } } EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } TEST("Move names fit on Move Relearner Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 72; u32 move = MOVE_NONE; for (i = 1; i < MOVES_COUNT; i++) { PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } TEST("Item names fit on Bag Screen (list)") { u32 i; const u32 fontId = FONT_NARROWER; const u32 tmHmBerryWidthPx = 71, restWidthPx = 88; u32 item = ITEM_NONE; for (i = 1; i < ITEMS_COUNT; i++) { PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } if (gItemsInfo[item].pocket == POCKET_TM_HM || gItemsInfo[item].pocket == POCKET_BERRIES) EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), tmHmBerryWidthPx); else EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), restWidthPx); } TEST("Item plural names fit on Bag Screen (left box)") { u32 i; // -6 for the question mark in FONT_NORMAL. const u32 fontId = FONT_NARROWER, widthPx = 102 - 6; u32 item = ITEM_NONE; u8 pluralName[ITEM_NAME_PLURAL_LENGTH + 1]; for (i = 1; i < ITEMS_COUNT; i++) { PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } CopyItemNameHandlePlural(item, pluralName, 2); EXPECT_LE(GetStringWidth(fontId, pluralName, 0), widthPx); } TEST("Item plural names fit on PC storage (left box)") { u32 i; // -6 for the question mark in FONT_NORMAL. const u32 fontId = FONT_NARROWER, widthPx = 104 - 6; u32 item = ITEM_NONE; u8 pluralName[ITEM_NAME_PLURAL_LENGTH + 1]; for (i = 1; i < ITEMS_COUNT; i++) { PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } CopyItemNameHandlePlural(item, pluralName, 2); EXPECT_LE(GetStringWidth(fontId, pluralName, 0), widthPx); } TEST("Item names fit on Pokemon Storage System") { u32 i; const u32 fontId = FONT_SMALL_NARROWER, widthPx = 50; u32 item = ITEM_NONE; for (i = 1; i < ITEMS_COUNT; i++) { if (gItemsInfo[i].importance) continue; PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } // All items explicitly listed here are too big to fit. The ones // with a hold effect are listed at the bottom in case you want to // focus on making them fit (they are the most likely to appear on // the storage system UI, along with anything that could be held // in the wild). switch (item) { case ITEM_ENERGY_POWDER: case ITEM_PEWTER_CRUNCHIES: case ITEM_RAGE_CANDY_BAR: case ITEM_LUMIOSE_GALETTE: case ITEM_HEALTH_FEATHER: case ITEM_MUSCLE_FEATHER: case ITEM_RESIST_FEATHER: case ITEM_GENIUS_FEATHER: case ITEM_CLEVER_FEATHER: case ITEM_ABILITY_CAPSULE: case ITEM_DYNAMAX_CANDY: case ITEM_MAX_MUSHROOMS: case ITEM_GOLD_BOTTLE_CAP: case ITEM_PRETTY_FEATHER: case ITEM_STRANGE_SOUVENIR: case ITEM_FOSSILIZED_BIRD: case ITEM_FOSSILIZED_FISH: case ITEM_FOSSILIZED_DRAKE: case ITEM_FOSSILIZED_DINO: case ITEM_SURPRISE_MULCH: case ITEM_YELLOW_APRICORN: case ITEM_GREEN_APRICORN: case ITEM_WHITE_APRICORN: case ITEM_BLACK_APRICORN: case ITEM_THUNDER_STONE: case ITEM_GALARICA_WREATH: case ITEM_STRAWBERRY_SWEET: case ITEM_AUSPICIOUS_ARMOR: case ITEM_BIG_BAMBOO_SHOOT: case ITEM_GIMMIGHOUL_COIN: case ITEM_LEADERS_CREST: case ITEM_MALICIOUS_ARMOR: case ITEM_TINY_BAMBOO_SHOOT: case ITEM_BUG_TERA_SHARD: case ITEM_DARK_TERA_SHARD: case ITEM_DRAGON_TERA_SHARD: case ITEM_ELECTRIC_TERA_SHARD: case ITEM_FAIRY_TERA_SHARD: case ITEM_FIGHTING_TERA_SHARD: case ITEM_FIRE_TERA_SHARD: case ITEM_FLYING_TERA_SHARD: case ITEM_GHOST_TERA_SHARD: case ITEM_GRASS_TERA_SHARD: case ITEM_GROUND_TERA_SHARD: case ITEM_ICE_TERA_SHARD: case ITEM_NORMAL_TERA_SHARD: case ITEM_POISON_TERA_SHARD: case ITEM_PSYCHIC_TERA_SHARD: case ITEM_ROCK_TERA_SHARD: case ITEM_STEEL_TERA_SHARD: case ITEM_WATER_TERA_SHARD: case ITEM_BLACK_AUGURITE: case ITEM_UNREMARKABLE_TEACUP: case ITEM_MASTERPIECE_TEACUP: case ITEM_FRESH_START_MOCHI: case ITEM_STELLAR_TERA_SHARD: case ITEM_JUBILIFE_MUFFIN: case ITEM_SUPERB_REMEDY: case ITEM_AUX_POWERGUARD: case ITEM_CHOICE_DUMPLING: case ITEM_TWICE_SPICED_RADISH: // Items with hold effects: case ITEM_ELECTRIC_MEMORY: case ITEM_FIGHTING_MEMORY: case ITEM_GROUND_MEMORY: case ITEM_PSYCHIC_MEMORY: case ITEM_DRAGON_MEMORY: case ITEM_CHARIZARDITE_X: case ITEM_CHARIZARDITE_Y: case ITEM_ULTRANECROZIUM_Z: case ITEM_DEEP_SEA_SCALE: case ITEM_DEEP_SEA_TOOTH: case ITEM_NEVER_MELT_ICE: case ITEM_WEAKNESS_POLICY: case ITEM_SAFETY_GOGGLES: case ITEM_ADRENALINE_ORB: case ITEM_TERRAIN_EXTENDER: case ITEM_PROTECTIVE_PADS: case ITEM_HEAVY_DUTY_BOOTS: case ITEM_UTILITY_UMBRELLA: case ITEM_MARANGA_BERRY: case ITEM_PUNCHING_GLOVE: case ITEM_BOOSTER_ENERGY: case ITEM_ADAMANT_CRYSTAL: case ITEM_LUSTROUS_GLOBE: case ITEM_CORNERSTONE_MASK: case ITEM_WELLSPRING_MASK: case ITEM_HEARTHFLAME_MASK: EXPECT_GT(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); break; default: EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); break; } } TEST("Item names fit on Pokemon Summary Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 72; u32 item = ITEM_NONE; for (i = 1; i < ITEMS_COUNT; i++) { if (gItemsInfo[i].importance) continue; PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } // All items explicitly listed here are too big to fit. switch (item) { case ITEM_UNREMARKABLE_TEACUP: EXPECT_GT(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); break; default: EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); break; } } TEST("Item names fit on Shop Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 84; u32 item = ITEM_NONE; for (i = 1; i < ITEMS_COUNT; i++) { PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); } TEST("Species names fit on Battle Screen HP box") { u32 i, genderWidthPx; const u32 fontId = FONT_SMALL_NARROWER, widthPx = 54; u32 species = SPECIES_NONE; genderWidthPx = GetStringWidth(fontId, COMPOUND_STRING("♂"), 0); for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } if (gSpeciesInfo[i].genderRatio != MON_GENDERLESS) EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0) - genderWidthPx, widthPx); else EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Party Screen") { u32 i; const u32 fontId = FONT_SMALL_NARROWER, widthPx = 50; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Pokemon Summary Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 63; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Pokedex Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 50; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Pokedex Screen - Cries") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 60; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Pokemon Storage System") { u32 i; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(FONT_NARROWER, gSpeciesInfo[species].speciesName, 0), 66); EXPECT_LE(GetStringWidth(FONT_SHORT_NARROW, gSpeciesInfo[species].speciesName, 0), 60); } TEST("Species names fit on Contest Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 50; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Contest Screen - Rankings") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 49; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Battle Dome Screen") { u32 i; const u32 fontId = FONT_SHORT_NARROW, widthPx = 60; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Hall of Fame") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 66; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on Naming Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 64; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on PokeNav Condition Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 57; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on PokeNav Condition Search Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 60; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on PokeNav Ribbon Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 60; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Species names fit on PokeNav Ribbon List Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 60; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { if (IsSpeciesEnabled(i)) { PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } } } EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } TEST("Ability names fit on Pokemon Summary Screen") { u32 i; const u32 fontId = FONT_NORMAL, widthPx = 144; u32 ability = ABILITY_NONE; for (i = 1; i < ABILITIES_COUNT; i++) { PARAMETRIZE_LABEL("%S", gAbilitiesInfo[i].name) { ability = i; } } EXPECT_LE(GetStringWidth(fontId, gAbilitiesInfo[ability].name, 0), widthPx); } TEST("Ability names fit on Ability Pop-Up") { u32 i; const u32 fontId = FONT_SMALL_NARROWER, widthPx = 76; u32 ability = ABILITY_NONE; for (i = 1; i < ABILITIES_COUNT; i++) { PARAMETRIZE_LABEL("%S", gAbilitiesInfo[i].name) { ability = i; } } EXPECT_LE(GetStringWidth(fontId, gAbilitiesInfo[ability].name, 0), widthPx); } TEST("Type names fit on Battle Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 39; u32 type = TYPE_NORMAL; for (i = 0; i < NUMBER_OF_MON_TYPES; i++) { PARAMETRIZE_LABEL("%S", gTypesInfo[i].name) { type = i; } } EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx); } TEST("Type names fit on Pokedex Search Screen") { u32 i; const u32 fontId = FONT_NARROWER, widthPx = 38; u32 type = TYPE_NORMAL; for (i = 0; i < NUMBER_OF_MON_TYPES; i++) { PARAMETRIZE_LABEL("%S", gTypesInfo[i].name) { type = i; } } EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx); }