def test_imcpack(tmpdir, capsys): """imcpack -d tmpdir/actual_output tmpdir/pack*""" datapkg = f"{testdatapkg_parent}.pack" contents2tmpdir = make_contents2destdir(datapkg, tmpdir) # 1. prepare data files & paths contents2tmpdir(recursive=True) input_wildcard_arg = tmpdir.join("pack*") output_dir_arg = tmpdir.join("actual_output") # 2. run the actual imcunpack command args = f'-v -d "{output_dir_arg!s}" "{input_wildcard_arg}"' run_imcpack(shlex_split(args)) # 3. check verbose stdout stdout_line1, stdout_rest = capsys.readouterr().out.split(sep="\n", maxsplit=1) assert stdout_line1.startswith("packing ") assert ( stdout_rest == """\ 'Piano' -> 'BrassLeft' -> 'BrassRight' -> 'BrassLPianoR' -> """ ) # 4. prepare paths for file comparison actual_output_path = tmpdir.join("actual_output", "pack.IMC") expected_ouput_path = tmpdir.join("expected_output.IMC") # 5. check that the expected and actual output files are identical assert filecmp.cmp(actual_output_path, expected_ouput_path, shallow=False)
def test_xgmunpack(tmpdir, capsys): """xgmunpack -d tmpdir/actual_output *.XGM""" datapkg = f"{testdatapkg_parent}.unpack" contents2tmpdir = make_contents2destdir(datapkg, tmpdir) # 1. prepare data files & paths contents2tmpdir(recursive=True) input_wildcard_arg = tmpdir.join("*.XGM") output_dir_arg = tmpdir.join("actual_output") # 2. run the actual xgmunpack command args = f'-v -d "{output_dir_arg!s}" "{input_wildcard_arg}"' run_xgmunpack(shlex_split(args)) # 3. check verbose stdout stdout_line1, stdout_rest = capsys.readouterr().out.split(sep="\n", maxsplit=1) assert stdout_line1.startswith("unpacking ") assert ( stdout_rest == """\ -> 'A.IMX' -> 'B.IMX' -> 'C.XG' -> 'D.XG' -> 'E.XG' """ ) # 4. prepare paths for file & dir comparison actual_output_dir = tmpdir.join("actual_output", "unpack_XGM") expected_ouput_dir = tmpdir.join("expected_output") toml_actual_output_path = actual_output_dir.join("unpack.XGM.toml") toml_expected_output_path = expected_ouput_dir.join("unpack.XGM.toml") # 5. check that the expected and actual output files are identical cmpdirs = filecmp.dircmp( actual_output_dir, expected_ouput_dir, ignore=["unpack.XGM.toml"] ) match, mismatch, errors = filecmp.cmpfiles( actual_output_dir, expected_ouput_dir, cmpdirs.common, shallow=False ) assert not mismatch assert not errors # In the case of toml files, compares just values, not comments and such toml_actual_output = tomlkit.parse(read_text(toml_actual_output_path)) toml_expected_output = tomlkit.parse(read_text(toml_expected_output_path)) # before comparing, remove the guide/help section if it exists toml_actual_output.pop("Item Help/Guide", None) toml_expected_output.pop("Item Help/Guide", None) assert toml_actual_output == toml_expected_output
def test_imx2png(tmpdir, capsys): """imx2png -v -d tmpdir/actual_output *.IMX""" datapkg = f"{testdatapkg_parent}.imx2png" contents2tmpdir = make_contents2destdir(datapkg, tmpdir) # 1. prepare data files & paths contents2tmpdir(recursive=True) input_wildcard_arg = tmpdir.join("*.IMX") output_dir_arg = tmpdir.join("actual_output") # 2. run the actual imx2png command args = f'-v -d "{output_dir_arg}" "{input_wildcard_arg}"' run_imx2png(shlex_split(args)) # 3. check verbose stdout # note: checking stdout for filenames has little use since later the output files # are later checked against expected output filenames. May as well delete this stdout_lines = [ line for line in capsys.readouterr().out.split("\n") if line ] stdout_filenames = [ os.path.basename(shlex_split(line)[3]) for line in stdout_lines ] assert set(stdout_filenames) == { "cc0_alpha_i4.i4.png", "cc0_alpha_i8.i8.png", "cc0_alpha_rgba32.rgba32.png", "cc0_opaque_i4.i4.png", "cc0_opaque_i8.i8.png", "cc0_opaque_rgb24.rgb24.png", "cc0_opaque_rgba32.rgba32.png", } # 4. prepare paths for file & dir comparison actual_output_dir = output_dir_arg expected_output_dir = tmpdir.join("expected_output") actual_pngs = glob(str(actual_output_dir.join("*.png"))) expected_pngs = glob(str(expected_output_dir.join("*.png"))) # 5. Compare actual output PNGs to expected output PNGs assert len(actual_pngs) == len(expected_pngs) for actualpng, expectedpng in zip(sorted(actual_pngs), sorted(expected_pngs)): assert os.path.basename(actualpng) == os.path.basename(expectedpng) assert images_identical(actualpng, expectedpng)
def test_png2imx_opaque(tmpdir, capsys): """png2imx -v -d tmpdir/actual_output cc0_opaque.*.png""" datapkg = f"{testdatapkg_parent}.png2imx" contents2tmpdir = make_contents2destdir(datapkg, tmpdir) # 1. prepare data files & paths contents2tmpdir(recursive=True) input_wildcard_arg = tmpdir.join("cc0_opaque.*.png") output_dir_arg = tmpdir.join("actual_output_opaque") # 2. run the actual imx2png command args = f'-v -d "{output_dir_arg}" "{input_wildcard_arg}"' run_png2imx(shlex_split(args)) # 3. check verbose stdout stdout_lines = [ line for line in capsys.readouterr().out.split("\n") if line ] stdout_filenames = [ os.path.basename(shlex_split(line)[3]) for line in stdout_lines ] assert set(stdout_filenames) == { "cc0_opaque.i4.IMX", "cc0_opaque.i8.IMX", "cc0_opaque.rgb24.IMX", "cc0_opaque.rgba32.IMX", "cc0_opaque.auto_i4.IMX", "cc0_opaque.auto_i8.IMX", "cc0_opaque.auto_rgb24.IMX", } # 4. prepare paths for file & dir comparison actual_output_dir = output_dir_arg expected_output_dir = tmpdir.join("expected_output_opaque") actual_imxs = glob(str(actual_output_dir.join("*.IMX"))) expected_imxs = glob(str(expected_output_dir.join("*.IMX"))) # 5. Compare actual output IMXs to expected output IMXs assert len(actual_imxs) == len(expected_imxs) for actualimx, expectedimx in zip(sorted(actual_imxs), sorted(expected_imxs)): assert os.path.basename(actualimx) == os.path.basename(expectedimx) assert imx_images_identical(actualimx, expectedimx)