File: test_makespec.py

package info (click to toggle)
pyinstaller 6.18.0%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,824 kB
  • sloc: python: 41,828; ansic: 12,123; makefile: 171; sh: 131; xml: 19
file content (82 lines) | stat: -rw-r--r-- 3,189 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#-----------------------------------------------------------------------------
# Copyright (c) 2005-2023, PyInstaller Development Team.
#
# Distributed under the terms of the GNU General Public License (version 2
# or later) with exception for distributing the bootloader.
#
# The full license is in the file COPYING.txt, distributed with this software.
#
# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
#-----------------------------------------------------------------------------

import os
import argparse

import pytest

from PyInstaller.building import makespec


def test_make_variable_path():
    p = os.path.join(makespec.HOMEPATH, "aaa", "bbb", "ccc")
    assert (makespec.make_variable_path(p) == ("HOMEPATH", os.path.join("aaa", "bbb", "ccc")))


def test_make_variable_path_regression():
    p = os.path.join(makespec.HOMEPATH + "aaa", "bbb", "ccc")
    assert makespec.make_variable_path(p) == (None, p)


def test_Path_constructor():
    p = makespec.Path("aaa", "bbb", "ccc")
    assert p.path == os.path.join("aaa", "bbb", "ccc")


def test_Path_repr():
    p = makespec.Path(makespec.HOMEPATH, "aaa", "bbb", "ccc")
    assert p.path == os.path.join(makespec.HOMEPATH, "aaa", "bbb", "ccc")
    assert (repr(p) == "os.path.join(HOMEPATH,%r)" % os.path.join("aaa", "bbb", "ccc"))


def test_Path_repr_relative():
    p = makespec.Path("aaa", "bbb", "ccc.py")
    assert p.path == os.path.join("aaa", "bbb", "ccc.py")
    assert repr(p) == "%r" % os.path.join("aaa", "bbb", "ccc.py")


def test_Path_regression():
    p = makespec.Path(makespec.HOMEPATH + "-aaa", "bbb", "ccc")
    assert p.path == os.path.join(makespec.HOMEPATH + "-aaa", "bbb", "ccc")
    assert (repr(p) == repr(os.path.join(makespec.HOMEPATH + "-aaa", "bbb", "ccc")))


def test_add_data(capsys):
    """
    Test CLI parsing of --add-data and --add-binary.
    """
    parser = argparse.ArgumentParser()
    makespec.__add_options(parser)

    assert parser.parse_args([]).datas == []
    assert parser.parse_args(["--add-data", "/foo/bar:."]).datas == [("/foo/bar", ".")]
    assert parser.parse_args([r"--add-data=C:\foo\bar:baz"]).datas == [(r"C:\foo\bar", "baz")]
    assert parser.parse_args([r"--add-data=c:/foo/bar:baz"]).datas == [(r"c:/foo/bar", "baz")]
    assert parser.parse_args([r"--add-data=/foo/:bar"]).datas == [("/foo/", "bar")]

    for args in [["--add-data", "foo/bar"], ["--add-data", "C:/foo/bar"]]:
        with pytest.raises(SystemExit):
            parser.parse_args(args)
        assert '--add-data: Wrong syntax, should be --add-data=SOURCE:DEST' in capsys.readouterr().err

    if os.pathsep == ";":
        assert parser.parse_args(["--add-data", "foo;."]).datas == [("foo", ".")]
    else:
        assert parser.parse_args(["--add-data", "foo;bar:."]).datas == [("foo;bar", ".")]

    with pytest.raises(SystemExit):
        parser.parse_args(["--add-data", "foo:"])
    assert '--add-data: You have to specify both SOURCE and DEST' in capsys.readouterr().err

    options = parser.parse_args(["--add-data=a:b", "--add-data=c:d", "--add-binary=e:f"])
    assert options.datas == [("a", "b"), ("c", "d")]
    assert options.binaries == [("e", "f")]