import contextlib import io import tempfile import unittest from pathlib import Path from compare import compare, read_capture def capture(version=58, value=0): return ("schema,1\nrounds,64\nobservations,1\nios_version,%d\nios_revision,6176\n" "seq,test,round,value,extra\n0,open_fs_mode0,0,%d,0\n" % (version, value)) class CompareTest(unittest.TestCase): def test_identical_and_first_difference(self): with tempfile.TemporaryDirectory() as directory: wii = Path(directory) / "wii.csv" dolphin = Path(directory) / "dolphin.csv" wii.write_text(capture(), encoding="utf-8") dolphin.write_text(capture(), encoding="utf-8") with contextlib.redirect_stdout(io.StringIO()): self.assertEqual(compare(read_capture(wii), read_capture(dolphin)), 0) dolphin.write_text(capture(value=-6), encoding="utf-8") output = io.StringIO() with contextlib.redirect_stdout(output): self.assertEqual(compare(read_capture(wii), read_capture(dolphin)), 1) self.assertIn("#0", output.getvalue()) def test_wrong_ios_version_is_incomparable(self): with tempfile.TemporaryDirectory() as directory: wii = Path(directory) / "wii.csv" dolphin = Path(directory) / "dolphin.csv" wii.write_text(capture(), encoding="utf-8") dolphin.write_text(capture(version=80), encoding="utf-8") with contextlib.redirect_stdout(io.StringIO()): self.assertEqual(compare(read_capture(wii), read_capture(dolphin)), 2) def test_truncated_capture_is_rejected(self): with tempfile.TemporaryDirectory() as directory: path = Path(directory) / "short.csv" path.write_text(capture().replace("observations,1", "observations,2"), encoding="utf-8") with self.assertRaises(ValueError): read_capture(path) if __name__ == "__main__": unittest.main()