Esempio n. 1
0
def test_simple_addqres(config, test_resources):
    runner = CliRunner()

    # Generate a qrc file named res and update config file
    runner.invoke(pyqtcli, ["new", "qrc"])

    # Test addqres with default option
    result = runner.invoke(pyqtcli, ["addqres", "res.qrc", "resources"])
    assert result.exit_code == 0

    # Parse qrc file
    qrcfile = read_qrc("res.qrc")

    # Check qresource has been added
    qrcfile.get_qresource("/resources")

    # Check file subelements in qresource
    resources = qrcfile.list_resources("/resources")

    for root, dirs, files in os.walk("resources"):
        for f in files:
            assert os.path.join(root, f) in resources

    assert len(resources) == test_resources

    # Check res_folder has been added to dirs variable of config file
    config.read()
    config.get_dirs("res.qrc") == ["resources"]
Esempio n. 2
0
def test_simple_rmqres(config, test_resources):
    runner = CliRunner()

    # Generate a qrc file named res and update config file
    runner.invoke(pyqtcli, ["new", "qrc"])

    # Add resources folder config file and qrc
    runner.invoke(pyqtcli, ["addqres", "res.qrc", "resources"])

    # Remove resources folder config file and qrc
    result = runner.invoke(pyqtcli, ["rmqres", "res.qrc", "resources", "-v"])

    # Parse qrc file
    qrcfile = read_qrc("res.qrc")

    # Check qresource has been deleted
    with pytest.raises(QresourceError) as e:
        qrcfile.get_qresource("/resources")
    assert format_msg(str(e.value)) == (
        "Error: No <qresource> node corresponding to '/resources' prefix"
    )

    # Check res_folder has been removed from dirs variable of config file
    config.read()
    assert config.get_dirs("res.qrc") == []

    assert format_msg(result.output) == v.info(
        "Resources folder: \'resources\' has been removed in res.qrc.\n"
    )
Esempio n. 3
0
def addqres(config, qrc_path, res_folders, alias, verbose):
    """
    Add <qresource> element with a prefix attribute set to the base name of
    the given folder of resources. All resources contained in this folder are
    recorded in qresource as <file> subelement.

    Args:
        config (:class:`PyqtcliConfig`): PyqtcliConfig object representing
            project config file.
        qrc_path (str): Path to the qrc file that need to add the qresource
            nodes corresponding to `res_folders`.
        res_folders (tuple): Paths to folders of resources to record.
        alias (bool): If True, aliases will be generated while resources are
            recorded.
        verbose (bool): Boolean determining if messages will be displayed.
    """
    qrc_file = read_qrc(qrc_path)
    recorded_dirs = config.get_dirs(qrc_file.name)

    # Remove duplication in res_folders with a set
    res_folders = set(res_folders)

    # Process each resource folders passed
    for folder in res_folders:
        # rel_path => relative path of folder from project directory
        rel_path = os.path.relpath(folder, config.dir_path)

        # Check if given resources folder has already been recorded
        if rel_path in recorded_dirs:
            v.warning("You have already added \'{}\' to {}.".format(
                    folder, qrc_file.name))
            continue

        # Add folder to dirs variable in the config file
        try:
            config.add_dirs(qrc_file.name, rel_path, commit=False)
        except PyqtcliConfigError:
            v.error("{} isn't part of the project.".format(qrc_path))
            raise click.Abort()

        # Add qresource to qrc file
        prefix = get_prefix(folder)
        qrc_file.add_qresource(prefix)
        fill_qresource(qrc_file, folder, prefix)

        v.info("qresource with prefix: \'{}\' has been recorded in {}.".format(
                prefix, qrc_path), verbose)

    qrc_file.build()
    config.save()

    if alias:
        write_alias([qrc_file.path], verbose)
Esempio n. 4
0
def test_addqres_two_times(config, test_resources):
    runner = CliRunner()

    # Copy resources dir to make another resource folder in another directory
    os.mkdir("test")
    shutil.copytree("resources", "test/other_res")

    # Generate a qrc file named res and update config file
    runner.invoke(pyqtcli, ["new", "qrc", "res.qrc"])

    # Create to qresources in res.qrc
    runner.invoke(pyqtcli, ["addqres", "res.qrc", "resources"])
    runner.invoke(pyqtcli, ["addqres", "-a", "res.qrc", "test/other_res"])

    # Parse qrc file
    qrcfile = read_qrc("res.qrc")

    # Check qresources has been added
    qrcfile.get_qresource("/resources")
    qrcfile.get_qresource("/other_res")

    # Check file subelements in qresource "/resources"
    resources = qrcfile.list_resources("/resources")

    for root, dirs, files in os.walk("resources"):
        for f in files:
            assert os.path.join(root, f) in resources

    assert len(resources) == test_resources

    # Check file subelements in qresource "/other_res"
    resources = qrcfile.list_resources("/other_res")

    for root, dirs, files in os.walk("test/other_res"):
        for f in files:
            assert os.path.join(root, f) in resources

    assert len(resources) == test_resources

    # Check resources' alias in other_res qresource
    files = qrcfile.list_files("/other_res")

    for resource in files:
        assert os.path.basename(resource.text) == resource.attrib["alias"]

    # Check that the two res folders have been added to dirs variable of
    # config file
    config.read()
    assert sorted(config.get_dirs("res.qrc")) == sorted(["resources", "test/other_res"])
