Esempio n. 1
0
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)