diff --git a/energyplus_regressions/tests/test_energyplus.py b/energyplus_regressions/tests/test_energyplus.py index 43dd2ae..93052e6 100644 --- a/energyplus_regressions/tests/test_energyplus.py +++ b/energyplus_regressions/tests/test_energyplus.py @@ -13,17 +13,28 @@ class TestEnergyPlus(unittest.TestCase): def setUp(self): cur_dir_path = Path(__file__).resolve().parent self.resource_dir = cur_dir_path / 'resources' + dist_dir = self.resource_dir / 'dist' + use_windows_binaries = sys.platform.startswith('win') self.build_tree = BuildTree() - self.build_tree.energyplus = self.resource_dir / 'dummy.energyplus.py' - self.build_tree.basement = self.resource_dir / 'dummy.basement.py' self.build_tree.idd_path = self.resource_dir / 'dummy.Energy+.idd' - self.build_tree.slab = self.resource_dir / 'dummy.slab.py' self.build_tree.basementidd = self.resource_dir / 'dummy.basement.idd' self.build_tree.slabidd = self.resource_dir / 'dummy.slab.py' - self.build_tree.expandobjects = self.resource_dir / 'dummy.expandobjects.py' - self.build_tree.epmacro = self.resource_dir / 'dummy.epmacro.py' - self.build_tree.readvars = self.resource_dir / 'dummy.readvars.py' - self.build_tree.parametric = self.resource_dir / 'dummy.parametric.py' + # GH Actions on Windows can execute the packaged dummy exes reliably, while direct shell + # execution of the .py helpers is flaky for the macro/parametric preprocessors. + self.build_tree.energyplus = dist_dir / 'energyplus.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.energyplus.py' + self.build_tree.basement = dist_dir / 'basement.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.basement.py' + self.build_tree.slab = dist_dir / 'slab.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.slab.py' + self.build_tree.expandobjects = dist_dir / 'expandobjects.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.expandobjects.py' + self.build_tree.epmacro = dist_dir / 'epmacro.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.epmacro.py' + self.build_tree.readvars = dist_dir / 'readvars.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.readvars.py' + self.build_tree.parametric = dist_dir / 'parametric.exe' if use_windows_binaries \ + else self.resource_dir / 'dummy.parametric.py' self.build_tree.build_dir = Path('/dummy/') self.run_dir = Path(tempfile.mkdtemp()) @@ -118,7 +129,6 @@ def test_eplus_passed_hvac_template(self): self.assertTrue(return_val[2]) self.assertFalse(return_val[3]) - @unittest.skipIf(sys.platform.startswith('win'), "GH Actions is having trouble executing dummy.epmacro") def test_eplus_passed_macro(self): with (self.run_dir / 'in.imf').open('w') as f: f.write('##fileprefix line\n') @@ -138,7 +148,6 @@ def test_eplus_passed_macro(self): self.assertTrue(return_val[2]) self.assertFalse(return_val[3]) - @unittest.skipIf(sys.platform.startswith('win'), "GH Actions is having trouble executing dummy.parametric") def test_eplus_passed_parametric(self): with (self.run_dir / 'in.idf').open('w') as f: f.write('PARAMETRIC:') diff --git a/energyplus_regressions/tests/test_runtests.py b/energyplus_regressions/tests/test_runtests.py index ea1f633..a958b53 100644 --- a/energyplus_regressions/tests/test_runtests.py +++ b/energyplus_regressions/tests/test_runtests.py @@ -36,37 +36,28 @@ def establish_build_folder( products_dir.mkdir() macro_dir = target_source_dir / 'bin' / 'EPMacro' / 'Linux' macro_dir.mkdir(parents=True) - if system() == 'Windows': # pragma: no cover -- not running coverage results on Travis on Windows - # if we are on Windows, we need to prepackage up the python scripts as exe files for them to run - # properly across interpreters. Its easy enough to do with pyinstaller, just need to set up a couple - # variables and run them all. Also, we don't want to run them for every single test, just once if the dist/ - # folder hasn't been created yet. - dist_folder = self.resources / 'dist' - products_map = { - self.resources / 'dummy.basement.idd': products_dir / 'BasementGHT.idd', - dist_folder / 'basement.exe': products_dir / 'Basement.exe', - self.resources / 'dummy.Energy+.idd': products_dir / 'Energy+.idd', - dist_folder / 'energyplus.exe': products_dir / 'energyplus.exe', - dist_folder / 'expandobjects.exe': products_dir / 'ExpandObjects.exe', - dist_folder / 'parametric.exe': products_dir / 'ParametricPreprocessor.exe', - dist_folder / 'readvars.exe': products_dir / 'ReadVarsESO.exe', - dist_folder / 'slab.exe': products_dir / 'Slab.exe', - self.resources / 'dummy.slab.idd': products_dir / 'SlabGHT.idd', - dist_folder / 'epmacro.exe': macro_dir / 'EPMacro.exe', - } - else: - products_map = { - self.resources / 'dummy.basement.idd': products_dir / 'BasementGHT.idd', - self.resources / 'dummy.basement.py': products_dir / 'Basement', - self.resources / 'dummy.Energy+.idd': products_dir / 'Energy+.idd', - self.resources / 'dummy.energyplus.py': products_dir / 'energyplus', - self.resources / 'dummy.expandobjects.py': products_dir / 'ExpandObjects', - self.resources / 'dummy.parametric.py': products_dir / 'ParametricPreprocessor', - self.resources / 'dummy.readvars.py': products_dir / 'ReadVarsESO', - self.resources / 'dummy.slab.py': products_dir / 'Slab', - self.resources / 'dummy.slab.idd': products_dir / 'SlabGHT.idd', - self.resources / 'dummy.epmacro.py': macro_dir / 'EPMacro', - } + use_windows_binaries = system() == 'Windows' + dist_folder = self.resources / 'dist' + products_map = { + self.resources / 'dummy.basement.idd': products_dir / 'BasementGHT.idd', + (dist_folder / 'basement.exe') if use_windows_binaries else (self.resources / 'dummy.basement.py'): + products_dir / ('Basement.exe' if use_windows_binaries else 'Basement'), + self.resources / 'dummy.Energy+.idd': products_dir / 'Energy+.idd', + (dist_folder / 'energyplus.exe') if use_windows_binaries else (self.resources / 'dummy.energyplus.py'): + products_dir / ('energyplus.exe' if use_windows_binaries else 'energyplus'), + (dist_folder / 'expandobjects.exe') if use_windows_binaries + else (self.resources / 'dummy.expandobjects.py'): + products_dir / ('ExpandObjects.exe' if use_windows_binaries else 'ExpandObjects'), + (dist_folder / 'parametric.exe') if use_windows_binaries else (self.resources / 'dummy.parametric.py'): + products_dir / ('ParametricPreprocessor.exe' if use_windows_binaries else 'ParametricPreprocessor'), + (dist_folder / 'readvars.exe') if use_windows_binaries else (self.resources / 'dummy.readvars.py'): + products_dir / ('ReadVarsESO.exe' if use_windows_binaries else 'ReadVarsESO'), + (dist_folder / 'slab.exe') if use_windows_binaries else (self.resources / 'dummy.slab.py'): + products_dir / ('Slab.exe' if use_windows_binaries else 'Slab'), + self.resources / 'dummy.slab.idd': products_dir / 'SlabGHT.idd', + (dist_folder / 'epmacro.exe') if use_windows_binaries else (self.resources / 'dummy.epmacro.py'): + macro_dir / ('EPMacro.exe' if use_windows_binaries else 'EPMacro'), + } for source in products_map: shutil.copy(source, products_map[source]) testfiles_dir = target_source_dir / 'testfiles' @@ -1045,11 +1036,7 @@ def test_base_case_but_multi_process(self): diff_results = r.run_test_suite() # there should be 1 file result self.assertEqual(2, len(diff_results.entries_by_file)) - # these next blocks are pragma -ed from coverage because we don't know which one will get hit - if diff_results.entries_by_file[0].basename == 'my_file': # pragma: no cover - results_for_file = diff_results.entries_by_file[0] - else: # if diff_results.entries_by_file[1].basename == 'my_file': # pragma: no cover - results_for_file = diff_results.entries_by_file[1] + results_for_file = next(entry for entry in diff_results.entries_by_file if entry.basename == 'my_file') # it should be named according to what we listed above self.assertEqual('my_file', results_for_file.basename) # it should have succeeded in both base and mod cases