diff --git a/tests/megatest.log b/tests/megatest.log index c34d455a..8beb354d 100644 --- a/tests/megatest.log +++ b/tests/megatest.log @@ -3,352 +3,686 @@ platform win32 -- Python 3.10.0, pytest-7.2.2, pluggy-1.0.0 -- C:\Users\Jared\Do cachedir: .pytest_cache rootdir: C:\Users\Jared\Documents\GitHub\bsp_tool plugins: cov-4.0.0 -collecting ... collected 344 items +collecting ... collected 678 items tests/test_BspLump.py::TestRawBspLump::test_its_raw[Team Fortress 2/mp_lobby.bsp] PASSED [ 0%] tests/test_BspLump.py::TestRawBspLump::test_its_raw[Team Fortress 2/test2.bsp] PASSED [ 0%] tests/test_BspLump.py::TestRawBspLump::test_its_raw[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 0%] -tests/test_BspLump.py::TestRawBspLump::test_its_raw[Team Fortress 2/test_physcollide.bsp] PASSED [ 1%] -tests/test_BspLump.py::TestRawBspLump::test_its_raw[Quake 3 Arena/mp_lobby.bsp] PASSED [ 1%] -tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/mp_lobby.bsp] PASSED [ 1%] -tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/test2.bsp] PASSED [ 2%] -tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 2%] -tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/test_physcollide.bsp] PASSED [ 2%] -tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Quake 3 Arena/mp_lobby.bsp] PASSED [ 2%] -tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/mp_lobby.bsp] PASSED [ 3%] -tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/test2.bsp] PASSED [ 3%] -tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 3%] -tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/test_physcollide.bsp] PASSED [ 4%] -tests/test_BspLump.py::TestRawBspLump::test_indexing[Quake 3 Arena/mp_lobby.bsp] PASSED [ 4%] -tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/mp_lobby.bsp] PASSED [ 4%] -tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/test2.bsp] PASSED [ 4%] -tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 5%] -tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/test_physcollide.bsp] PASSED [ 5%] -tests/test_BspLump.py::TestBspLump::test_list_conversion[Quake 3 Arena/mp_lobby.bsp] PASSED [ 5%] -tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/mp_lobby.bsp] PASSED [ 6%] -tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/test2.bsp] PASSED [ 6%] -tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 6%] -tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/test_physcollide.bsp] PASSED [ 6%] -tests/test_BspLump.py::TestBspLump::test_indexing[Quake 3 Arena/mp_lobby.bsp] PASSED [ 7%] -tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/mp_lobby.bsp] PASSED [ 7%] -tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/test2.bsp] PASSED [ 7%] -tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 8%] -tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/test_physcollide.bsp] PASSED [ 8%] -tests/test_BspLump.py::TestBspLump::test_del[Quake 3 Arena/mp_lobby.bsp] PASSED [ 8%] -tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/mp_lobby.bsp] PASSED [ 9%] -tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/test2.bsp] PASSED [ 9%] -tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 9%] -tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/test_physcollide.bsp] PASSED [ 9%] -tests/test_BspLump.py::TestBspLump::test_setitem[Quake 3 Arena/mp_lobby.bsp] PASSED [ 10%] -tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/mp_lobby.bsp] PASSED [ 10%] -tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/test2.bsp] PASSED [ 10%] -tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 11%] -tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/test_physcollide.bsp] PASSED [ 11%] -tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Quake 3 Arena/mp_lobby.bsp] PASSED [ 11%] -tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/mp_lobby.bsp] PASSED [ 11%] -tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/test2.bsp] PASSED [ 12%] -tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 12%] -tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/test_physcollide.bsp] PASSED [ 12%] -tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Quake 3 Arena/mp_lobby.bsp] PASSED [ 13%] -tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/mp_lobby.bsp] PASSED [ 13%] -tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/test2.bsp] PASSED [ 13%] -tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 13%] -tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/test_physcollide.bsp] PASSED [ 14%] -tests/test_BspLump.py::TestBasicBspLump::test_indexing[Quake 3 Arena/mp_lobby.bsp] PASSED [ 14%] -tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/test.d3dbsp] PASSED [ 14%] -tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 15%] -tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 15%] -tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 15%] -tests/test_D3DBsp.py::test_entites_loaded[Call of Duty 4/test.d3dbsp] PASSED [ 15%] -tests/test_D3DBsp.py::test_entites_loaded[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 16%] -tests/test_D3DBsp.py::test_entites_loaded[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 16%] -tests/test_D3DBsp.py::test_entites_loaded[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 16%] -tests/test_Entities.py::test_generic[one_entity] PASSED [ 17%] -tests/test_Entities.py::test_generic[two_entities] PASSED [ 17%] -tests/test_Entities.py::test_generic[one_newline_in_value] PASSED [ 17%] -tests/test_Entities.py::test_generic[two_newlines_in_value] PASSED [ 18%] -tests/test_Entities.py::test_generic[curly_brace_in_value] PASSED [ 18%] -tests/test_Entities.py::test_ignore_comment PASSED [ 18%] -tests/test_Entities.py::test_curly_whitespace PASSED [ 18%] -tests/test_Entities.py::test_null_terminated PASSED [ 19%] -tests/test_Entities.py::test_null_terminated_after_newline PASSED [ 19%] -tests/test_Entities.py::test_null_terminated_and_trailing_whitespace PASSED [ 19%] -tests/test_IdTechBsp.py::test_no_errors[Quake 2/mp_lobby.bsp] PASSED [ 20%] -tests/test_IdTechBsp.py::test_no_errors[Quake 3 Arena/mp_lobby.bsp] PASSED [ 20%] -tests/test_IdTechBsp.py::test_entities_loaded[Quake 2/mp_lobby.bsp] PASSED [ 20%] -tests/test_IdTechBsp.py::test_entities_loaded[Quake 3 Arena/mp_lobby.bsp] PASSED [ 20%] -tests/test_IdTechBsp.py::test_get_signature[Quake 2/mp_lobby.bsp] XFAIL (ADVERTISEMENTS header) [ 21%] -tests/test_IdTechBsp.py::test_get_signature[Quake 3 Arena/mp_lobby.bsp] XFAIL (ADVERTISEMENTS header) [ 21%] -tests/test_QuakeBsp.py::test_no_errors[Quake/mp_lobby.bsp] PASSED [ 21%] -tests/test_QuakeBsp.py::test_entities_loaded[Quake/mp_lobby.bsp] PASSED [ 22%] -tests/test_ReMakeQuakeBsp.py::test_no_errors[ReMakeQuake/mp_lobby.bsp] PASSED [ 22%] -tests/test_ReMakeQuakeBsp.py::test_entities_loaded[ReMakeQuake/mp_lobby.bsp] PASSED [ 22%] -tests/test_RespawnBsp.py::test_no_errors[Titanfall 2/mp_crossfire.bsp] PASSED [ 22%] -tests/test_RespawnBsp.py::test_entities_loaded[Titanfall 2/mp_crossfire.bsp] PASSED [ 23%] -tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/mp_lobby.bsp] PASSED [ 23%] -tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/test2.bsp] PASSED [ 23%] -tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 24%] -tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/test_physcollide.bsp] PASSED [ 24%] -tests/test_ValveBsp.py::test_no_errors[Momentum Mod/mp_lobby.bsp] PASSED [ 24%] -tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/mp_lobby.bsp] PASSED [ 25%] -tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/test2.bsp] PASSED [ 25%] -tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 25%] -tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/test_physcollide.bsp] PASSED [ 25%] -tests/test_ValveBsp.py::test_entities_loaded[Momentum Mod/mp_lobby.bsp] PASSED [ 26%] -tests/test_load_bsp.py::test_load_bsp[./-tests/maps-map_dirs0] PASSED [ 26%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-gesource-map_dirs1] PASSED [ 26%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-half-life 2 riot act-map_dirs2] PASSED [ 27%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-TFTS-map_dirs3] PASSED [ 27%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-episodeone-map_dirs4] PASSED [ 27%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-RunThinkShootLiveVille2-map_dirs5] PASSED [ 27%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-cromulentville2-map_dirs6] PASSED [ 28%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-companionpiece2-map_dirs7] PASSED [ 28%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-eyecandy-map_dirs8] PASSED [ 28%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-backontrack-map_dirs9] PASSED [ 29%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tworooms-map_dirs10] PASSED [ 29%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-fusionville2-map_dirs11] PASSED [ 29%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tunetwo-map_dirs12] PASSED [ 29%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-lvl2-map_dirs13] PASSED [ 30%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-thewrapuptwo-map_dirs14] PASSED [ 30%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-halloweenhorror4-map_dirs15] PASSED [ 30%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-halflifeeternal-map_dirs16] PASSED [ 31%] -tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-thelayout-map_dirs17] PASSED [ 31%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Cry of Fear-map_dirs18] PASSED [ 31%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/cstrike-map_dirs19] PASSED [ 31%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czero-map_dirs20] PASSED [ 32%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czeror-map_dirs21] PASSED [ 32%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dmc-map_dirs22] PASSED [ 32%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dod-map_dirs23] PASSED [ 33%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/gearbox-map_dirs24] PASSED [ 33%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/ns-map_dirs25] PASSED [ 33%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/ricochet-map_dirs26] PASSED [ 34%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/tfc-map_dirs27] PASSED [ 34%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/valve-map_dirs28] PASSED [ 34%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Halfquake Trilogy-map_dirs29] PASSED [ 34%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Sven Co-op-map_dirs30] PASSED [ 35%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm-map_dirs31] PASSED [ 35%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm Reactive Drop-map_dirs32] PASSED [ 35%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Blade Symphony-map_dirs33] PASSED [ 36%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Contagion-map_dirs34] PASSED [ 36%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Counter-Strike Global Offensive-map_dirs35] PASSED [ 36%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-counter-strike source-map_dirs36] PASSED [ 36%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-day of defeat source-map_dirs37] PASSED [ 37%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-dayofinfamy-map_dirs38] PASSED [ 37%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Dino D-Day-map_dirs39] PASSED [ 37%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Double Action-map_dirs40] PASSED [ 38%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-EntropyZero2-map_dirs41] PASSED [ 38%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-EYE Divine Cybermancy Demo-map_dirs42] PASSED [ 38%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Fistful of Frags-map_dirs43] PASSED [ 38%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Fortress Forever-map_dirs44] PASSED [ 39%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-G String-map_dirs45] PASSED [ 39%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-GarrysMod-map_dirs46] PASSED [ 39%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 1 Source Deathmatch-map_dirs47] PASSED [ 40%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/ep2-map_dirs48] PASSED [ 40%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/episodic-map_dirs49] PASSED [ 40%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl1-map_dirs50] PASSED [ 40%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl2-map_dirs51] PASSED [ 41%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/lostcoast-map_dirs52] PASSED [ 41%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2 deathmatch-map_dirs53] PASSED [ 41%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 2 Update-map_dirs54] PASSED [ 42%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 2 VR-map_dirs55] PASSED [ 42%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-insurgency2-map_dirs56] PASSED [ 42%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Jabroni Brawl Episode 3-map_dirs57] FAILED [ 43%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-left 4 dead-map_dirs58] PASSED [ 43%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Left 4 Dead 2-map_dirs59] PASSED [ 43%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-MINERVA-map_dirs60] PASSED [ 43%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Momentum Mod Playtest-map_dirs61] PASSED [ 44%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-NEOTOKYO-map_dirs62] PASSED [ 44%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-nmrih-map_dirs63] PASSED [ 44%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal-map_dirs64] PASSED [ 45%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal 2-map_dirs65] PASSED [ 45%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal Reloaded-map_dirs66] PASSED [ 45%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-SourceFilmmaker-map_dirs67] PASSED [ 45%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Synergy-map_dirs68] PASSED [ 46%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Team Fortress 2-map_dirs69] PASSED [ 46%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Transmissions Element 120-map_dirs70] PASSED [ 46%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Vampire The Masquerade - Bloodlines-map_dirs71] PASSED [ 47%] -tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Zeno Clash Demo-map_dirs72] PASSED [ 47%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkPlaces-map_dirs73] PASSED [ 47%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake-map_dirs74] PASSED [ 47%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake/rerelease-map_dirs75] PASSED [ 48%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Alkaline-map_dirs76] PASSED [ 48%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake/2psb-map_dirs77] PASSED [ 48%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake/rerelease/dopa-map_dirs78] PASSED [ 49%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Anachronox-map_dirs79] PASSED [ 49%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Daikatana-map_dirs80] PASSED [ 49%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-DDayNormandy-map_dirs81] FAILED [ 50%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-HereticII-map_dirs82] PASSED [ 50%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Hexen2-map_dirs83] PASSED [ 50%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Nexuiz-map_dirs84] PASSED [ 50%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-RTCW-map_dirs85] PASSED [ 51%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-SiN-map_dirs86] PASSED [ 51%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-SoF-map_dirs87] PASSED [ 51%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-SoF2-map_dirs88] PASSED [ 52%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForce-map_dirs89] PASSED [ 52%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-QuakeII-map_dirs90] PASSED [ 52%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-QuakeIII-map_dirs91] PASSED [ 52%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Dreamcast/QuakeIII-map_dirs92] PASSED [ 53%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-QuakeLive-map_dirs93] PASSED [ 53%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-WolfET-map_dirs94] PASSED [ 53%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-WRATH-map_dirs95] PASSED [ 54%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Xonotic-map_dirs96] PASSED [ 54%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Warsow-map_dirs97] PASSED [ 54%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD1Demo-map_dirs98] PASSED [ 54%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD1-map_dirs99] PASSED [ 55%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD2-map_dirs100] PASSED [ 55%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD4-map_dirs101] PASSED [ 55%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Nightfire-map_dirs102] PASSED [ 56%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Dreamcast/Paranoia-map_dirs103] PASSED [ 56%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-BlackMesa-map_dirs104] PASSED [ 56%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-BloodyGoodTime-map_dirs105] PASSED [ 56%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Contagion-map_dirs106] PASSED [ 57%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSMalvinas-map_dirs107] PASSED [ 57%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/Bocuma747_SurfMaps-map_dirs108] PASSED [ 57%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/OiuSURF_SurfMaps-map_dirs109] PASSED [ 58%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSO2-map_dirs110] PASSED [ 58%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs111] FAILED [ 58%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs112] FAILED [ 59%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-TheHiddenSource-map_dirs113] PASSED [ 59%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-HL2DM/patbytes-map_dirs114] PASSED [ 59%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Infra-map_dirs115] PASSED [ 59%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MeruBasu-map_dirs116] PASSED [ 60%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MomentumMod-map_dirs117] PASSED [ 60%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-SiNEpisodes-map_dirs118] PASSED [ 60%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-TacticalIntervention-map_dirs119] PASSED [ 61%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-TeamFortressQuake-map_dirs120] PASSED [ 61%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-TheShip-map_dirs121] PASSED [ 61%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs122] FAILED [ 61%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Vindictus/Client v1.69 EU-map_dirs123] PASSED [ 62%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Xbox/Half-Life2-map_dirs124] PASSED [ 62%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Titanfall-map_dirs125] PASSED [ 62%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-TitanfallOnline-map_dirs126] PASSED [ 63%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Titanfall2-map_dirs127] PASSED [ 63%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends-map_dirs128] PASSED [ 63%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season2-map_dirs129] PASSED [ 63%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season3-map_dirs130] PASSED [ 64%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season4-map_dirs131] PASSED [ 64%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season5-map_dirs132] PASSED [ 64%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season7-map_dirs133] PASSED [ 65%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season8-map_dirs134] PASSED [ 65%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season9-map_dirs135] PASSED [ 65%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season10-map_dirs136] PASSED [ 65%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season11-map_dirs137] PASSED [ 66%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season12-map_dirs138] PASSED [ 66%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season13-map_dirs139] PASSED [ 66%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season14-map_dirs140] PASSED [ 67%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season15-map_dirs141] PASSED [ 67%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season16-map_dirs142] PASSED [ 67%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season17-map_dirs143] PASSED [ 68%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/switch-map_dirs144] PASSED [ 68%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-FAKK2-map_dirs145] PASSED [ 68%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-Alice-map_dirs146] PASSED [ 68%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/demo-map_dirs147] PASSED [ 69%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/main-map_dirs148] PASSED [ 69%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/mainta-map_dirs149] PASSED [ 69%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/maintt-map_dirs150] PASSED [ 70%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForceIIDemo-map_dirs151] PASSED [ 70%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForceII-map_dirs152] PASSED [ 70%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnight-map_dirs153] PASSED [ 70%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnightII-map_dirs154] PASSED [ 71%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod/PS4-Titanfall2-map_dirs155] PASSED [ 71%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod/PS4-Titanfall2_tech_test-map_dirs156] PASSED [ 71%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Left4Dead-map_dirs157] FAILED [ 72%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Left4Dead2-map_dirs158] PASSED [ 72%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-OrangeBox-map_dirs159] PASSED [ 72%] -tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Portal2-map_dirs160] FAILED [ 72%] -tests/test_lumps.py::TestRemapIndex::test_guess PASSED [ 73%] -tests/test_lumps.py::TestRemapIndex::test_range PASSED [ 73%] -tests/test_lumps.py::TestRemapIndex::test_negative_out_of_range PASSED [ 73%] -tests/test_lumps.py::TestRemapSliceToRange::test_lazy PASSED [ 74%] -tests/test_lumps.py::TestBspLump::test_implicit_change PASSED [ 74%] -tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/test.d3dbsp] XFAIL (not implemented yet) [ 74%] -tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/test_traverses.d3dbsp] XFAIL (not implemented yet) [ 75%] -tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/mp/mp_lobby.d3dbsp] XFAIL (not implemented yet) [ 75%] -tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/mp/mp_test.d3dbsp] XFAIL (not implemented yet) [ 75%] -tests/test_save.py::test_IdTechBsp_quake2[Quake 2/mp_lobby.bsp] XFAIL (not implemented yet) [ 75%] -tests/test_save.py::test_IdTechBsp_quake3[Quake 3 Arena/mp_lobby.bsp] XFAIL (not implemented yet) [ 76%] -tests/test_save.py::test_ReMakeQuakeBsp_remake_quake[ReMakeQuake/mp_lobby.bsp] XFAIL (not implemented yet) [ 76%] -tests/test_save.py::test_RespawnBsp_titanfall2[Titanfall 2/mp_crossfire.bsp] XFAIL [ 76%] -tests/test_save.py::test_QuakeBsp_quake[Quake/mp_lobby.bsp] XFAIL (not implemented yet) [ 77%] -tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/mp_lobby.bsp] XFAIL [ 77%] -tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/test2.bsp] XFAIL [ 77%] -tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/test_displacement_decompile.bsp] XFAIL [ 77%] -tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/test_physcollide.bsp] XFAIL [ 78%] -tests/test_save.py::test_ValveBsp_strata[Momentum Mod/mp_lobby.bsp] XFAIL [ 78%] -tests/branches/test_base.py::TestStruct::test_init PASSED [ 78%] -tests/branches/test_base.py::TestStruct::test_unpack PASSED [ 79%] -tests/branches/test_base.py::TestStruct::test_pack PASSED [ 79%] -tests/branches/test_base.py::TestMappedArray::test_init PASSED [ 79%] -tests/branches/test_base.py::TestMappedArray::test_attr_format_collision PASSED [ 79%] -tests/branches/test_base.py::TestMappedArray::test_as_cpp PASSED [ 80%] -tests/branches/test_base.py::TestBitField::test_init PASSED [ 80%] -tests/branches/test_base.py::TestBitField::test_overflow PASSED [ 80%] -tests/branches/test_base.py::test_dict_subgroup PASSED [ 81%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.qfusion] PASSED [ 81%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.quake] PASSED [ 81%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.quake2] PASSED [ 81%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.quake3] PASSED [ 82%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.remake_quake] PASSED [ 82%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.remake_quake_old] PASSED [ 82%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty1_demo] PASSED [ 83%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty1] PASSED [ 83%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty2] PASSED [ 83%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.modern_warfare] PASSED [ 84%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ion_storm.daikatana] PASSED [ 84%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.gearbox.blue_shift] PASSED [ 84%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.gearbox.nightfire] PASSED [ 84%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.raven.hexen2] PASSED [ 85%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.raven.soldier_of_fortune] PASSED [ 85%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.raven.soldier_of_fortune2] PASSED [ 85%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.fakk2] PASSED [ 86%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.mohaa] PASSED [ 86%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.mohaa_bt] PASSED [ 86%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.mohaa_demo] PASSED [ 86%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.sin] PASSED [ 87%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.star_trek_elite_force2] PASSED [ 87%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.ritual.star_trek_elite_force2_demo] PASSED [ 87%] -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.valve.goldsrc] PASSED [ 88%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.arkane.dark_messiah_mp] PASSED [ 88%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.arkane.dark_messiah_sp] PASSED [ 88%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.nexon.cso2] PASSED [ 88%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.nexon.cso2_2018] PASSED [ 89%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.nexon.vindictus] PASSED [ 89%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.nexon.vindictus69] PASSED [ 89%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.apex_legends] PASSED [ 90%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.apex_legends13] PASSED [ 90%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.titanfall] PASSED [ 90%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.titanfall_x360] PASSED [ 90%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.titanfall2] PASSED [ 91%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.troika.vampire] PASSED [ 91%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.alien_swarm] PASSED [ 91%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.left4dead] PASSED [ 92%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.left4dead2] PASSED [ 92%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.orange_box] PASSED [ 92%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.orange_box_x360] PASSED [ 93%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.sdk_2013] PASSED [ 93%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.sdk_2013_x360] PASSED [ 93%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.source] PASSED [ 93%] -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.source_filmmaker] PASSED [ 94%] -tests/branches/id_software/test_quake.py::TestMethods::test_vertices_of_face[Quake/mp_lobby.bsp] PASSED [ 94%] -tests/branches/id_software/test_quake.py::TestMethods::test_lightmap_of_face[Quake/mp_lobby.bsp] PASSED [ 94%] -tests/branches/id_software/test_quake2.py::test_visibility[Quake 2/mp_lobby.bsp] PASSED [ 95%] -tests/branches/id_software/test_quake3.py::test_face_struct[Quake 3 Arena/mp_lobby.bsp] PASSED [ 95%] -tests/branches/id_software/test_remake_quake.py::TestMethods::test_vertices_of_face[ReMakeQuake/mp_lobby.bsp] PASSED [ 95%] -tests/branches/id_software/test_remake_quake.py::TestMethods::test_lightmap_of_face[ReMakeQuake/mp_lobby.bsp] PASSED [ 95%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/test.d3dbsp] PASSED [ 96%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 96%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 96%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 97%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/test.d3dbsp] PASSED [ 97%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 97%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 97%] -tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 98%] -tests/branches/respawn/test_titanfall2.py::TestAssumptions::test_grid_cells_count[Titanfall 2/mp_crossfire.bsp] PASSED [ 98%] -tests/branches/strata/test_strata.py::test_spec[Momentum Mod/mp_lobby.bsp] PASSED [ 98%] -tests/branches/valve/test_orange_box.py::TestMethods::test_vertices_of_displacement[Team Fortress 2/test2.bsp] PASSED [ 99%] -tests/branches/valve/test_orange_box.py::TestMethods::test_vertices_of_displacement[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 99%] -tests/extensions/test_compiler_signature.py::test_MRVNRadiant[Titanfall 2/mp_crossfire.bsp] PASSED [ 99%] -tests/extensions/test_compiler_signature.py::test_identify[Titanfall 2/mp_crossfire.bsp] PASSED [100%] +tests/test_BspLump.py::TestRawBspLump::test_its_raw[Team Fortress 2/test_physcollide.bsp] PASSED [ 0%] +tests/test_BspLump.py::TestRawBspLump::test_its_raw[Quake 3 Arena/mp_lobby.bsp] PASSED [ 0%] +tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/mp_lobby.bsp] PASSED [ 0%] +tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/test2.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Team Fortress 2/test_physcollide.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_list_conversion[Quake 3 Arena/mp_lobby.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/mp_lobby.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/test2.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 1%] +tests/test_BspLump.py::TestRawBspLump::test_indexing[Team Fortress 2/test_physcollide.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestRawBspLump::test_indexing[Quake 3 Arena/mp_lobby.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/mp_lobby.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/test2.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestBspLump::test_list_conversion[Team Fortress 2/test_physcollide.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestBspLump::test_list_conversion[Quake 3 Arena/mp_lobby.bsp] PASSED [ 2%] +tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/mp_lobby.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/test2.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_indexing[Team Fortress 2/test_physcollide.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_indexing[Quake 3 Arena/mp_lobby.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/mp_lobby.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/test2.bsp] PASSED [ 3%] +tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 4%] +tests/test_BspLump.py::TestBspLump::test_del[Team Fortress 2/test_physcollide.bsp] PASSED [ 4%] +tests/test_BspLump.py::TestBspLump::test_del[Quake 3 Arena/mp_lobby.bsp] PASSED [ 4%] +tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/mp_lobby.bsp] PASSED [ 4%] +tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/test2.bsp] PASSED [ 4%] +tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 4%] +tests/test_BspLump.py::TestBspLump::test_setitem[Team Fortress 2/test_physcollide.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBspLump::test_setitem[Quake 3 Arena/mp_lobby.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/mp_lobby.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/test2.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Team Fortress 2/test_physcollide.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBasicBspLump::test_its_basic[Quake 3 Arena/mp_lobby.bsp] PASSED [ 5%] +tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/mp_lobby.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/test2.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Team Fortress 2/test_physcollide.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_list_conversion[Quake 3 Arena/mp_lobby.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/mp_lobby.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/test2.bsp] PASSED [ 6%] +tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 7%] +tests/test_BspLump.py::TestBasicBspLump::test_indexing[Team Fortress 2/test_physcollide.bsp] PASSED [ 7%] +tests/test_BspLump.py::TestBasicBspLump::test_indexing[Quake 3 Arena/mp_lobby.bsp] PASSED [ 7%] +tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/test.d3dbsp] PASSED [ 7%] +tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 7%] +tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 7%] +tests/test_D3DBsp.py::test_no_errors[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 7%] +tests/test_D3DBsp.py::test_entities_loaded[Call of Duty 4/test.d3dbsp] PASSED [ 8%] +tests/test_D3DBsp.py::test_entities_loaded[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 8%] +tests/test_D3DBsp.py::test_entities_loaded[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 8%] +tests/test_D3DBsp.py::test_entities_loaded[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 8%] +tests/test_Entities.py::test_generic[one_entity] PASSED [ 8%] +tests/test_Entities.py::test_generic[two_entities] PASSED [ 8%] +tests/test_Entities.py::test_generic[one_newline_in_value] PASSED [ 8%] +tests/test_Entities.py::test_generic[two_newlines_in_value] PASSED [ 9%] +tests/test_Entities.py::test_generic[curly_brace_in_value] PASSED [ 9%] +tests/test_Entities.py::test_ignore_comment PASSED [ 9%] +tests/test_Entities.py::test_curly_whitespace PASSED [ 9%] +tests/test_Entities.py::test_null_terminated PASSED [ 9%] +tests/test_Entities.py::test_null_terminated_after_newline PASSED [ 9%] +tests/test_Entities.py::test_null_terminated_and_trailing_whitespace PASSED [ 10%] +tests/test_IdTechBsp.py::test_no_errors[Quake 2/mp_lobby.bsp] PASSED [ 10%] +tests/test_IdTechBsp.py::test_no_errors[Quake 3 Arena/mp_lobby.bsp] PASSED [ 10%] +tests/test_IdTechBsp.py::test_entities_loaded[Quake 2/mp_lobby.bsp] PASSED [ 10%] +tests/test_IdTechBsp.py::test_entities_loaded[Quake 3 Arena/mp_lobby.bsp] PASSED [ 10%] +tests/test_IdTechBsp.py::test_get_signature[Quake 2/mp_lobby.bsp] XFAIL (ADVERTISEMENTS header) [ 10%] +tests/test_IdTechBsp.py::test_get_signature[Quake 3 Arena/mp_lobby.bsp] XFAIL (ADVERTISEMENTS header) [ 10%] +tests/test_QuakeBsp.py::test_no_errors[Quake/mp_lobby.bsp] PASSED [ 11%] +tests/test_QuakeBsp.py::test_entities_loaded[Quake/mp_lobby.bsp] PASSED [ 11%] +tests/test_ReMakeQuakeBsp.py::test_no_errors[ReMakeQuake/mp_lobby.bsp] PASSED [ 11%] +tests/test_ReMakeQuakeBsp.py::test_entities_loaded[ReMakeQuake/mp_lobby.bsp] PASSED [ 11%] +tests/test_RespawnBsp.py::test_no_errors[Titanfall 2/mp_crossfire.bsp] PASSED [ 11%] +tests/test_RespawnBsp.py::test_entities_loaded[Titanfall 2/mp_crossfire.bsp] PASSED [ 11%] +tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/mp_lobby.bsp] PASSED [ 11%] +tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/test2.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_no_errors[Team Fortress 2/test_physcollide.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_no_errors[Momentum Mod/mp_lobby.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/mp_lobby.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/test2.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 12%] +tests/test_ValveBsp.py::test_entities_loaded[Team Fortress 2/test_physcollide.bsp] PASSED [ 13%] +tests/test_ValveBsp.py::test_entities_loaded[Momentum Mod/mp_lobby.bsp] PASSED [ 13%] +tests/test_load_bsp.py::test_load_bsp[./-tests/maps-map_dirs0] PASSED [ 13%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-gesource-map_dirs1] PASSED [ 13%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-half-life 2 riot act-map_dirs2] PASSED [ 13%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-TFTS-map_dirs3] PASSED [ 13%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-episodeone-map_dirs4] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-RunThinkShootLiveVille2-map_dirs5] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-cromulentville2-map_dirs6] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-companionpiece2-map_dirs7] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-eyecandy-map_dirs8] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-backontrack-map_dirs9] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tworooms-map_dirs10] PASSED [ 14%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-fusionville2-map_dirs11] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-tunetwo-map_dirs12] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-lvl2-map_dirs13] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-thewrapuptwo-map_dirs14] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-halloweenhorror4-map_dirs15] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-halflifeeternal-map_dirs16] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[C:/Program Files (x86)/Steam/steamapps/sourcemods-thelayout-map_dirs17] PASSED [ 15%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Cry of Fear-map_dirs18] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/cstrike-map_dirs19] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czero-map_dirs20] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/czeror-map_dirs21] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dmc-map_dirs22] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/dod-map_dirs23] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/gearbox-map_dirs24] PASSED [ 16%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/ns-map_dirs25] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/ricochet-map_dirs26] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/tfc-map_dirs27] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life/valve-map_dirs28] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Halfquake Trilogy-map_dirs29] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Sven Co-op-map_dirs30] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm-map_dirs31] PASSED [ 17%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Alien Swarm Reactive Drop-map_dirs32] PASSED [ 18%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Blade Symphony-map_dirs33] PASSED [ 18%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Contagion-map_dirs34] PASSED [ 18%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Counter-Strike Global Offensive-map_dirs35] PASSED [ 18%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-counter-strike source-map_dirs36] PASSED [ 18%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-day of defeat source-map_dirs37] PASSED [ 18%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-dayofinfamy-map_dirs38] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Dino D-Day-map_dirs39] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Double Action-map_dirs40] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-EntropyZero2-map_dirs41] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-EYE Divine Cybermancy Demo-map_dirs42] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Fistful of Frags-map_dirs43] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Fortress Forever-map_dirs44] PASSED [ 19%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-G String-map_dirs45] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-GarrysMod-map_dirs46] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 1 Source Deathmatch-map_dirs47] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/ep2-map_dirs48] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/episodic-map_dirs49] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl1-map_dirs50] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/hl2-map_dirs51] PASSED [ 20%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2/lostcoast-map_dirs52] PASSED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-half-life 2 deathmatch-map_dirs53] PASSED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 2 Update-map_dirs54] PASSED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Half-Life 2 VR-map_dirs55] PASSED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-insurgency2-map_dirs56] PASSED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Jabroni Brawl Episode 3-map_dirs57] FAILED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-left 4 dead-map_dirs58] PASSED [ 21%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Left 4 Dead 2-map_dirs59] PASSED [ 22%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-MINERVA-map_dirs60] PASSED [ 22%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Momentum Mod Playtest-map_dirs61] PASSED [ 22%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-NEOTOKYO-map_dirs62] PASSED [ 22%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-nmrih-map_dirs63] PASSED [ 22%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal-map_dirs64] PASSED [ 22%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal 2-map_dirs65] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Portal Reloaded-map_dirs66] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-SourceFilmmaker-map_dirs67] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Synergy-map_dirs68] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Team Fortress 2-map_dirs69] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Transmissions Element 120-map_dirs70] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Vampire The Masquerade - Bloodlines-map_dirs71] PASSED [ 23%] +tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Zeno Clash Demo-map_dirs72] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkPlaces-map_dirs73] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake-map_dirs74] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake/rerelease-map_dirs75] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake64-map_dirs76] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Alkaline-map_dirs77] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake/2psb-map_dirs78] PASSED [ 24%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Quake/rerelease/dopa-map_dirs79] PASSED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Anachronox-map_dirs80] PASSED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Daikatana-map_dirs81] FAILED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-DDayNormandy-map_dirs82] FAILED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-HereticII-map_dirs83] PASSED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Hexen2-map_dirs84] PASSED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Nexuiz-map_dirs85] PASSED [ 25%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-RTCW-map_dirs86] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-SiN-map_dirs87] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-SoF-map_dirs88] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-SoF2-map_dirs89] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForce-map_dirs90] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-QuakeII-map_dirs91] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-QuakeIII-map_dirs92] PASSED [ 26%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Dreamcast/QuakeIII-map_dirs93] PASSED [ 27%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-QuakeLive-map_dirs94] PASSED [ 27%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-WolfET-map_dirs95] PASSED [ 27%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-WRATH-map_dirs96] PASSED [ 27%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Xonotic-map_dirs97] PASSED [ 27%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Warfork-map_dirs98] PASSED [ 27%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Warsow-map_dirs99] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD1Demo-map_dirs100] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD1-map_dirs101] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD2-map_dirs102] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CoD4-map_dirs103] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Nightfire-map_dirs104] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Dreamcast/Paranoia-map_dirs105] PASSED [ 28%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-BlackMesa-map_dirs106] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-BloodyGoodTime-map_dirs107] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Contagion-map_dirs108] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSMalvinas-map_dirs109] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/Bocuma747_SurfMaps-map_dirs110] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/OiuSURF_SurfMaps-map_dirs111] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSO2-map_dirs112] PASSED [ 29%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs113] FAILED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs114] FAILED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-TheHiddenSource-map_dirs115] PASSED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-HL2DM/patbytes-map_dirs116] PASSED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Infra-map_dirs117] PASSED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MeruBasu-map_dirs118] PASSED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MomentumMod-map_dirs119] PASSED [ 30%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-SiNEpisodes-map_dirs120] PASSED [ 31%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-TacticalIntervention-map_dirs121] PASSED [ 31%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-TeamFortressQuake-map_dirs122] PASSED [ 31%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-TheShip-map_dirs123] PASSED [ 31%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs124] FAILED [ 31%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Vindictus/Client v1.69 EU-map_dirs125] PASSED [ 31%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Xbox/Half-Life2-map_dirs126] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Titanfall-map_dirs127] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-TitanfallOnline-map_dirs128] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Titanfall2-map_dirs129] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends-map_dirs130] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season2-map_dirs131] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season3-map_dirs132] PASSED [ 32%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season4-map_dirs133] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season5-map_dirs134] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season7-map_dirs135] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season8-map_dirs136] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season9-map_dirs137] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season10-map_dirs138] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season11-map_dirs139] PASSED [ 33%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season12-map_dirs140] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season13-map_dirs141] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season14-map_dirs142] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season15-map_dirs143] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season16-map_dirs144] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/season17-map_dirs145] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-ApexLegends/switch-map_dirs146] PASSED [ 34%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-FAKK2-map_dirs147] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-Alice-map_dirs148] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/demo-map_dirs149] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/main-map_dirs150] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/mainta-map_dirs151] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MoHAA/maintt-map_dirs152] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForceIIDemo-map_dirs153] PASSED [ 35%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarTrekEliteForceII-map_dirs154] PASSED [ 36%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnight-map_dirs155] PASSED [ 36%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-StarWarsJediKnightII-map_dirs156] PASSED [ 36%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod/PS4-Titanfall2-map_dirs157] PASSED [ 36%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod/PS4-Titanfall2_tech_test-map_dirs158] PASSED [ 36%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Left4Dead-map_dirs159] FAILED [ 36%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Left4Dead2-map_dirs160] PASSED [ 37%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-OrangeBox-map_dirs161] PASSED [ 37%] +tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Portal2-map_dirs162] FAILED [ 37%] +tests/test_lumps.py::TestRemapIndex::test_guess PASSED [ 37%] +tests/test_lumps.py::TestRemapIndex::test_range PASSED [ 37%] +tests/test_lumps.py::TestRemapIndex::test_negative_out_of_range PASSED [ 37%] +tests/test_lumps.py::TestRemapSliceToRange::test_lazy PASSED [ 37%] +tests/test_lumps.py::TestBspLump::test_implicit_change PASSED [ 38%] +tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/test.d3dbsp] XFAIL (not implemented yet) [ 38%] +tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/test_traverses.d3dbsp] XFAIL (not implemented yet) [ 38%] +tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/mp/mp_lobby.d3dbsp] XFAIL (not implemented yet) [ 38%] +tests/test_save.py::test_D3DBsp_modern_warfare[Call of Duty 4/mp/mp_test.d3dbsp] XFAIL (not implemented yet) [ 38%] +tests/test_save.py::test_IdTechBsp_quake2[Quake 2/mp_lobby.bsp] XFAIL (not implemented yet) [ 38%] +tests/test_save.py::test_IdTechBsp_quake3[Quake 3 Arena/mp_lobby.bsp] XFAIL (not implemented yet) [ 38%] +tests/test_save.py::test_ReMakeQuakeBsp_remake_quake[ReMakeQuake/mp_lobby.bsp] XFAIL (not implemented yet) [ 39%] +tests/test_save.py::test_RespawnBsp_titanfall2[Titanfall 2/mp_crossfire.bsp] XFAIL [ 39%] +tests/test_save.py::test_QuakeBsp_quake[Quake/mp_lobby.bsp] XFAIL (not implemented yet) [ 39%] +tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/mp_lobby.bsp] XFAIL [ 39%] +tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/test2.bsp] XFAIL [ 39%] +tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/test_displacement_decompile.bsp] XFAIL [ 39%] +tests/test_save.py::test_ValveBsp_orange_box[Team Fortress 2/test_physcollide.bsp] XFAIL [ 39%] +tests/test_save.py::test_ValveBsp_strata[Momentum Mod/mp_lobby.bsp] XFAIL [ 40%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.ClipNode] PASSED [ 40%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.Face] PASSED [ 40%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.Leaf] PASSED [ 40%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.MipTexture] PASSED [ 40%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.Model] PASSED [ 40%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.Node] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.Plane] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake.TextureInfo] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[gearbox.nightfire.Leaf] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[gearbox.nightfire.Model] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[gearbox.nightfire.Node] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[gearbox.nightfire.TextureInfo] PASSED [ 41%] +tests/branches/test_LumpClasses.py::test_Struct[raven.hexen2.Model] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[valve.goldsrc.ClipNode] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[valve.goldsrc.Model] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake64.MipTexture] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.mohaa_demo.Leaf] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.mohaa_demo.Texture] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.mohaa_demo.Unknown14] PASSED [ 42%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.remake_quake_old.ClipNode] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.remake_quake_old.Face] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.remake_quake_old.Leaf] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.remake_quake_old.Node] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.remake_quake.Leaf] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.remake_quake.Node] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.fakk2.Face] PASSED [ 43%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.fakk2.Texture] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.star_trek_elite_force2_demo.Face] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[ritual.star_trek_elite_force2_demo.Vertex] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.qfusion.Face] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.qfusion.GridLight] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.qfusion.Vertex] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake2.Leaf] PASSED [ 44%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake2.Model] PASSED [ 45%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake2.Node] PASSED [ 45%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake2.TextureInfo] PASSED [ 45%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Brush] PASSED [ 45%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.BrushSide] PASSED [ 45%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Effect] PASSED [ 45%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Face] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.GridLight] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Leaf] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Model] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Node] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Plane] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Texture] PASSED [ 46%] +tests/branches/test_LumpClasses.py::test_Struct[id_software.quake3.Vertex] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.AxisAlignedBoundingBox] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.BrushSide] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Cell] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.CullGroup] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Leaf] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Light] PASSED [ 47%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Model] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Node] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Occluder] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.PatchCollision] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Plane] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Portal] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty1_demo.Vertex] PASSED [ 48%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty2.CollisionEdge] PASSED [ 49%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty2.CollisionTriangle] PASSED [ 49%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty2.Model] PASSED [ 49%] +tests/branches/test_LumpClasses.py::test_Struct[infinity_ward.call_of_duty2.Vertex] PASSED [ 49%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Bounds_x360] PASSED [ 49%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Brush_x360] PASSED [ 49%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.CellAABBNode_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Cell_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Cubemap_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.GeoSet_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Grid_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.LevelInfo_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.LightProbeRef_x360] PASSED [ 50%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.LightProbe_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.MeshBounds_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Mesh_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Model_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Node_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.ObjRefBounds_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.Plane_x360] PASSED [ 51%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.PortalIndexSet_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.ShadowMeshAlphaVertex_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.ShadowMesh_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.StaticPropv12_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.TextureData_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.TextureVector_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.TricollHeader_x360] PASSED [ 52%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.TricollNode_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.VertexBlinnPhong_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.VertexLitBump_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.VertexLitFlat_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.VertexUnlitTS_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.VertexUnlit_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall_x360.WorldLight_x360] PASSED [ 53%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.BrushSide_x360] PASSED [ 54%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Brush_x360] PASSED [ 54%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Cubemap_x360] PASSED [ 54%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.DisplacementVertex_x360] PASSED [ 54%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Face_x360] PASSED [ 54%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Leaf_x360] PASSED [ 54%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Model_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Node_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Overlay_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.Plane_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.StaticPropv10_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.StaticPropv4_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.StaticPropv5_x360] PASSED [ 55%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.StaticPropv6_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.TextureData_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.TextureInfo_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.WaterOverlay_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box_x360.WorldLight_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.sdk_2013_x360.StaticPropv10_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.sdk_2013_x360.StaticPropv11_x360] PASSED [ 56%] +tests/branches/test_LumpClasses.py::test_Struct[valve.sdk_2013_x360.StaticPropv8_x360] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[valve.sdk_2013_x360.StaticPropv9_x360] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.BVHNode] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.CellAABBNode] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.LevelInfo] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.MaterialSort] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.Mesh] PASSED [ 57%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.Model] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.ShadowMesh] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.TextureData] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.VertexBlinnPhong] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.VertexLitBump] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.VertexLitFlat] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.VertexUnlit] PASSED [ 58%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends.VertexUnlitTS] PASSED [ 59%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.apex_legends13.LightProbe] PASSED [ 59%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Bounds] PASSED [ 59%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Brush] PASSED [ 59%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Cell] PASSED [ 59%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.CellAABBNode] PASSED [ 59%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Cubemap] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.GeoSet] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Grid] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.LevelInfo] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.LightProbe] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.LightProbeRef] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Mesh] PASSED [ 60%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.MeshBounds] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Model] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Node] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.ObjRefBounds] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.Plane] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.PortalIndexSet] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.ShadowMesh] PASSED [ 61%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.ShadowMeshAlphaVertex] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.StaticPropv12] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.TextureData] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.TextureVector] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.TricollHeader] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.TricollNode] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.VertexBlinnPhong] PASSED [ 62%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.VertexLitBump] PASSED [ 63%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.VertexLitFlat] PASSED [ 63%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.VertexUnlit] PASSED [ 63%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.VertexUnlitTS] PASSED [ 63%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall.WorldLight] PASSED [ 63%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.GeoSet] PASSED [ 63%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.LightProbeRef] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.LightmapPage] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.ShadowEnvironment] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.StaticPropv13] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.WorldLightv2] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[respawn.titanfall2.WorldLightv3] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[arkane.dark_messiah_sp.Model] PASSED [ 64%] +tests/branches/test_LumpClasses.py::test_Struct[arkane.dark_messiah_sp.TextureInfo] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[strata.strata.DisplacementInfo] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[strata.strata.Face] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[strata.strata.Leaf] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[strata.strata.Node] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[strata.strata.Overlay] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[strata.strata.WaterOverlay] PASSED [ 65%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.cso2_2018.DisplacementInfo] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.Area] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.AreaPortal] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.BrushSide] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.DisplacementInfo] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.Face] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.Facev2] PASSED [ 66%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.Leaf] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.Node] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.Overlay] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[nexon.vindictus69.StaticPropScale] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[troika.vampire.Face] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[utoplanet.merubasu.StaticPropv11] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[valve.left4dead.StaticPropv8] PASSED [ 67%] +tests/branches/test_LumpClasses.py::test_Struct[valve.left4dead2.StaticPropv9] PASSED [ 68%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box.Leaf] PASSED [ 68%] +tests/branches/test_LumpClasses.py::test_Struct[valve.orange_box.StaticPropv10] PASSED [ 68%] +tests/branches/test_LumpClasses.py::test_Struct[valve.sdk_2013.StaticPropv10] PASSED [ 68%] +tests/branches/test_LumpClasses.py::test_Struct[valve.sdk_2013.StaticPropv11] PASSED [ 68%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Brush] PASSED [ 68%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.BrushSide] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Cubemap] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.DisplacementInfo] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.DisplacementVertex] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Face] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Leaf] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.LeafAmbientSample] PASSED [ 69%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Model] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Node] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.Overlay] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.StaticPropv4] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.StaticPropv5] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.StaticPropv6] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.StaticPropv7] PASSED [ 70%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.TextureData] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.TextureInfo] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.WaterOverlay] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_Struct[valve.source.WorldLight] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake.LumpHeader] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake.Vertex] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_MappedArray[gearbox.blue_shift.LumpHeader] PASSED [ 71%] +tests/branches/test_LumpClasses.py::test_MappedArray[gearbox.nightfire.BrushSide] PASSED [ 72%] +tests/branches/test_LumpClasses.py::test_MappedArray[gearbox.nightfire.Face] PASSED [ 72%] +tests/branches/test_LumpClasses.py::test_MappedArray[gearbox.nightfire.LumpHeader] PASSED [ 72%] +tests/branches/test_LumpClasses.py::test_MappedArray[raven.hexen2.LumpHeader] PASSED [ 72%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.goldsrc.LumpHeader] PASSED [ 72%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake64.LumpHeader] PASSED [ 72%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.mohaa.LumpHeader] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.mohaa_demo.BrushSide] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.mohaa_demo.LumpHeader] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.remake_quake_old.LumpHeader] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.remake_quake.LumpHeader] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.star_trek_elite_force2.LumpHeader] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.mohaa_bt.LumpHeader] PASSED [ 73%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.fakk2.LumpHeader] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.star_trek_elite_force2_demo.LumpHeader] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.qfusion.BrushSide] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.qfusion.LumpHeader] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake2.Brush] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake2.BrushSide] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake2.LumpHeader] PASSED [ 74%] +tests/branches/test_LumpClasses.py::test_MappedArray[id_software.quake3.LumpHeader] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.call_of_duty1_demo.Brush] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.call_of_duty1_demo.LumpHeader] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.call_of_duty1_demo.TriangleSoup] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.call_of_duty1.LumpHeader] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.call_of_duty2.LumpHeader] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.call_of_duty2.TriangleSoup] PASSED [ 75%] +tests/branches/test_LumpClasses.py::test_MappedArray[infinity_ward.modern_warfare.LumpHeader] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[ion_storm.daikatana.LumpHeader] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[raven.soldier_of_fortune.LumpHeader] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[ritual.sin.LumpHeader] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[raven.soldier_of_fortune2.LumpHeader] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.CellBSPNode_x360] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.GAME_LUMP_HEADER] PASSED [ 76%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.GridCell_x360] PASSED [ 77%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.LeafWaterData_x360] PASSED [ 77%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.LightProbeTree_x360] PASSED [ 77%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.LightmapHeader_x360] PASSED [ 77%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.LumpHeader] PASSED [ 77%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.MaterialSort_x360] PASSED [ 77%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.PortalEdgeIntersectHeader_x360] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.Portal_x360] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall_x360.Vertex_x360] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.AreaPortal_x360] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.Area_x360] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.GAME_LUMP_HEADER] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.LeafAmbientIndex_x360] PASSED [ 78%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.LeafWaterData_x360] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.LumpHeader] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.OverlayFade_x360] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box_x360.Vertex_x360] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.sdk_2013_x360.GAME_LUMP_HEADER] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.sdk_2013_x360.LumpHeader] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.apex_legends.GAME_LUMP_HEADER] PASSED [ 79%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.apex_legends.LumpHeader] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.apex_legends.PackedVertex] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.apex_legends.SurfaceProperty] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.apex_legends13.GAME_LUMP_HEADER] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.apex_legends13.LumpHeader] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.CellBSPNode] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.GAME_LUMP_HEADER] PASSED [ 80%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.GridCell] PASSED [ 81%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.LightProbeTree] PASSED [ 81%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.LightmapHeader] PASSED [ 81%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.LumpHeader] PASSED [ 81%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.MaterialSort] PASSED [ 81%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.Portal] PASSED [ 81%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall.PortalEdgeIntersectHeader] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall2.GAME_LUMP_HEADER] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[respawn.titanfall2.LumpHeader] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[ace_team.zeno_clash.GAME_LUMP_HEADER] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[ace_team.zeno_clash.LumpHeader] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[arkane.dark_messiah_mp.GAME_LUMP_HEADER] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[arkane.dark_messiah_mp.LumpHeader] PASSED [ 82%] +tests/branches/test_LumpClasses.py::test_MappedArray[arkane.dark_messiah_sp.GAME_LUMP_HEADER] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[arkane.dark_messiah_sp.GameLumpHeader] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[arkane.dark_messiah_sp.LumpHeader] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[strata.strata.BrushSide] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[strata.strata.FaceBrushList] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[strata.strata.GAME_LUMP_HEADER] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[strata.strata.LeafAmbientIndex] PASSED [ 83%] +tests/branches/test_LumpClasses.py::test_MappedArray[strata.strata.LumpHeader] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[strata.strata.Primitive] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[loiste.infra.GAME_LUMP_HEADER] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[loiste.infra.LumpHeader] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.cso2.GAME_LUMP_HEADER] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.cso2.LumpHeader] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.cso2_2018.LumpHeader] PASSED [ 84%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.vindictus.GAME_LUMP_HEADER] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.vindictus.LumpHeader] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.vindictus69.GAME_LUMP_HEADER] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.vindictus69.GameLumpHeader] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[nexon.vindictus69.LumpHeader] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[outerlight.outerlight.GAME_LUMP_HEADER] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[outerlight.outerlight.LumpHeader] PASSED [ 85%] +tests/branches/test_LumpClasses.py::test_MappedArray[troika.vampire.GAME_LUMP_HEADER] PASSED [ 86%] +tests/branches/test_LumpClasses.py::test_MappedArray[troika.vampire.LumpHeader] PASSED [ 86%] +tests/branches/test_LumpClasses.py::test_MappedArray[utoplanet.merubasu.GAME_LUMP_HEADER] PASSED [ 86%] +tests/branches/test_LumpClasses.py::test_MappedArray[utoplanet.merubasu.LumpHeader] PASSED [ 86%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.alien_swarm.GAME_LUMP_HEADER] PASSED [ 86%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.alien_swarm.LumpHeader] PASSED [ 86%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.left4dead.GAME_LUMP_HEADER] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.left4dead.LumpHeader] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.left4dead2.GAME_LUMP_HEADER] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.left4dead2.LumpHeader] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box.GAME_LUMP_HEADER] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.orange_box.LumpHeader] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.sdk_2013.GAME_LUMP_HEADER] PASSED [ 87%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.sdk_2013.LumpHeader] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.Area] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.AreaPortal] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.CornerNeighbour] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.GAME_LUMP_HEADER] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.GameLumpHeader] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.LeafAmbientIndex] PASSED [ 88%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.LeafWaterData] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.LumpHeader] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.OverlayFade] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.Primitive] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source.SubNeighbour] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source_filmmaker.GAME_LUMP_HEADER] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_MappedArray[valve.source_filmmaker.LumpHeader] PASSED [ 89%] +tests/branches/test_LumpClasses.py::test_BitField[respawn.apex_legends.BVHLeaf5Header] PASSED [ 90%] +tests/branches/test_LumpClasses.py::test_BitField[respawn.apex_legends.BVHLeaf5Triangle] PASSED [ 90%] +tests/branches/test_LumpClasses.py::test_BitField[respawn.titanfall.Primitive] PASSED [ 90%] +tests/branches/test_LumpClasses.py::test_BitField[respawn.titanfall.TricollTriangle] PASSED [ 90%] +tests/branches/test_base.py::TestStruct::test_init PASSED [ 90%] +tests/branches/test_base.py::TestStruct::test_unpack PASSED [ 90%] +tests/branches/test_base.py::TestStruct::test_pack PASSED [ 91%] +tests/branches/test_base.py::TestStruct::test_as_bytes PASSED [ 91%] +tests/branches/test_base.py::TestMappedArray::test_init PASSED [ 91%] +tests/branches/test_base.py::TestMappedArray::test_attr_format_collision PASSED [ 91%] +tests/branches/test_base.py::TestMappedArray::test_as_cpp PASSED [ 91%] +tests/branches/test_base.py::TestMappedArray::test_as_bytes PASSED [ 91%] +tests/branches/test_base.py::TestBitField::test_init PASSED [ 91%] +tests/branches/test_base.py::TestBitField::test_overflow PASSED [ 92%] +tests/branches/test_base.py::TestBitField::test_as_bytes PASSED [ 92%] +tests/branches/test_base.py::test_dict_subgroup PASSED [ 92%] +tests/branches/id_software/test_quake.py::TestMethods::test_vertices_of_face[Quake/mp_lobby.bsp] PASSED [ 92%] +tests/branches/id_software/test_quake.py::TestMethods::test_lightmap_of_face[Quake/mp_lobby.bsp] PASSED [ 92%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_parser[Quake 2/mp_lobby.bsp] PASSED [ 92%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_parser[Team Fortress 2/mp_lobby.bsp] PASSED [ 92%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_parser[Team Fortress 2/test2.bsp] PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_parser[Team Fortress 2/test_physcollide.bsp] PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_parser[Momentum Mod/mp_lobby.bsp] PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_run_length_encode PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_run_length_decode PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_as_bytes[Quake 2/mp_lobby.bsp] PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_as_bytes[Team Fortress 2/mp_lobby.bsp] PASSED [ 93%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_as_bytes[Team Fortress 2/test2.bsp] PASSED [ 94%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_as_bytes[Team Fortress 2/test_physcollide.bsp] PASSED [ 94%] +tests/branches/id_software/test_quake2.py::TestVisibility::test_as_bytes[Momentum Mod/mp_lobby.bsp] PASSED [ 94%] +tests/branches/id_software/test_quake3.py::test_face_struct[Quake 3 Arena/mp_lobby.bsp] PASSED [ 94%] +tests/branches/id_software/test_remake_quake.py::TestMethods::test_vertices_of_face[ReMakeQuake/mp_lobby.bsp] PASSED [ 94%] +tests/branches/id_software/test_remake_quake.py::TestMethods::test_lightmap_of_face[ReMakeQuake/mp_lobby.bsp] PASSED [ 94%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/test.d3dbsp] PASSED [ 94%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 95%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 95%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_simple_indices[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 95%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/test.d3dbsp] PASSED [ 95%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/test_traverses.d3dbsp] PASSED [ 95%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/mp/mp_lobby.d3dbsp] PASSED [ 95%] +tests/branches/infinity_ward/test_modern_warfare.py::TestBounds::test_layered_indices[Call of Duty 4/mp/mp_test.d3dbsp] PASSED [ 96%] +tests/branches/respawn/test_titanfall2.py::TestAssumptions::test_grid_cells_count[Titanfall 2/mp_crossfire.bsp] PASSED [ 96%] +tests/branches/respawn/test_titanfall2.py::TestMethods::test_get_brush_sides[Titanfall 2/mp_crossfire.bsp] XFAIL (MRVN-Radiant doesn't export BrushSideTextureVectors) [ 96%] +tests/branches/strata/test_strata.py::test_spec[Momentum Mod/mp_lobby.bsp] PASSED [ 96%] +tests/branches/valve/test_orange_box.py::TestMethods::test_vertices_of_displacement[Team Fortress 2/test2.bsp] PASSED [ 96%] +tests/branches/valve/test_orange_box.py::TestMethods::test_vertices_of_displacement[Team Fortress 2/test_displacement_decompile.bsp] PASSED [ 96%] +tests/branches/valve/test_source.py::TestPakFile::test_new PASSED [ 96%] +tests/branches/valve/test_source.py::TestPakFile::test_from_file[empty.zip] PASSED [ 97%] +tests/branches/valve/test_source.py::TestPakFile::test_from_file[deflate.zip] PASSED [ 97%] +tests/branches/valve/test_source.py::TestPakFile::test_bytes[empty.zip] PASSED [ 97%] +tests/branches/valve/test_source.py::TestPakFile::test_bytes[deflate.zip] PASSED [ 97%] +tests/branches/valve/test_source.py::TestPakFile::test_save_changes PASSED [ 97%] +tests/extensions/test_compiler_signature.py::test_MRVNRadiant[Titanfall 2/mp_crossfire.bsp] PASSED [ 97%] +tests/extensions/test_compiler_signature.py::test_identify[Titanfall 2/mp_crossfire.bsp] PASSED [ 97%] +tests/extensions/diff/test_BspDiff.py::TestBspDiff::test_invalid_lump PASSED [ 98%] +tests/extensions/diff/test_BspDiff.py::TestBspDiff::test_lump_added PASSED [ 98%] +tests/extensions/diff/test_BspDiff.py::TestBspDiff::test_lump_removed PASSED [ 98%] +tests/extensions/diff/test_base.py::TestDiff::test_has_no_changes PASSED [ 98%] +tests/extensions/diff/test_base.py::TestDiff::test_as_text_FAST PASSED [ 98%] +tests/extensions/diff/test_base.py::TestDiff::test_as_text_VERBOSE PASSED [ 98%] +tests/extensions/diff/test_base.py::TestDiff::test_as_text_VERY_VERBOSE PASSED [ 98%] +tests/extensions/diff/test_core.py::TestXXD::test_input[no padding needed] PASSED [ 99%] +tests/extensions/diff/test_core.py::TestXXD::test_input[padding required] PASSED [ 99%] +tests/extensions/diff/test_core.py::TestXXD::test_input[every byte] PASSED [ 99%] +tests/extensions/diff/test_shared.py::TestEntitiesDiff::test_short_stats PASSED [ 99%] +tests/extensions/diff/test_shared.py::TestEntitiesDiff::test_unified_diff PASSED [ 99%] +tests/extensions/diff/valve/test_source.py::TestPakfileDiff::test_short_stats PASSED [ 99%] +tests/extensions/diff/valve/test_source.py::TestPakfileDiff::test_unified_diff PASSED [100%] ================================== FAILURES =================================== _ test_load_bsp[D:/SteamLibrary/steamapps/common-Jabroni Brawl Episode 3-map_dirs57] _ @@ -426,18 +760,271 @@ game_name = 'Jabroni Brawl Episode 3', map_dirs = ['jbep3/maps'] > assert errors == dict(), "\n".join([f"{len(errors)} out of {total} .bsps failed", *map(str, types), # BspClass, branch_script, bsp_version *{ln for ae in errors.values() for ln in ae.args[0].split("\n")[0].split(", ")}]) -E AssertionError: 1 out of 133 .bsps failed +E AssertionError: 10 out of 139 .bsps failed E ('ValveBsp', 'bsp_tool.branches.valve.sdk_2013', 21) E sprp v11 -E assert {'jbep3/maps/jb_fof_depot.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/fencewoodlog04_long.mdl\\xe4\\x0f\\xa4\\xe0\\xa0:P\\xa8\\xda7\\x05\\xa8\\xda7\\x05~\\xb65P\\xe0K\\xc5\\nP\\x01|\\xda\\xea\\xc0\\xda7\\x05\\xb0l\\x9fP|\\xda\\xeaD{\\x9f\\xe0K\\xc5\\nP', 47, 48, 'invalid continuation byte')})")} == {} -E Left contains 1 more item: -E {'jbep3/maps/jb_fof_depot.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/fencewoodlog04_long.mdl\\xe4\\x0f\\xa4\\xe0\\xa0:P\\xa8\\xda7\\x05\\xa8\\xda7\\x05~\\xb65P\\xe0K\\xc5\\nP\\x01|\\xda\\xea\\xc0\\xda7\\x05\\xb0l\\x9fP|\\xda\\xeaD{\\x9f\\xe0K\\xc5\\nP', 47, 48, 'invalid continuation byte')})")} +E assert {'jbep3/maps/jb_atrium.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props_mall/bay_guardrail_left.mdl<\\xde\\xb7\\x04\\xe4\\x0f\\x1c\\xe0\\xa0\\x87x \\xde\\xb7\\x04 \\xde\\xb7\\x04~\\xb6\\x82x0\\xeae\\x07P\\x01|\\xdab8\\xde\\xb7\\x04\\xb0l\\x17P|\\xdabD{\\x170\\xeae\\x07P', 44, 45, 'invalid continuation byte')})"), 'jbep3/maps/jb_farmhouse.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/ladderwood.mdl\\x7fD\\xd8\\xf7\\x04\\xe4\\x0f^\\xe0\\xa0\\xa7Q(\\xd8\\xf7\\x04(\\xd8\\xf7\\x04~\\xb6\\xa2Q\\xb0b.\\nP\\x01|\\xda\\xa4@\\xd8\\xf7\\x04\\xb0lYP|\\xda\\xa4D{Y\\xb0b.\\nP', 40, 41, 'invalid continuation byte')})"), 'jbep3/maps/jb_fof_depot.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/fencewoodlog04_long.mdl\\xe4\\x0f\\xb5h\\xdcw\\xe0\\xa0\\xf9_L\\xdcw~\\xb6\\xf4_O\\x80\\nP\\x01|\\xda\\xfbd\\xdcw\\xb0l\\xb0P|\\xda\\xfbD{\\xb0O\\x80\\nP', 47, 48, 'invalid continuation byte')})"), 'jbep3/maps/jb_harvest.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/crate_extrasmallmill.mdl\\x0fe\\xb8\\xda\\xf7\\x04\\xe0\\xa0db\\x9c\\xda\\xf7\\x04~\\xb6_b@8\\xc6\\x07P\\x01|\\xda\\xab\\xb4\\xda\\xf7\\x04\\xb0l`P|\\xda\\xabD{`@8\\xc6\\x07P', 50, 51, 'invalid start byte')})"), 'jbep3/maps/jb_miniroyale.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_office/light_inset.mdl\\xff\\xff\\xff\\x7f\\xe4\\x0f\\x9b\\xc0\\xd9\\x85\\xe0\\xa0Nz\\xa4\\xd9\\x85~\\xb6Iz\\xc0\\xfa\\x10\\x08P\\x01|\\xda\\xe1\\xbc\\xd9\\x85\\xb0l\\x96P|\\xda\\xe1D{\\x96\\xc0\\xfa\\x10\\x08P', 38, 39, 'invalid start byte')})"), 'jbep3/maps/jb_no_mercy.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/effects/urban_puddle_model02a.mdl\\xfc\\xda\\xd7\\x04\\xe4\\x0f7\\xe0\\xa0\\x87x\\xe0\\xda\\xd7\\x04\\xe0\\xda\\xd7\\x04~\\xb6\\x82x0\\x96\\xa3\\nP\\x01|\\xda}\\xf8\\xda\\xd7\\x04\\xb0l2P|\\xda}D{20\\x96\\xa3\\nP', 40, 41, 'invalid start byte')})"), 'jbep3/maps/jb_poolparty.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props_lab/powerbox02d.mdl\\xff\\xff\\xff\\x7f\\xb4\\xdd\\xd7\\x04\\xe4\\x0f>\\xe0\\xa0\\xedz\\x98\\xdd\\xd7\\x04\\x98\\xdd\\xd7\\x04~\\xb6\\xe8z\\xa0\\x8fz\\tP\\x01|\\xda\\x84\\xb0\\xdd\\xd7\\x04\\xb0l9P|\\xda\\x84D{9\\xa0\\x8fz\\tP', 32, 33, 'invalid start byte')})"), 'jbep3/maps/jb_portal_bts.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/autoportal_frame/autoportal_frame.mdl\\xdeW\\xe0\\xa0\\rS\\xe4\\xddW~\\xb6\\x08S0et\\x07P\\x01|\\xda?\\x01\\xfc\\xddW\\xb0l\\xf4P|\\xda?\\x01D{\\xf40et\\x07P', 50, 51, 'invalid continuation byte')})"), 'jbep3/maps/jb_ss2_ops.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/systemshock2/ele.mdl=\\xeb\\x8f\\x08\\xff\\xff\\xff\\x7f\\xe4\\x0f\\x90x\\xd9\\x1f\\x05\\xe0\\xa0\\x86]\\\\\\xd9\\x1f\\x05~\\xb6\\x81]\\xa0\\x85]\\x0eP\\x01|\\xda\\xd6t\\xd9\\x1f\\x05\\xb0l\\x8bP|\\xda\\xd6D{\\x8b\\xa0\\x85]\\x0eP', 28, 30, 'invalid continuation byte')})"), 'jbep3/maps/jb_two2forts.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/gunman/cactus.mdl=\\xeb\\xab0\\x08\\xff\\xff\\xff\\x7fh\\xdcw:\\x11\\xac\\xe0\\xa0\\x9cxL\\xdcw~\\xb6\\x97x\\xc0\\xa1\\xd9\\rP\\x01|\\xda\\xf2d\\xdcw\\xb0l\\xa7P|\\xda\\xf2D{\\xa7\\xc0\\xa1\\xd9\\rP', 25, 27, 'invalid continuation byte')})")} == {} +E Left contains 10 more items: +E {'jbep3/maps/jb_atrium.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props_mall/bay_guardrail_left.mdl<\\xde\\xb7\\x04\\xe4\\x0f\\x1c\\xe0\\xa0\\x87x \\xde\\xb7\\x04 \\xde\\xb7\\x04~\\xb6\\x82x0\\xeae\\x07P\\x01|\\xdab8\\xde\\xb7\\x04\\xb0l\\x17P|\\xdabD{\\x170\\xeae\\x07P', 44, 45, 'invalid continuation byte')})"), +E 'jbep3/maps/jb_farmhouse.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/ladderwood.mdl\\x7fD\\xd8\\xf7\\x04\\xe4\\x0f^\\xe0\\xa0\\xa7Q(\\xd8\\xf7\\x04(\\xd8\\xf7\\x04~\\xb6\\xa2Q\\xb0b.\\nP\\x01|\\xda\\xa4@\\xd8\\xf7\\x04\\xb0lYP|\\xda\\xa4D{Y\\xb0b.\\nP', 40, 41, 'invalid continuation byte')})"), +E 'jbep3/maps/jb_fof_depot.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/fencewoodlog04_long.mdl\\xe4\\x0f\\xb5h\\xdcw\\xe0\\xa0\\xf9_L\\xdcw~\\xb6\\xf4_O\\x80\\nP\\x01|\\xda\\xfbd\\xdcw\\xb0l\\xb0P|\\xda\\xfbD{\\xb0O\\x80\\nP', 47, 48, 'invalid continuation byte')})"), +E 'jbep3/maps/jb_harvest.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/crate_extrasmallmill.mdl\\x0fe\\xb8\\xda\\xf7\\x04\\xe0\\xa0db\\x9c\\xda\\xf7\\x04~\\xb6_b@8\\xc6\\x07P\\x01|\\xda\\xab\\xb4\\xda\\xf7\\x04\\xb0l`P|\\xda\\xabD{`@8\\xc6\\x07P', 50, 51, 'invalid start byte')})"), +E 'jbep3/maps/jb_miniroyale.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_office/light_inset.mdl\\xff\\xff\\xff\\x7f\\xe4\\x0f\\x9b\\xc0\\xd9\\x85\\xe0\\xa0Nz\\xa4\\xd9\\x85~\\xb6Iz\\xc0\\xfa\\x10\\x08P\\x01|\\xda\\xe1\\xbc\\xd9\\x85\\xb0l\\x96P|\\xda\\xe1D{\\x96\\xc0\\xfa\\x10\\x08P', 38, 39, 'invalid start byte')})"), +E 'jbep3/maps/jb_no_mercy.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/effects/urban_puddle_model02a.mdl\\xfc\\xda\\xd7\\x04\\xe4\\x0f7\\xe0\\xa0\\x87x\\xe0\\xda\\xd7\\x04\\xe0\\xda\\xd7\\x04~\\xb6\\x82x0\\x96\\xa3\\nP\\x01|\\xda}\\xf8\\xda\\xd7\\x04\\xb0l2P|\\xda}D{20\\x96\\xa3\\nP', 40, 41, 'invalid start byte')})"), +E 'jbep3/maps/jb_poolparty.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props_lab/powerbox02d.mdl\\xff\\xff\\xff\\x7f\\xb4\\xdd\\xd7\\x04\\xe4\\x0f>\\xe0\\xa0\\xedz\\x98\\xdd\\xd7\\x04\\x98\\xdd\\xd7\\x04~\\xb6\\xe8z\\xa0\\x8fz\\tP\\x01|\\xda\\x84\\xb0\\xdd\\xd7\\x04\\xb0l9P|\\xda\\x84D{9\\xa0\\x8fz\\tP', 32, 33, 'invalid start byte')})"), +E 'jbep3/maps/jb_portal_bts.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/autoportal_frame/autoportal_frame.mdl\\xdeW\\xe0\\xa0\\rS\\xe4\\xddW~\\xb6\\x08S0et\\x07P\\x01|\\xda?\\x01\\xfc\\xddW\\xb0l\\xf4P|\\xda?\\x01D{\\xf40et\\x07P', 50, 51, 'invalid continuation byte')})"), +E 'jbep3/maps/jb_ss2_ops.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/systemshock2/ele.mdl=\\xeb\\x8f\\x08\\xff\\xff\\xff\\x7f\\xe4\\x0f\\x90x\\xd9\\x1f\\x05\\xe0\\xa0\\x86]\\\\\\xd9\\x1f\\x05~\\xb6\\x81]\\xa0\\x85]\\x0eP\\x01|\\xda\\xd6t\\xd9\\x1f\\x05\\xb0l\\x8bP|\\xda\\xd6D{\\x8b\\xa0\\x85]\\x0eP', 28, 30, 'invalid continuation byte')})"), +E 'jbep3/maps/jb_two2forts.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/gunman/cactus.mdl=\\xeb\\xab0\\x08\\xff\\xff\\xff\\x7fh\\xdcw:\\x11\\xac\\xe0\\xa0\\x9cxL\\xdcw~\\xb6\\x97x\\xc0\\xa1\\xd9\\rP\\x01|\\xda\\xf2d\\xdcw\\xb0l\\xa7P|\\xda\\xf2D{\\xa7\\xc0\\xa1\\xd9\\rP', 25, 27, 'invalid continuation byte')})")} E Full diff: -E - {} -E + {'jbep3/maps/jb_fof_depot.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/fencewoodlog04_long.mdl\\xe4\\x0f\\xa4\\xe0\\xa0:P\\xa8\\xda7\\x05\\xa8\\xda7\\x05~\\xb65P\\xe0K\\xc5\\nP\\x01|\\xda\\xea\\xc0\\xda7\\x05\\xb0l\\x9fP|\\xda\\xeaD{\\x9f\\xe0K\\xc5\\nP', 47, 48, 'invalid continuation byte')})")} +E { +E - , +E + 'jbep3/maps/jb_atrium.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props_mall/bay_guardrail_left.mdl<\\xde\\xb7\\x04\\xe4\\x0f\\x1c\\xe0\\xa0\\x87x \\xde\\xb7\\x04 \\xde\\xb7\\x04~\\xb6\\x82x0\\xeae\\x07P\\x01|\\xdab8\\xde\\xb7\\x04\\xb0l\\x17P|\\xdabD{\\x170\\xeae\\x07P', 44, 45, 'invalid continuation byte')})"), +E + 'jbep3/maps/jb_farmhouse.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/ladderwood.mdl\\x7fD\\xd8\\xf7\\x04\\xe4\\x0f^\\xe0\\xa0\\xa7Q(\\xd8\\xf7\\x04(\\xd8\\xf7\\x04~\\xb6\\xa2Q\\xb0b.\\nP\\x01|\\xda\\xa4@\\xd8\\xf7\\x04\\xb0lYP|\\xda\\xa4D{Y\\xb0b.\\nP', 40, 41, 'invalid continuation byte')})"), +E + 'jbep3/maps/jb_fof_depot.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/fencewoodlog04_long.mdl\\xe4\\x0f\\xb5h\\xdcw\\xe0\\xa0\\xf9_L\\xdcw~\\xb6\\xf4_O\\x80\\nP\\x01|\\xda\\xfbd\\xdcw\\xb0l\\xb0P|\\xda\\xfbD{\\xb0O\\x80\\nP', 47, 48, 'invalid continuation byte')})"), +E + 'jbep3/maps/jb_harvest.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_militia/crate_extrasmallmill.mdl\\x0fe\\xb8\\xda\\xf7\\x04\\xe0\\xa0db\\x9c\\xda\\xf7\\x04~\\xb6_b@8\\xc6\\x07P\\x01|\\xda\\xab\\xb4\\xda\\xf7\\x04\\xb0l`P|\\xda\\xabD{`@8\\xc6\\x07P', 50, 51, 'invalid start byte')})"), +E + 'jbep3/maps/jb_miniroyale.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/cs_office/light_inset.mdl\\xff\\xff\\xff\\x7f\\xe4\\x0f\\x9b\\xc0\\xd9\\x85\\xe0\\xa0Nz\\xa4\\xd9\\x85~\\xb6Iz\\xc0\\xfa\\x10\\x08P\\x01|\\xda\\xe1\\xbc\\xd9\\x85\\xb0l\\x96P|\\xda\\xe1D{\\x96\\xc0\\xfa\\x10\\x08P', 38, 39, 'invalid start byte')})"), +E + 'jbep3/maps/jb_no_mercy.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/effects/urban_puddle_model02a.mdl\\xfc\\xda\\xd7\\x04\\xe4\\x0f7\\xe0\\xa0\\x87x\\xe0\\xda\\xd7\\x04\\xe0\\xda\\xd7\\x04~\\xb6\\x82x0\\x96\\xa3\\nP\\x01|\\xda}\\xf8\\xda\\xd7\\x04\\xb0l2P|\\xda}D{20\\x96\\xa3\\nP', 40, 41, 'invalid start byte')})"), +E + 'jbep3/maps/jb_poolparty.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props_lab/powerbox02d.mdl\\xff\\xff\\xff\\x7f\\xb4\\xdd\\xd7\\x04\\xe4\\x0f>\\xe0\\xa0\\xedz\\x98\\xdd\\xd7\\x04\\x98\\xdd\\xd7\\x04~\\xb6\\xe8z\\xa0\\x8fz\\tP\\x01|\\xda\\x84\\xb0\\xdd\\xd7\\x04\\xb0l9P|\\xda\\x84D{9\\xa0\\x8fz\\tP', 32, 33, 'invalid start byte')})"), +E + 'jbep3/maps/jb_portal_bts.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/props/autoportal_frame/autoportal_frame.mdl\\xdeW\\xe0\\xa0\\rS\\xe4\\xddW~\\xb6\\x08S0et\\x07P\\x01|\\xda?\\x01\\xfc\\xddW\\xb0l\\xf4P|\\xda?\\x01D{\\xf40et\\x07P', 50, 51, 'invalid continuation byte')})"), +E + 'jbep3/maps/jb_ss2_ops.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/systemshock2/ele.mdl=\\xeb\\x8f\\x08\\xff\\xff\\xff\\x7f\\xe4\\x0f\\x90x\\xd9\\x1f\\x05\\xe0\\xa0\\x86]\\\\\\xd9\\x1f\\x05~\\xb6\\x81]\\xa0\\x85]\\x0eP\\x01|\\xda\\xd6t\\xd9\\x1f\\x05\\xb0l\\x8bP|\\xda\\xd6D{\\x8b\\xa0\\x85]\\x0eP', 28, 30, 'invalid continuation byte')})"), +E + 'jbep3/maps/jb_two2forts.bsp': AssertionError("sprp v11\nassert 1 == 0\n + where 1 = len({'sprp v11': UnicodeDecodeError('utf-8', b'models/gunman/cactus.mdl=\\xeb\\xab0\\x08\\xff\\xff\\xff\\x7fh\\xdcw:\\x11\\xac\\xe0\\xa0\\x9cxL\\xdcw~\\xb6\\x97x\\xc0\\xa1\\xd9\\rP\\x01|\\xda\\xf2d\\xdcw\\xb0l\\xa7P|\\xda\\xf2D{\\xa7\\xc0\\xa1\\xd9\\rP', 25, 27, 'invalid continuation byte')})"), +E } tests\test_load_bsp.py:114: AssertionError -________________ test_load_bsp[E:/Mod-DDayNormandy-map_dirs81] ________________ +_________________ test_load_bsp[E:/Mod-Daikatana-map_dirs81] __________________ + +group_path = 'E:/Mod', game_name = 'Daikatana', map_dirs = ['pak2/maps'] + + @pytest.mark.parametrize("group_path,game_name,map_dirs", [(*gps, ms) for gps, ms in maplist.installed_games.items()]) + def test_load_bsp(group_path, game_name, map_dirs): +  """MEGATEST: 69GB+ of .bsp files!""" + # TODO: clean up all the edge case conditions elsewhere + branch_script = game_scripts.get(game_name) # forcing branch to test each branch_script + # TODO: move branch_script tests to another test and test auto-detect here instead + # -- e.g. test_list = [(BspClass, branch_script, ["mapdir", ...]), ...] + errors = dict() + # ^ {"map_dir/map_name.bsp": ["Error"]} + types = set() # printed on failure to aid in debugging + # ^ {(BspClass, branch, version)} + total = 0 + for map_dir in map_dirs: + full_path = os.path.join(group_path, game_name, map_dir) + if os.path.exists(full_path): + files = os.listdir(full_path) + maps = fnmatch.filter(files, "*[Bb][Ss][Pp]") # .bsp, .BSP & CoD2 .d3dbsp + maps = [m for m in maps if "." in m] # DDayNormandy bomba2bsp edge case + total += len(maps) + assert len(maps) != 0, f"couldn't find any maps for {game_name} in {map_dir}" + for m in maps: # load every .bsp + try: + bsp_filename = os.path.join(full_path, m) + if os.path.getsize(bsp_filename) == 0: + continue # hl2/maps/d2_coast_02 is 0 bytes, idk why it shipped + if game_name == "half-life 2/episodic" and m == "ep1_citadel_00_demo.bsp": + continue # broken HL2:EP1 map (game crashes on load) + elif game_name == "half-life 2/hl1" and m in ("c4a1y.bsp", "c4a1z.bsp"): + continue # broken HL:Source maps (y is v18 and won't run, z is v19 and has broken IO) + elif game_name == "DDayNormandy" and m in dday_mappack_excludes: + continue # maps probably tweaked in a text editor, all null bytes are spaces + bsp = load_bsp(bsp_filename, branch_script) + bsp.file.close() # avoid OSError "Too many open files" + bsp_id = (bsp.__class__.__name__, bsp.branch.__name__, bsp.bsp_version) # debug info + loading_errors = dict() + for lump_name, error in bsp.loading_errors.items(): + lump_version = getattr(bsp.headers[lump_name], "version", None) + if lump_version is not None: + loading_errors[f"{lump_name} v{lump_version}"] = error + else: + loading_errors[lump_name] = error + if hasattr(bsp, "GAME_LUMP"): + if not isinstance(bsp.GAME_LUMP, lumps.RawBspLump): # skip unmapped game lumps + loading_errors.update({f"{k} v{bsp.GAME_LUMP.headers[k].version}": v + for k, v in bsp.GAME_LUMP.loading_errors.items()}) + if hasattr(bsp, "external"): + # TODO: actually read external SpecialLumpClasses lumps for a thorough check + # TODO: close any external lump files this opens to avoid OSError + # NOTE: if collecting external lumps for a BspClass w/o versions this will break + loading_errors.update({f"external.{k} v{bsp.external.headers[k].version}": v + for k, v in bsp.external.loading_errors.items()}) + if hasattr(bsp.external, "GAME_LUMP"): + if not isinstance(bsp.external.GAME_LUMP, lumps.RawBspLump): # skip unmapped game lumps + loading_errors.update({f"external.GAME_LUMP.{k} v{bsp.external.GAME_LUMP.headers[k].version}": v # noqa E501 + for k, v in bsp.external.GAME_LUMP.loading_errors.items()}) + del bsp # close all open files before pytest freezes locals() on assert + assert len(loading_errors) == 0, ", ".join(loading_errors.keys()) # pass loading_errors out + except NotImplementedError as nie: + # "DarkPlaces/maps/b_*.bsp" files are Quake .mdl with the .bsp extension + # https://www.gamers.org/dEngine/quake/spec/quake-spec32.html#CMDLF + # Quake stores pickup models as .bsp and renders them in a nested fashion + # so this is probably fine in Quake, but they still aren't .bsp files + if not (game_name == "DarkPlaces" and nie.args == ("Unknown file_magic: b'IDPO'",)): + errors[f"{map_dir}/{m}"] = nie + except AssertionError as ae: # should catch the `assert len(loading_errors) == ...` above + errors[f"{map_dir}/{m}"] = ae + types.add(bsp_id) +> assert errors == dict(), "\n".join([f"{len(errors)} out of {total} .bsps failed", + *map(str, types), # BspClass, branch_script, bsp_version + *{ln for ae in errors.values() for ln in ae.args[0].split("\n")[0].split(", ")}]) +E AssertionError: 74 out of 83 .bsps failed +E ('IdTechBsp', 'bsp_tool.branches.ritual.sin', 41) +E LEAVES +E assert {'pak2/maps/credits.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263296 / 28)')})"), 'pak2/maps/e1dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (304928 / 28)')})"), 'pak2/maps/e1dm1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (90336 / 28)')})"), 'pak2/maps/e1dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (113152 / 28)')})"), 'pak2/maps/e1dm2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (52480 / 28)')})"), 'pak2/maps/e1dt1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (246432 / 28)')})"), 'pak2/maps/e1m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (195936 / 28)')})"), 'pak2/maps/e1m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (213120 / 28)')})"), 'pak2/maps/e1m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (292480 / 28)')})"), 'pak2/maps/e1m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (284672 / 28)')})"), 'pak2/maps/e1m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (191168 / 28)')})"), 'pak2/maps/e1m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (327328 / 28)')})"), 'pak2/maps/e1m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (221184 / 28)')})"), 'pak2/maps/e1m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (190368 / 28)')})"), 'pak2/maps/e1m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (163008 / 28)')})"), 'pak2/maps/e1m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (201952 / 28)')})"), 'pak2/maps/e1m5b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263584 / 28)')})"), 'pak2/maps/e1m6b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (181728 / 28)')})"), 'pak2/maps/e2ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (121472 / 28)')})"), 'pak2/maps/e2dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (65120 / 28)')})"), 'pak2/maps/e2dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (55392 / 28)')})"), 'pak2/maps/e2m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (202304 / 28)')})"), 'pak2/maps/e2m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (167744 / 28)')})"), 'pak2/maps/e2m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (228224 / 28)')})"), 'pak2/maps/e2m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (144160 / 28)')})"), 'pak2/maps/e2m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (235168 / 28)')})"), 'pak2/maps/e2m2c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (135136 / 28)')})"), 'pak2/maps/e2m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (126912 / 28)')})"), 'pak2/maps/e2m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (118464 / 28)')})"), 'pak2/maps/e2m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (168064 / 28)')})"), 'pak2/maps/e2m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (191776 / 28)')})"), 'pak2/maps/e2m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (213568 / 28)')})"), 'pak2/maps/e2m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (209408 / 28)')})"), 'pak2/maps/e2m4d.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (271808 / 28)')})"), 'pak2/maps/e2m4e.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (228096 / 28)')})"), 'pak2/maps/e2m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (250016 / 28)')})"), 'pak2/maps/e2m5b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (171840 / 28)')})"), 'pak2/maps/e2m5c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (198976 / 28)')})"), 'pak2/maps/e2m5d.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (125312 / 28)')})"), 'pak2/maps/e2m5e.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (58560 / 28)')})"), 'pak2/maps/e3ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (225536 / 28)')})"), 'pak2/maps/e3dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (78592 / 28)')})"), 'pak2/maps/e3dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (60736 / 28)')})"), 'pak2/maps/e3m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (278528 / 28)')})"), 'pak2/maps/e3m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (227424 / 28)')})"), 'pak2/maps/e3m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (256960 / 28)')})"), 'pak2/maps/e3m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (291840 / 28)')})"), 'pak2/maps/e3m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (198816 / 28)')})"), 'pak2/maps/e3m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263712 / 28)')})"), 'pak2/maps/e3m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (282592 / 28)')})"), 'pak2/maps/e3m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (184704 / 28)')})"), 'pak2/maps/e3m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (272224 / 28)')})"), 'pak2/maps/e3m6a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (177984 / 28)')})"), 'pak2/maps/e4ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (80320 / 28)')})"), 'pak2/maps/e4dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (68224 / 28)')})"), 'pak2/maps/e4dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (77344 / 28)')})"), 'pak2/maps/e4m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (341408 / 28)')})"), 'pak2/maps/e4m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (313472 / 28)')})"), 'pak2/maps/e4m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (306816 / 28)')})"), 'pak2/maps/e4m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (184224 / 28)')})"), 'pak2/maps/e4m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (274656 / 28)')})"), 'pak2/maps/e4m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (212288 / 28)')})"), 'pak2/maps/e4m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (153856 / 28)')})"), 'pak2/maps/e4m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (308960 / 28)')})"), 'pak2/maps/e4m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (296640 / 28)')})"), 'pak2/maps/e4m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (422304 / 28)')})"), 'pak2/maps/e4m6a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (240896 / 28)')})"), 'pak2/maps/e4m6b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (149312 / 28)')})"), 'pak2/maps/e4m6c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (174528 / 28)')})"), 'pak2/maps/end.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (140256 / 28)')})"), 'pak2/maps/intro.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (309984 / 28)')})"), 'pak2/maps/slicedm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (27968 / 28)')})"), 'pak2/maps/timestream23.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (3872 / 28)')})"), 'pak2/maps/timestream34.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (3872 / 28)')})")} == {} +E Left contains 74 more items: +E {'pak2/maps/credits.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263296 / 28)')})"), +E 'pak2/maps/e1dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (304928 / 28)')})"), +E 'pak2/maps/e1dm1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (90336 / 28)')})"), +E 'pak2/maps/e1dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (113152 / 28)')})"), +E 'pak2/maps/e1dm2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (52480 / 28)')})"), +E 'pak2/maps/e1dt1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (246432 / 28)')})"), +E 'pak2/maps/e1m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (195936 / 28)')})"), +E 'pak2/maps/e1m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (213120 / 28)')})"), +E 'pak2/maps/e1m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (292480 / 28)')})"), +E 'pak2/maps/e1m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (284672 / 28)')})"), +E 'pak2/maps/e1m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (191168 / 28)')})"), +E 'pak2/maps/e1m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (327328 / 28)')})"), +E 'pak2/maps/e1m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (221184 / 28)')})"), +E 'pak2/maps/e1m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (190368 / 28)')})"), +E 'pak2/maps/e1m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (163008 / 28)')})"), +E 'pak2/maps/e1m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (201952 / 28)')})"), +E 'pak2/maps/e1m5b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263584 / 28)')})"), +E 'pak2/maps/e1m6b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (181728 / 28)')})"), +E 'pak2/maps/e2ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (121472 / 28)')})"), +E 'pak2/maps/e2dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (65120 / 28)')})"), +E 'pak2/maps/e2dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (55392 / 28)')})"), +E 'pak2/maps/e2m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (202304 / 28)')})"), +E 'pak2/maps/e2m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (167744 / 28)')})"), +E 'pak2/maps/e2m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (228224 / 28)')})"), +E 'pak2/maps/e2m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (144160 / 28)')})"), +E 'pak2/maps/e2m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (235168 / 28)')})"), +E 'pak2/maps/e2m2c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (135136 / 28)')})"), +E 'pak2/maps/e2m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (126912 / 28)')})"), +E 'pak2/maps/e2m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (118464 / 28)')})"), +E 'pak2/maps/e2m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (168064 / 28)')})"), +E 'pak2/maps/e2m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (191776 / 28)')})"), +E 'pak2/maps/e2m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (213568 / 28)')})"), +E 'pak2/maps/e2m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (209408 / 28)')})"), +E 'pak2/maps/e2m4d.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (271808 / 28)')})"), +E 'pak2/maps/e2m4e.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (228096 / 28)')})"), +E 'pak2/maps/e2m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (250016 / 28)')})"), +E 'pak2/maps/e2m5b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (171840 / 28)')})"), +E 'pak2/maps/e2m5c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (198976 / 28)')})"), +E 'pak2/maps/e2m5d.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (125312 / 28)')})"), +E 'pak2/maps/e2m5e.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (58560 / 28)')})"), +E 'pak2/maps/e3ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (225536 / 28)')})"), +E 'pak2/maps/e3dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (78592 / 28)')})"), +E 'pak2/maps/e3dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (60736 / 28)')})"), +E 'pak2/maps/e3m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (278528 / 28)')})"), +E 'pak2/maps/e3m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (227424 / 28)')})"), +E 'pak2/maps/e3m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (256960 / 28)')})"), +E 'pak2/maps/e3m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (291840 / 28)')})"), +E 'pak2/maps/e3m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (198816 / 28)')})"), +E 'pak2/maps/e3m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263712 / 28)')})"), +E 'pak2/maps/e3m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (282592 / 28)')})"), +E 'pak2/maps/e3m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (184704 / 28)')})"), +E 'pak2/maps/e3m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (272224 / 28)')})"), +E 'pak2/maps/e3m6a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (177984 / 28)')})"), +E 'pak2/maps/e4ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (80320 / 28)')})"), +E 'pak2/maps/e4dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (68224 / 28)')})"), +E 'pak2/maps/e4dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (77344 / 28)')})"), +E 'pak2/maps/e4m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (341408 / 28)')})"), +E 'pak2/maps/e4m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (313472 / 28)')})"), +E 'pak2/maps/e4m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (306816 / 28)')})"), +E 'pak2/maps/e4m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (184224 / 28)')})"), +E 'pak2/maps/e4m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (274656 / 28)')})"), +E 'pak2/maps/e4m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (212288 / 28)')})"), +E 'pak2/maps/e4m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (153856 / 28)')})"), +E 'pak2/maps/e4m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (308960 / 28)')})"), +E 'pak2/maps/e4m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (296640 / 28)')})"), +E 'pak2/maps/e4m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (422304 / 28)')})"), +E 'pak2/maps/e4m6a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (240896 / 28)')})"), +E 'pak2/maps/e4m6b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (149312 / 28)')})"), +E 'pak2/maps/e4m6c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (174528 / 28)')})"), +E 'pak2/maps/end.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (140256 / 28)')})"), +E 'pak2/maps/intro.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (309984 / 28)')})"), +E 'pak2/maps/slicedm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (27968 / 28)')})"), +E 'pak2/maps/timestream23.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (3872 / 28)')})"), +E 'pak2/maps/timestream34.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (3872 / 28)')})")} +E Full diff: +E { +E - , +E + 'pak2/maps/credits.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263296 / 28)')})"), +E + 'pak2/maps/e1dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (304928 / 28)')})"), +E + 'pak2/maps/e1dm1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (90336 / 28)')})"), +E + 'pak2/maps/e1dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (113152 / 28)')})"), +E + 'pak2/maps/e1dm2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (52480 / 28)')})"), +E + 'pak2/maps/e1dt1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (246432 / 28)')})"), +E + 'pak2/maps/e1m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (195936 / 28)')})"), +E + 'pak2/maps/e1m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (213120 / 28)')})"), +E + 'pak2/maps/e1m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (292480 / 28)')})"), +E + 'pak2/maps/e1m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (284672 / 28)')})"), +E + 'pak2/maps/e1m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (191168 / 28)')})"), +E + 'pak2/maps/e1m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (327328 / 28)')})"), +E + 'pak2/maps/e1m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (221184 / 28)')})"), +E + 'pak2/maps/e1m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (190368 / 28)')})"), +E + 'pak2/maps/e1m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (163008 / 28)')})"), +E + 'pak2/maps/e1m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (201952 / 28)')})"), +E + 'pak2/maps/e1m5b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263584 / 28)')})"), +E + 'pak2/maps/e1m6b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (181728 / 28)')})"), +E + 'pak2/maps/e2ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (121472 / 28)')})"), +E + 'pak2/maps/e2dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (65120 / 28)')})"), +E + 'pak2/maps/e2dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (55392 / 28)')})"), +E + 'pak2/maps/e2m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (202304 / 28)')})"), +E + 'pak2/maps/e2m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (167744 / 28)')})"), +E + 'pak2/maps/e2m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (228224 / 28)')})"), +E + 'pak2/maps/e2m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (144160 / 28)')})"), +E + 'pak2/maps/e2m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (235168 / 28)')})"), +E + 'pak2/maps/e2m2c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (135136 / 28)')})"), +E + 'pak2/maps/e2m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (126912 / 28)')})"), +E + 'pak2/maps/e2m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (118464 / 28)')})"), +E + 'pak2/maps/e2m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (168064 / 28)')})"), +E + 'pak2/maps/e2m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (191776 / 28)')})"), +E + 'pak2/maps/e2m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (213568 / 28)')})"), +E + 'pak2/maps/e2m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (209408 / 28)')})"), +E + 'pak2/maps/e2m4d.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (271808 / 28)')})"), +E + 'pak2/maps/e2m4e.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (228096 / 28)')})"), +E + 'pak2/maps/e2m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (250016 / 28)')})"), +E + 'pak2/maps/e2m5b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (171840 / 28)')})"), +E + 'pak2/maps/e2m5c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (198976 / 28)')})"), +E + 'pak2/maps/e2m5d.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (125312 / 28)')})"), +E + 'pak2/maps/e2m5e.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (58560 / 28)')})"), +E + 'pak2/maps/e3ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (225536 / 28)')})"), +E + 'pak2/maps/e3dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (78592 / 28)')})"), +E + 'pak2/maps/e3dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (60736 / 28)')})"), +E + 'pak2/maps/e3m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (278528 / 28)')})"), +E + 'pak2/maps/e3m1b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (227424 / 28)')})"), +E + 'pak2/maps/e3m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (256960 / 28)')})"), +E + 'pak2/maps/e3m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (291840 / 28)')})"), +E + 'pak2/maps/e3m3a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (198816 / 28)')})"), +E + 'pak2/maps/e3m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (263712 / 28)')})"), +E + 'pak2/maps/e3m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (282592 / 28)')})"), +E + 'pak2/maps/e3m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (184704 / 28)')})"), +E + 'pak2/maps/e3m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (272224 / 28)')})"), +E + 'pak2/maps/e3m6a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (177984 / 28)')})"), +E + 'pak2/maps/e4ctf1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (80320 / 28)')})"), +E + 'pak2/maps/e4dm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (68224 / 28)')})"), +E + 'pak2/maps/e4dm2.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (77344 / 28)')})"), +E + 'pak2/maps/e4m1a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (341408 / 28)')})"), +E + 'pak2/maps/e4m1c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (313472 / 28)')})"), +E + 'pak2/maps/e4m2a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (306816 / 28)')})"), +E + 'pak2/maps/e4m2b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (184224 / 28)')})"), +E + 'pak2/maps/e4m3b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (274656 / 28)')})"), +E + 'pak2/maps/e4m3c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (212288 / 28)')})"), +E + 'pak2/maps/e4m4a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (153856 / 28)')})"), +E + 'pak2/maps/e4m4b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (308960 / 28)')})"), +E + 'pak2/maps/e4m4c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (296640 / 28)')})"), +E + 'pak2/maps/e4m5a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (422304 / 28)')})"), +E + 'pak2/maps/e4m6a.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (240896 / 28)')})"), +E + 'pak2/maps/e4m6b.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (149312 / 28)')})"), +E + 'pak2/maps/e4m6c.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (174528 / 28)')})"), +E + 'pak2/maps/end.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (140256 / 28)')})"), +E + 'pak2/maps/intro.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (309984 / 28)')})"), +E + 'pak2/maps/slicedm1.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (27968 / 28)')})"), +E + 'pak2/maps/timestream23.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (3872 / 28)')})"), +E + 'pak2/maps/timestream34.bsp': AssertionError("LEAVES\nassert 1 == 0\n + where 1 = len({'LEAVES': RuntimeError('LumpClass does not divide lump evenly! (3872 / 28)')})"), +E } + +tests\test_load_bsp.py:114: AssertionError +________________ test_load_bsp[E:/Mod-DDayNormandy-map_dirs82] ________________ group_path = 'E:/Mod', game_name = 'DDayNormandy' map_dirs = ['D-Day_ Normandy/dday/maps', 'DDaynormandymaps-mappack/dday/maps'] @@ -527,7 +1114,7 @@ map_dirs = ['D-Day_ Normandy/dday/maps', 'DDaynormandymaps-mappack/dday/maps'] E } tests\test_load_bsp.py:114: AssertionError -_________ test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs111] __________ +_________ test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs113] __________ group_path = 'E:/Mod', game_name = 'DarkMessiah/singleplayer' map_dirs = ['maps'] @@ -679,7 +1266,7 @@ map_dirs = ['maps'] E } tests\test_load_bsp.py:114: AssertionError -__________ test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs112] __________ +__________ test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs114] __________ group_path = 'E:/Mod', game_name = 'DarkMessiah/multiplayer' map_dirs = ['maps'] @@ -787,7 +1374,7 @@ map_dirs = ['maps'] E } tests\test_load_bsp.py:114: AssertionError -_________________ test_load_bsp[E:/Mod-Vindictus-map_dirs122] _________________ +_________________ test_load_bsp[E:/Mod-Vindictus-map_dirs124] _________________ group_path = 'E:/Mod', game_name = 'Vindictus' map_dirs = ['hfs/2022/maps', 'Colhen_Mod_BSP (Private Server Version)'] @@ -1475,7 +2062,7 @@ map_dirs = ['hfs/2022/maps', 'Colhen_Mod_BSP (Private Server Version)'] E } tests\test_load_bsp.py:114: AssertionError -______________ test_load_bsp[E:/Mod/X360-Left4Dead-map_dirs157] _______________ +______________ test_load_bsp[E:/Mod/X360-Left4Dead-map_dirs159] _______________ group_path = 'E:/Mod/X360', game_name = 'Left4Dead' map_dirs = ['left4dead/maps'] @@ -1647,7 +2234,7 @@ map_dirs = ['left4dead/maps'] E } tests\test_load_bsp.py:114: AssertionError -_______________ test_load_bsp[E:/Mod/X360-Portal2-map_dirs160] ________________ +_______________ test_load_bsp[E:/Mod/X360-Portal2-map_dirs162] ________________ group_path = 'E:/Mod/X360', game_name = 'Portal2', map_dirs = ['portal2/maps'] @@ -1945,65 +2532,12 @@ group_path = 'E:/Mod/X360', game_name = 'Portal2', map_dirs = ['portal2/maps'] ============================== warnings summary =============================== tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Momentum Mod Playtest-map_dirs61] tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Team Fortress 2-map_dirs69] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/Bocuma747_SurfMaps-map_dirs108] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/OiuSURF_SurfMaps-map_dirs109] -tests/test_load_bsp.py::test_load_bsp[E:/Mod-MomentumMod-map_dirs117] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/Bocuma747_SurfMaps-map_dirs110] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-CSS/OiuSURF_SurfMaps-map_dirs111] +tests/test_load_bsp.py::test_load_bsp[E:/Mod-MomentumMod-map_dirs119] C:\Users\Jared\Documents\GitHub\bsp_tool\bsp_tool\lumps.py:400: UserWarning: compressed empty sprp game lump warnings.warn(UserWarning(f"compressed empty {child_name} game lump")) -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.id_software.quake] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:100: UserWarning: Unused LumpClasses in branch script: - MipTexture - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty1_demo] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:100: UserWarning: Unused LumpClasses in branch script: - Model - Cell - AxisAlignedBoundingBox - Occluder - PatchCollision - Brush - CullGroup - Vertex - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_basic_branch_script[bsp_tool.branches.infinity_ward.call_of_duty2] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:100: UserWarning: Unused LumpClasses in branch script: - CollisionEdge - CollisionTriangle - Model - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.arkane.dark_messiah_sp] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:137: UserWarning: Unused LumpClasses in branch script: - TextureInfo - Model - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.apex_legends] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:137: UserWarning: Unused LumpClasses in branch script: - LevelInfo - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.titanfall] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:137: UserWarning: Unused LumpClasses in branch script: - Grid - LevelInfo - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.respawn.titanfall_x360] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:137: UserWarning: Unused LumpClasses in branch script: - LevelInfo_x360 - Grid_x360 - warnings.warn(UserWarning(warning_text)) - -tests/branches/test_branch_scripts.py::test_branch_script[bsp_tool.branches.valve.source] - C:\Users\Jared\Documents\GitHub\bsp_tool\tests\branches\test_branch_scripts.py:137: UserWarning: Unused LumpClasses in branch script: - SubNeighbour - CornerNeighbour - warnings.warn(UserWarning(warning_text)) - -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ---------- coverage: platform win32, python 3.10.0-final-0 ----------- @@ -2011,34 +2545,35 @@ Name Stmts Miss Cover ----------------------------------------------------------------------------- bsp_tool\__init__.py 53 3 94% bsp_tool\base.py 85 27 68% -bsp_tool\branches\__init__.py 35 0 100% +bsp_tool\branches\__init__.py 40 0 100% bsp_tool\branches\ace_team\__init__.py 2 0 100% bsp_tool\branches\ace_team\zeno_clash.py 79 0 100% bsp_tool\branches\arkane\__init__.py 3 0 100% bsp_tool\branches\arkane\dark_messiah_mp.py 16 0 100% -bsp_tool\branches\arkane\dark_messiah_sp.py 48 0 100% -bsp_tool\branches\base.py 423 43 90% +bsp_tool\branches\arkane\dark_messiah_sp.py 51 0 100% +bsp_tool\branches\base.py 431 37 91% bsp_tool\branches\gearbox\__init__.py 3 0 100% bsp_tool\branches\gearbox\blue_shift.py 28 0 100% bsp_tool\branches\gearbox\nightfire.py 90 0 100% -bsp_tool\branches\id_software\__init__.py 7 0 100% +bsp_tool\branches\id_software\__init__.py 8 0 100% bsp_tool\branches\id_software\qfusion.py 114 6 95% -bsp_tool\branches\id_software\quake2.py 197 27 86% +bsp_tool\branches\id_software\quake2.py 201 0 100% bsp_tool\branches\id_software\quake3.py 237 23 90% -bsp_tool\branches\id_software\quake.py 298 54 82% +bsp_tool\branches\id_software\quake64.py 44 0 100% +bsp_tool\branches\id_software\quake.py 299 53 82% bsp_tool\branches\id_software\remake_quake.py 20 0 100% bsp_tool\branches\id_software\remake_quake_old.py 25 0 100% bsp_tool\branches\infinity_ward\__init__.py 5 0 100% bsp_tool\branches\infinity_ward\call_of_duty1.py 46 0 100% -bsp_tool\branches\infinity_ward\call_of_duty1_demo.py 166 6 96% -bsp_tool\branches\infinity_ward\call_of_duty2.py 134 1 99% +bsp_tool\branches\infinity_ward\call_of_duty1_demo.py 168 6 96% +bsp_tool\branches\infinity_ward\call_of_duty2.py 139 1 99% bsp_tool\branches\infinity_ward\modern_warfare.py 63 0 100% bsp_tool\branches\ion_storm\__init__.py 2 0 100% bsp_tool\branches\ion_storm\daikatana.py 13 0 100% bsp_tool\branches\loiste\__init__.py 2 0 100% bsp_tool\branches\loiste\infra.py 80 0 100% bsp_tool\branches\nexon\__init__.py 5 0 100% -bsp_tool\branches\nexon\cso2.py 109 6 94% +bsp_tool\branches\nexon\cso2.py 98 0 100% bsp_tool\branches\nexon\cso2_2018.py 18 0 100% bsp_tool\branches\nexon\vindictus69.py 261 4 98% bsp_tool\branches\nexon\vindictus.py 82 0 100% @@ -2050,10 +2585,10 @@ bsp_tool\branches\raven\soldier_of_fortune2.py 32 0 100% bsp_tool\branches\raven\soldier_of_fortune.py 14 0 100% bsp_tool\branches\respawn\__init__.py 6 0 100% bsp_tool\branches\respawn\apex_legends13.py 154 0 100% -bsp_tool\branches\respawn\apex_legends.py 349 41 88% +bsp_tool\branches\respawn\apex_legends.py 376 55 85% bsp_tool\branches\respawn\titanfall2.py 248 1 99% -bsp_tool\branches\respawn\titanfall.py 799 138 83% -bsp_tool\branches\respawn\titanfall_x360.py 27 0 100% +bsp_tool\branches\respawn\titanfall.py 800 132 84% +bsp_tool\branches\respawn\titanfall_x360.py 31 0 100% bsp_tool\branches\ritual\__init__.py 8 0 100% bsp_tool\branches\ritual\fakk2.py 60 0 100% bsp_tool\branches\ritual\mohaa.py 42 0 100% @@ -2062,25 +2597,25 @@ bsp_tool\branches\ritual\mohaa_demo.py 89 0 100% bsp_tool\branches\ritual\sin.py 14 0 100% bsp_tool\branches\ritual\star_trek_elite_force2.py 43 0 100% bsp_tool\branches\ritual\star_trek_elite_force2_demo.py 77 0 100% -bsp_tool\branches\shared.py 104 13 88% +bsp_tool\branches\shared.py 78 8 90% bsp_tool\branches\strata\__init__.py 2 0 100% bsp_tool\branches\strata\strata.py 238 0 100% bsp_tool\branches\troika\__init__.py 2 0 100% -bsp_tool\branches\troika\vampire.py 37 0 100% +bsp_tool\branches\troika\vampire.py 36 0 100% bsp_tool\branches\utoplanet\__init__.py 2 0 100% bsp_tool\branches\utoplanet\merubasu.py 106 0 100% -bsp_tool\branches\valve\__init__.py 11 0 100% +bsp_tool\branches\valve\__init__.py 13 0 100% bsp_tool\branches\valve\alien_swarm.py 81 0 100% bsp_tool\branches\valve\goldsrc.py 88 3 97% bsp_tool\branches\valve\left4dead2.py 109 0 100% bsp_tool\branches\valve\left4dead.py 106 0 100% bsp_tool\branches\valve\orange_box.py 122 0 100% bsp_tool\branches\valve\orange_box_x360.py 85 0 100% +bsp_tool\branches\valve\physics.py 179 74 59% bsp_tool\branches\valve\sdk_2013.py 132 0 100% bsp_tool\branches\valve\sdk_2013_x360.py 36 0 100% -bsp_tool\branches\valve\source.py 751 48 94% +bsp_tool\branches\valve\source.py 786 48 94% bsp_tool\branches\valve\source_filmmaker.py 80 0 100% -bsp_tool\branches\valve_physics.py 179 50 72% bsp_tool\branches\vector.py 193 103 47% bsp_tool\branches\x360.py 21 0 100% bsp_tool\extensions\__init__.py 0 0 100% @@ -2097,28 +2632,33 @@ bsp_tool\extensions\archives\valve.py 4 4 0% bsp_tool\extensions\compiler_signature.py 41 5 88% bsp_tool\extensions\convert\__init__.py 0 0 100% bsp_tool\extensions\convert\respawn.py 44 44 0% -bsp_tool\extensions\decompile_rbsp.py 102 102 0% +bsp_tool\extensions\decompile_rbsp.py 103 103 0% bsp_tool\extensions\decrypt_xor.py 11 11 0% -bsp_tool\extensions\diff.py 113 113 0% +bsp_tool\extensions\diff\__init__.py 79 39 51% +bsp_tool\extensions\diff\base.py 33 0 100% +bsp_tool\extensions\diff\core.py 15 1 93% +bsp_tool\extensions\diff\shared.py 47 16 66% +bsp_tool\extensions\diff\valve\source.py 48 5 90% bsp_tool\extensions\lightmaps.py 235 235 0% bsp_tool\extensions\mprt.py 15 15 0% bsp_tool\extensions\to_cpp.py 24 24 0% -bsp_tool\id_software.py 78 2 97% +bsp_tool\id_software.py 80 2 98% bsp_tool\infinity_ward.py 52 7 87% -bsp_tool\lumps.py 361 57 84% +bsp_tool\lumps.py 361 55 85% bsp_tool\raven.py 3 0 100% bsp_tool\respawn.py 229 68 70% bsp_tool\ritual.py 22 0 100% -bsp_tool\valve.py 142 44 69% +bsp_tool\valve.py 142 9 94% ----------------------------------------------------------------------------- -TOTAL 9078 1587 83% +TOTAL 9294 1486 84% =========================== short test summary info =========================== -FAILED tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Jabroni Brawl Episode 3-map_dirs57] - AssertionError: 1 out of 133 .bsps failed -FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-DDayNormandy-map_dirs81] - AssertionError: 2 out of 719 .bsps failed -FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs111] - AssertionError: 33 out of 35 .bsps failed -FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs112] - AssertionError: 11 out of 11 .bsps failed -FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs122] - AssertionError: 301 out of 475 .bsps failed -FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Left4Dead-map_dirs157] - AssertionError: 43 out of 44 .bsps failed -FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Portal2-map_dirs160] - AssertionError: 105 out of 105 .bsps failed -===== 7 failed, 321 passed, 16 xfailed, 13 warnings in 4334.29s (1:12:14) ===== +FAILED tests/test_load_bsp.py::test_load_bsp[D:/SteamLibrary/steamapps/common-Jabroni Brawl Episode 3-map_dirs57] - AssertionError: 10 out of 139 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-Daikatana-map_dirs81] - AssertionError: 74 out of 83 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-DDayNormandy-map_dirs82] - AssertionError: 2 out of 719 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/singleplayer-map_dirs113] - AssertionError: 33 out of 35 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-DarkMessiah/multiplayer-map_dirs114] - AssertionError: 11 out of 11 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod-Vindictus-map_dirs124] - AssertionError: 301 out of 475 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Left4Dead-map_dirs159] - AssertionError: 43 out of 44 .bsps failed +FAILED tests/test_load_bsp.py::test_load_bsp[E:/Mod/X360-Portal2-map_dirs162] - AssertionError: 105 out of 105 .bsps failed +===== 8 failed, 653 passed, 17 xfailed, 5 warnings in 4224.61s (1:10:24) ======