Esempio n. 5
0
def test_new_qrc_from_folder(config, test_resources):
    runner = CliRunner()

    # launch makerc command
    runner.invoke(pyqtcli, ["new", "qrc", "test.qrc", "resources"])

    assert os.path.isfile("test.qrc")

    qrc = read_qrc("test.qrc")

    # Check qresources and their prefix attribute corresponding to
    # directories of the first level of resources folder
    first_dirs = [
        "/" + d for d in os.listdir("resources")
        if os.path.isdir(os.path.join("resources", d))
    ]
    first_dirs.append("/")

    for qresource in qrc.qresources:
        assert qresource.attrib.get("prefix", None) in first_dirs
        directory = first_dirs.pop(
            first_dirs.index(qresource.attrib.get("prefix"))
        )

        # Get all resources files contained in the current qresource
        res = qrc.list_resources(qresource.attrib["prefix"])

        # Special case for root directory to not get into sub directories
        if directory == "/":
            resources = [
                os.path.join("resources", r)
                for r in os.listdir("resources")
                if os.path.isfile(os.path.join("resources", r))
            ]

            for resource in resources:
                assert resource in res

            continue

        # Search if resource files have been recorded correctly in other
        # directories
        for root, dirs, files in os.walk("resources" + directory):
            for file_path in files:
                assert os.path.join(root, file_path) in res

    # Verify if all dirs have been checked
    assert first_dirs == []
Esempio n. 6
0
def test_read_qrc():
    qrc = (
        QRCTestFile("res")
        .add_qresource().add_file("file.txt")
        .add_qresource("/images").add_file("logo.png").add_file("fg.bmp")
        .build()
    )

    r_qrc = read_qrc("res.qrc")

    # check qrc content is the same
    assert str(qrc) == str(r_qrc)

    # Check that the list of qresource is identical
    for qres, r_qres in zip(qrc.qresources, r_qrc.qresources):
        assert qres.attrib == r_qres.attrib
Esempio n. 7
0
def test_complex_addqres(config, test_resources):
    runner = CliRunner()

    # Make a new dir to complicate path between resources folder and qrc file
    os.mkdir("test")
    shutil.move("resources", "test")

    # Generate a qrc file named res and update config file
    runner.invoke(pyqtcli, ["new", "qrc", "../res.qrc"])

    result = runner.invoke(pyqtcli, ["addqres", "-a", "-v", "../res.qrc", "test/resources"])
    assert result.exit_code == 0

    # Get in res.qrc directory
    os.chdir("..")

    # Parse qrc file
    qrcfile = read_qrc("res.qrc")

    # Check qresource has been added
    qrcfile.get_qresource("/resources")

    # Check file subelements in qresource
    resources = qrcfile.list_resources("/resources")

    for root, dirs, files in os.walk("test/resources"):
        for f in files:
            assert os.path.join(root, f) in resources

    assert len(resources) == test_resources

    # Check res_folder has been added to dirs variable of config file
    config.read()
    assert config.get_dirs("res.qrc") == ["test/resources"]

    # Check resources' alias
    files = qrcfile.list_files("/resources")

    for resource in files:
        assert os.path.basename(resource.text) == resource.attrib["alias"]
Esempio n. 8
0
def test_rmqres_with_multiple_res_folders_separately(config, test_resources):
    runner = CliRunner()

    # Copy resources dir to make another resource folder in another directory
    os.mkdir("test")
    shutil.copytree("resources", "test/other_res")

    # Generate a qrc file named res and update config file
    runner.invoke(pyqtcli, ["new", "qrc"])

    # Add resources folder config file and qrc
    runner.invoke(
        pyqtcli, ["addqres", "res.qrc", "resources", "test/other_res"])

    # Remove resources folder config file and qrc
    runner.invoke(pyqtcli, ["rmqres", "res.qrc", "resources"])
    runner.invoke(pyqtcli, ["rmqres", "res.qrc", "test/other_res"])

    # Parse qrc file
    qrcfile = read_qrc("res.qrc")

    # Check qresources has been deleted
    with pytest.raises(QresourceError) as e:
        qrcfile.get_qresource("/resource")
    assert format_msg(str(e.value)) == (
        "Error: No <qresource> node corresponding to '/resource' prefix"
    )

    # Check qresources has been deleted
    with pytest.raises(QresourceError) as e:
        qrcfile.get_qresource("/other_res")
    assert format_msg(str(e.value)) == (
        "Error: No <qresource> node corresponding to '/other_res' prefix"
    )

    # Check res_folder has been removed from dirs variable of config file
    config.read()
    assert config.get_dirs("res.qrc") == []
Esempio n. 9
0
def rmqres(config, qrc_path, res_folders, verbose):
    """
    Remove a <qresource> element with a prefix attribute set to the base name
    of the given folder of resources. All <file> subelements are removed too.

    Args:
        config (:class:`PyqtcliConfig`): PyqtcliConfig object representing
            project config file.
        qrc_path (str): Path to the qrc file that need to remove the qresource
            nodes corresponding to `res_folders`.
        res_folders (tuple): Paths to folders of resources to remove.
        verbose (bool): Boolean determining if messages will be displayed.
    """
    qrcfile = read_qrc(qrc_path)

    # Remove duplication in res_folders with a set
    res_folders = set(res_folders)

    folders = [os.path.relpath(f, config.dir_path) for f in res_folders]

    # remove folder to dirs variable in the config file
    try:
        config.rm_dirs(qrcfile.name, folders, commit=False)
    except PyqtcliConfigError:
        v.error("{} isn't part of the project.".format(qrc_path))
        raise click.Abort()

    for folder in folders:
        # Remove qresource to qrc file
        prefix = get_prefix(folder)
        qrcfile.remove_qresource(prefix)

        v.info("Resources folder: \'{}\' has been removed in {}.".format(
                folder, qrc_path), verbose)

    config.save()
    qrcfile.build()
Esempio n. 10
0
def test_read_qrc_on_nonexistent_qrc():
    with pytest.raises(QRCFileError) as e:
        read_qrc("res.qrc")
    assert str(e.value) == "Error: Qrc file \'res.qrc\' does not exist."