import os import sys import tempfile import unittest import wasmcheck class FailureLinesTests(unittest.TestCase): def test_ReportsAFailedCheckWithItsDetailLines(self): output = "probe: browser-wasm\nPASS one\nFAIL two\n System.X: broken\n at Y\nPASS three\nALL PASSED" self.assertEqual(["FAIL two", " System.X: broken", " at Y"], wasmcheck.failure_lines(output)) def test_ReportsARuntimeError(self): self.assertEqual(["RUNTIME ERROR: boom"], wasmcheck.failure_lines("RUNTIME ERROR: boom")) def test_HasNothingToReportWhenEveryCheckPassed(self): self.assertEqual([], wasmcheck.failure_lines("probe: browser-wasm\nconverters: True\nPASS one\nALL PASSED")) class RunSucceededTests(unittest.TestCase): def test_NeedsACleanExitAndTheFinalLine(self): self.assertTrue(wasmcheck.run_succeeded(0, "PASS one\nALL PASSED\n")) def test_FailsOnANonZeroExit(self): self.assertFalse(wasmcheck.run_succeeded(2, "PASS one\nALL PASSED\n")) def test_FailsWhenTheFinalLineIsMissing(self): self.assertFalse(wasmcheck.run_succeeded(0, "PASS one\n")) def test_FailsWhenOnlyAFailureCountIsReported(self): self.assertFalse(wasmcheck.run_succeeded(0, "FAIL one\n1 FAILED\n")) class RunProbeTests(unittest.TestCase): def test_ReturnsTheRunnersExitCodeAndOutput(self): # Any executable that ignores the probe's script argument will do, so use this interpreter on a stub script. with tempfile.TemporaryDirectory() as directory: stub = os.path.join(directory, "run-wasm.mjs") with open(stub, "w") as file: file.write("print('ALL PASSED')\n") original = wasmcheck.PROBE_DIRECTORY wasmcheck.PROBE_DIRECTORY = directory try: exit_code, output = wasmcheck.run_probe(sys.executable, directory) finally: wasmcheck.PROBE_DIRECTORY = original self.assertEqual(0, exit_code) self.assertEqual("ALL PASSED", output.strip()) if __name__ == "__main__": unittest.main()