summaryrefslogtreecommitdiff
path: root/setuptools/_distutils/tests/test_cmd.py
blob: f5104e1db77d1b55045e90302cfebb009f7edcfa (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
"""Tests for distutils.cmd."""
import unittest
import os
from test.support import captured_stdout

from distutils.cmd import Command
from distutils.dist import Distribution
from distutils.errors import DistutilsOptionError
from distutils import debug
import pytest


class MyCmd(Command):
    def initialize_options(self):
        pass


class TestCommand(unittest.TestCase):
    def setUp(self):
        dist = Distribution()
        self.cmd = MyCmd(dist)

    def test_ensure_string_list(self):

        cmd = self.cmd
        cmd.not_string_list = ['one', 2, 'three']
        cmd.yes_string_list = ['one', 'two', 'three']
        cmd.not_string_list2 = object()
        cmd.yes_string_list2 = 'ok'
        cmd.ensure_string_list('yes_string_list')
        cmd.ensure_string_list('yes_string_list2')

        with pytest.raises(DistutilsOptionError):
            cmd.ensure_string_list('not_string_list')

        with pytest.raises(DistutilsOptionError):
            cmd.ensure_string_list('not_string_list2')

        cmd.option1 = 'ok,dok'
        cmd.ensure_string_list('option1')
        assert cmd.option1 == ['ok', 'dok']

        cmd.option2 = ['xxx', 'www']
        cmd.ensure_string_list('option2')

        cmd.option3 = ['ok', 2]
        with pytest.raises(DistutilsOptionError):
            cmd.ensure_string_list('option3')

    def test_make_file(self):

        cmd = self.cmd

        # making sure it raises when infiles is not a string or a list/tuple
        with pytest.raises(TypeError):
            cmd.make_file(infiles=1, outfile='', func='func', args=())

        # making sure execute gets called properly
        def _execute(func, args, exec_msg, level):
            assert exec_msg == 'generating out from in'

        cmd.force = True
        cmd.execute = _execute
        cmd.make_file(infiles='in', outfile='out', func='func', args=())

    def test_dump_options(self):

        msgs = []

        def _announce(msg, level):
            msgs.append(msg)

        cmd = self.cmd
        cmd.announce = _announce
        cmd.option1 = 1
        cmd.option2 = 1
        cmd.user_options = [('option1', '', ''), ('option2', '', '')]
        cmd.dump_options()

        wanted = ["command options for 'MyCmd':", '  option1 = 1', '  option2 = 1']
        assert msgs == wanted

    def test_ensure_string(self):
        cmd = self.cmd
        cmd.option1 = 'ok'
        cmd.ensure_string('option1')

        cmd.option2 = None
        cmd.ensure_string('option2', 'xxx')
        assert hasattr(cmd, 'option2')

        cmd.option3 = 1
        with pytest.raises(DistutilsOptionError):
            cmd.ensure_string('option3')

    def test_ensure_filename(self):
        cmd = self.cmd
        cmd.option1 = __file__
        cmd.ensure_filename('option1')
        cmd.option2 = 'xxx'
        with pytest.raises(DistutilsOptionError):
            cmd.ensure_filename('option2')

    def test_ensure_dirname(self):
        cmd = self.cmd
        cmd.option1 = os.path.dirname(__file__) or os.curdir
        cmd.ensure_dirname('option1')
        cmd.option2 = 'xxx'
        with pytest.raises(DistutilsOptionError):
            cmd.ensure_dirname('option2')

    def test_debug_print(self):
        cmd = self.cmd
        with captured_stdout() as stdout:
            cmd.debug_print('xxx')
        stdout.seek(0)
        assert stdout.read() == ''

        debug.DEBUG = True
        try:
            with captured_stdout() as stdout:
                cmd.debug_print('xxx')
            stdout.seek(0)
            assert stdout.read() == 'xxx\n'
        finally:
            debug.DEBUG = False